使用JavaConfig和注解方式实现零xml配置的Spring MVC项目

使用JavaConfig和注解方式实现零xml配置的Spring MVC项目,第1张

概述1. 引言 Spring MVC是Spring框架重要组成部分,是一款非常优秀的Web框架。Spring MVC以DispatcherServlet为核心,通过可配置化的方式去处理各种web请求。 在 1. 引言

Spring MVC是Spring框架重要组成部分,是一款非常优秀的Web框架。Spring MVC以dispatcherServlet为核心,通过可配置化的方式去处理各种web请求。

在平时项目开发中,通常在web.xml下配置元素,但是我希望尝试通过实现WebApplicationInitilalizer接口来实现无web.xml的方式去搭建一个Spring MVC项目。

2. Spring MVC 项目的搭建2.1 构建Maven项目pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">	<modelVersion>4.0.0</modelVersion>	<groupID>org.aming</groupID>	<artifactID>springmvc1</artifactID>	<version>0.0.1-SNAPSHOT</version>	<packaging>war</packaging>	<propertIEs>		<!-- Generic propertIEs -->		<java.version>1.8</java.version>		<project.build.sourceEnCoding>UTF-8</project.build.sourceEnCoding>		<project.reporting.outputEnCoding>UTF-8</project.reporting.outputEnCoding>		<!-- Web -->		<Jsp.version>2.2</Jsp.version>		<Jstl.version>1.2</Jstl.version>		<servlet.version>3.1.0</servlet.version>		<!-- Spring -->		<spring.version>4.1.5.RELEASE</spring.version>		<!-- Logging -->		<logback.version>1.0.13</logback.version>		<slf4j.version>1.7.5</slf4j.version>	</propertIEs>	<dependencIEs>		<dependency>			<groupID>javax</groupID>			<artifactID>javaee-web-API</artifactID>			<version>7.0</version>			<scope>provIDed</scope>		</dependency>		<!-- Spring MVC -->		<dependency>			<groupID>org.springframework</groupID>			<artifactID>spring-webmvc</artifactID>			<version>${spring.version}</version>		</dependency>		<!-- 其他Web依赖 -->		<dependency>			<groupID>javax.servlet</groupID>			<artifactID>Jstl</artifactID>			<version>${Jstl.version}</version>		</dependency>		<dependency>			<groupID>javax.servlet</groupID>			<artifactID>javax.servlet-API</artifactID>			<version>${servlet.version}</version>			<scope>provIDed</scope>		</dependency>		<dependency>			<groupID>javax.servlet.Jsp</groupID>			<artifactID>Jsp-API</artifactID>			<version>${Jsp.version}</version>		</dependency>		<!-- Spring -->		<dependency>			<groupID>org.springframework</groupID>			<artifactID>spring-tx</artifactID>			<version>${spring.version}</version>		</dependency>		<dependency>			<groupID>org.springframework</groupID>			<artifactID>spring-core</artifactID>			<version>${spring.version}</version>		</dependency>		<dependency>			<groupID>org.springframework</groupID>			<artifactID>spring-beans</artifactID>			<version>${spring.version}</version>		</dependency>		<dependency>			<groupID>org.springframework</groupID>			<artifactID>spring-context</artifactID>			<version>${spring.version}</version>		</dependency>		<dependency>			<groupID>org.springframework</groupID>			<artifactID>spring-context-support</artifactID>			<version>${spring.version}</version>		</dependency>		<!-- 使用SLF4J和Logback作为日志 -->		<dependency>			<groupID>org.slf4j</groupID>			<artifactID>slf4j-api</artifactID>			<version>${slf4j.version}</version>		</dependency>		<!-- 代码直接调用log4j会被桥接到slf4j -->		<dependency>			<groupID>org.slf4j</groupID>			<artifactID>log4j-over-slf4j</artifactID>			<version>${slf4j.version}</version>		</dependency>		<!-- 代码直接调用commons-logging会被桥接到slf4j -->		<dependency>			<groupID>org.slf4j</groupID>			<artifactID>jcl-over-slf4j</artifactID>			<version>${slf4j.version}</version>		</dependency>		<!-- 代码直接调用java.util.logging会被桥接到slf4j -->		<dependency>			<groupID>org.slf4j</groupID>			<artifactID>jul-to-slf4j</artifactID>			<version>${slf4j.version}</version>		</dependency>		<!-- log4jdbc -->		<dependency>			<groupID>com.Googlecode.log4jdbc</groupID>			<artifactID>log4jdbc</artifactID>			<version>1.2</version>			<scope>runtime</scope>		</dependency>		<dependency>			<groupID>ch.qos.logback</groupID>			<artifactID>logback-classic</artifactID>			<version>${logback.version}</version>		</dependency>		<dependency>			<groupID>ch.qos.logback</groupID>			<artifactID>logback-core</artifactID>			<version>${logback.version}</version>		</dependency>		<dependency>			<groupID>ch.qos.logback</groupID>			<artifactID>logback-access</artifactID>			<version>${logback.version}</version>		</dependency>	</dependencIEs>	<build>		<finalname>springmvc</finalname>		<plugins>			<plugin>				<groupID>org.apache.maven.plugins</groupID>				<artifactID>maven-compiler-plugin</artifactID>				<version>2.5.1</version>				<configuration>					<source>${java.version}</source>					<target>${java.version}</target>				</configuration>			</plugin>			<plugin>				<groupID>org.apache.maven.plugins</groupID>				<artifactID>maven-war-plugin</artifactID>				<version>2.3</version>				<configuration>					<failOnMissingWebXml>false</failOnMissingWebXml>				</configuration>			</plugin>		</plugins>	</build></project>
2.1 日志配置

我们使用logback去管理我们的日志,相比去log4j,logback性能更为出色。我们在src/main/reources目录下,新建logback.xml,其内容如下:

<?xml version="1.0" enCoding="UTF-8"?><configuration scan="true" scanPeriod="1 seconds">	<contextListener >		<resetJul>true</resetJul>	</contextListener>		<jmxConfigurator/>		<appender name="console" >		<encoder>			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%n是换行符--> 			<pattern>				%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%method - [%X{logback}] - %msg%n			</pattern>		</encoder>	</appender>		<logger name="org.springframework.web" level="DEBUG"/>		<root level="info">		<appender-ref ref="console"/>	</root></configuration>

说明:在开发Spring MVC的过程中经常出现和参数类型相关的4XX错误,将org.springframework.web包下的类的日志级别设置为deBUG可以看到更详细的错误信息。

2.3 演示页面

在src/main/resources下建立vIEws目录,并在此目录下新建index.Jsp,body元素中添加以下内容:

    <pre>        Welcome to Spring MVC world    </pre>

说明:

在Maven标准中,页面通常放在src/main/webapp/WEB-INF下,此处这样放置页面的主要目的是和Spring Boot的页面放置方式保持一致;在ecplise中新建Jsp页面默认是在webapp中,即使是在src/main/resources下目录点击新建,因此在新建Jsp时需要重新选择合适的目录。
2.4 Spring MVC 配置

新建ApplicationConfiguration类作为Spring MVC的配置类,其内容如下:

@Configuration@EnableWebMvc@ComponentScan("org.aming.demo.springmvc")public class ApplicationConfiguration {		@Bean	public InternalResourceVIEwResolver vIEwResolver() {		InternalResourceVIEwResolver vIEwResolver = new InternalResourceVIEwResolver();		//运行时代码会将位于src/main/resources目录下的页面自动编译到/WEB-INF/classes/vIEws/下        //如果是src/main/webapp/WEB-INF的页面,那么prefix是/WEB-INF/vIEws/		vIEwResolver.setPrefix("/WEB-INF/classes/vIEws/");		vIEwResolver.setSuffix(".Jsp");		vIEwResolver.setVIEwClass(JstlVIEw.class);		return vIEwResolver;	}}

说明:

@Configuration注解表明ApplicationConfiguration是一个普普通通配置类;@EnableWebMvc注解会开启一些默认配置,如一些VIEwResolver或者MessageConverter等;@ComponentScan注解将会扫描指定包下通过注解配置的bean。
2.5 Web配置

新建WebInitializer类并实现WebApplicationInitializer接口:

public class WebInitializer implements WebApplicationInitializer {	@OverrIDe	public voID onStartup(ServletContext servletContext) throws servletexception {		AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();		 ctx.register(ApplicationConfiguration.class);		 ctx.setServletContext(servletContext);		 Dynamic servlet = servletContext.addServlet("dispatcher",new dispatcherServlet(ctx));		 servlet.addMapPing("/");		 servlet.setLoadOnStartup(1);	}}

说明:

WebApplicationInitializer是Spring提供用来配置Servlet3.0+配置的接口,从而实现了替代web.xml的位置。实现此接口将会自动被SpringServletContainerInitializer(用来启动Servlet3.0容器)获取到。新建WebApplicationContext,注册配置类(ApplicationConfiguration),并和其和当前servletContext关联注册Spring MVC的dispatcherServlet。2.6 简单控制器

新建HelloController类去完成URL和方法之间的映射:

@Controllerpublic class HelloController {	@RequestMapPing("/index")	public String hello() {		return "index";	}}
3. 运行结果

将项目打成war包部署到tomcat中,启动tomcat,在浏览器中输入:http://127.0.0.1:8080/springmvc/index

4. 参考书籍

汪云飞:JavaEE开发的颠覆者:Spring Boot实战。

总结

以上是内存溢出为你收集整理的使用JavaConfig和注解方式实现零xml配置的Spring MVC项目全部内容,希望文章能够帮你解决使用JavaConfig和注解方式实现零xml配置的Spring MVC项目所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1209964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存