MAVEN的配置细节
因为我们使用Java Config来代替web.xml
配置文件,所以需要修改一下maven-war-plugin
的配置,避免因为其找到不web.xml
文件而报错。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<!--忽略对web.xml文件的检查-->
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
Spring MVC的Java Config
web.xml的Java Config
- 第一种方式,实现
WebApplicationInitializer
接口
@ComponentScan
@Configuration
@EnableWebMvc // 启用MVC Java config的支持. 相当于 <mvc:annotation-driven/>
public class WebAppConfig {
}
/**
* 实现WebApplicationInitializer 接口中的onStartup 方法
* <p>
* 该类就相当于 web.xml 文件
*/
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
/**
下面的代码,等价于 :
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
*/
//1. 创建 AnnotationConfigWebApplicationContext
AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext();
//用来加载所有的Bean
webApplicationContext.register(WebAppConfig.class);
webApplicationContext.setServletContext(servletContext);
//2. 创建 DispatcherServlet
ServletRegistration.Dynamic dispatcherServlet =
// 通过DispatcherServlet来创建web 相关 Bean,所以传入webApplicationContext对象
servletContext.addServlet("dispatcherServlet", new DispatcherServlet(webApplicationContext));
/**
下面的代码,等价于
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
*/
dispatcherServlet.addMapping("/");
dispatcherServlet.setLoadOnStartup(1);
//3. 注册filter
FilterRegistration.Dynamic characterEncoding =
servletContext.addFilter("characterEncoding", new CharacterEncodingFilter("utf-8", true));
characterEncoding.addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "dispatcherServlet");
}
}
- 第二种方式,继承
AbstractAnnotationConfigDispatcherServletInitializer
推荐使用这种方式。
@ComponentScan
@Configuration
@EnableWebMvc // 启用MVC Java config的支持. 相当于 <mvc:annotation-driven/>
public class WebAppConfig {
}
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* ContextLoaderListener创建的应用上下文中的Bean的配置文件
* 也就是Spring的主配置文件
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{Config.class};
}
/**
* DispatcherServlet应用上下文相关的Bean的配置文件
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebAppConfig.class};
}
/**
* 将一个或者多种路径映射到DispatcherServlet
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
注册自定义Servlet,Filter和Linstener
- 第一种方式,可以使用Servlet3.0的相关注解,例如
@WebFilter
- 第二种方式,可以通过实现Spring的
WebApplicationInitializer
接口,在该接口的方法中,注册相关Servlet,Filter和Linstener
网友评论