配置DispatcherServlet
DispatcherServlet是SpringMVC的核心。
按照传统的方式,像DispatcherServlet这样的Servlet会配置在web.xml文件中。但是借助于Servlet3规范和Spring3.1功能的增强,这种方式已经不是唯一的方案。并且我个人也极度不喜欢xml的方式。(例如需要引入一堆的命名空间啊以及schemaLocation以及一堆的xml标签)
WebAppInitializer.java
package config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* 按照AbstractAnnotationConfigDispatcherServletInitializer的定义
* 它会同时创建DispatcherServlet和ContextLoaderListener
* 可用此种方式代替传统的web.xml
* @author yd
*
*/
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class }; //指定根配置类,例如:application.xml
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class }; //ָ指定Web配置类,例如:springMVC.xml
}
@Override
protected String[] getServletMappings() { //将DispatcherServlet映射到"/"
return new String[] { "/" };
}
}
启用SpringMVC
WebConfig.java
package config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc //启动SpringMVC
@ComponentScan("扫描的包名") //启动组件扫描
public class WebConfig extends WebMvcConfigurerAdapter {
//配置JSP视图解析器
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
//配置静态资源的处理
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable(); //对静态资源的请求转发到容器缺省的servlet,而不使用DispatcherServlet
}
}
RootConfig.java
package config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@ComponentScan( basePackages={"test"},
excludeFilters = { @Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)}
//excludeFilters.指定不适合组件扫描的类型。
)
public class RootConfig {
}
注意:
如果按照此种方式配置DispatcherServlet,而不是使用web.xml的话,那唯一的问题在于它只能部署到支持Servlet3.0的服务器才能工作,如tomcat7或以上版本。
至此最基本的配置已经配好了。但是,如果你想注册其他的Servlet,Filter或Listener的话,那怎么办呢?
添加其他的Servlet,Filter或Listener
想往Web容器中注册其他组件的话,只需创建一个新的初始化器就可以了。最简单的方式就是实现Spring的WebApplicationInitializer接口。
添加Servlet
package config;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import servlet.MyServlet;
public class MyServletInitializer implements WebApplicationInitializer{
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
/** 注册Servlet */
ServletRegistration.Dynamic myServlet = servletContext.addServlet("myServlet", MyServlet.class); // 注册Servlet
myServlet.addMapping("/myServlet"); // 映射Servlet
}
添加Filter
package config;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import servlet.MyServlet;
public class MyServletInitializer implements WebApplicationInitializer{
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
/** 注册Servlet */
ServletRegistration.Dynamic myServlet = servletContext.addServlet("myServlet", MyServlet.class); // 注册Servlet
myServlet.addMapping("/myServlet"); // 映射Servlet
/** 注册Filter */
FilterRegistration.Dynamic myFilter = servletContext.addFilter("myFilter", MyFilter.class); // 注册Filter
myFilter.addMappingForUrlPatterns(null, false, "/myFilter"); // 添加Filter的映射路径
}
}
最终配置文件目录
以上只是学习Spring实战所写的笔记,如有错误,请指正。谢谢