在servlet 2.5的情况下,要将DispatcherServlet配置到servlet容器中需要配置web.xml,使用spring同样需要配置web.xml
<!-- 引入spring -->
<!-- needed for ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- Bootstraps the root web application context before servlet initialization -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springMVC -->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 指定配置文件的路径,约定:默认位置为:/WEB-INF/springDispatcherServlet-servlet.xml
,若省略该参数,则会到WEB-INF下找名为servlename-servlet.xml的文件,这里servlet-name=springDispatcherServlet
所以会到WEB-INF下找名为springDispatcherServlet-servlet.xml的文件
-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springDispatcherServlet-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup> <!-- 项目启动时自动加载 -->
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
<!-- "/"代表拦截一切请求
"/xxx" 代表仅拦截xxx目录下的请求
".action"代表拦截以action结尾的请求
-->
</servlet-mapping>
借助于servlet 3.0 可以通过java类来将DispatcherServlet纳入容器。需要继承AbstractAnnotationConfigDispatcherServletInitializer类,部署到 Servlet 3.0 容器中的时候,容器会自动发现它,并用它来配置 Servlet 上下文
public class MvcWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {com.yang.config.RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {com.yang.config.WebConfig.class}; //指定springMVC配置类
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"}; //将DispatcherServlet映射到“/” ,即所有请求
}
}
通常,一个项目中会有两个spring应用上下文,一个用于管理controller、视图解析器等,由DispatcherServlet创建;一个用于管理数据层组件等,由ContextLoaderListener创建。在servlet 2.5中比较明了。
通过MvcWebAppInitializer 类可以指定这两个应用上下文对应的配置类。
rootConfig.java,排除了控制层组件
@Configuration
//组件扫描,并排除springMVC相关的组件
@ComponentScan(basePackages = "com.yang", excludeFilters = {@ComponentScan.Filter(type= FilterType.ANNOTATION, value= Controller.class)})
public class RootConfig {
}
配置springMVC,只需为扩展了WebMvcConfigurationSupport类添加@EnableWebMvc注释即可。
@Configuration
@EnableWebMvc //启用springMVC
@ComponentScan("com.yang.controller")
public class WebConfig extends WebMvcConfigurationSupport {
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver(); //配置jsp视图解析器
resolver.setPrefix("/WEB-INF/views/"); //增加前缀
resolver.setSuffix(".jsp"); //后缀
return resolver;
}
/**
* 使其能够处理静态资源
* @param configure
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configure){
configure.enable();
}
}