1.SpringMVC流程图
先来看看流程图,从浏览器发送请求到响应完成经过的流程

2.配置DispatcherServlet
1 |
|
AbstractAnnotationConfigDispatcherServletInitializer会同时创建DispatcherServlet和
ContextLoaderListener。GetServletConfigClasses()方法返回的带有@Configuration注解的类将会用来定
义DispatcherServlet应用上下文中的bean。getRootConfigClasses()方法返回的带
有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下文中的bean。
3.AbstractAnnotationConfigDispatcherServletInitializer剖析
在Servlet 3.0环境中,容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类,如果能发现的话,就会用它来配置Servlet容器。
Spring提供了这个接口的实现,名为SpringServletContainerInitializer,这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring 3.2引入了一个便利的WebApplicationInitializer基础实现,也就是AbstractAnnotationConfigDispatcherServletInitializer。因为我们的Spittr-WebAppInitializer扩展了AbstractAnnotationConfig DispatcherServlet-Initializer(同时也就实现了WebApplicationInitializer),因此当部署到Servlet 3.0容器中的时候,容器会自动发现它,并用它来配置Servlet上下文.
4.启用Spring MVC
最少配置但勉强能用的Spring MVC配置
1 | //配置类注解 |
5.AbstractAnnotationConfigDispatcherServletInitializer额外配置
上面我们继承了AbstractAnnotationConfigDispatcherServletInitializer并重写了三个方法来配置上下文,但实际上还有更多的方法可以进行重载,从而实现额外的配置。
此类的方法之一就是customizeRegistration()。在AbstractAnnotationConfigDispatcherServletInitializer
将DispatcherServlet注册到Servlet容器中之后,就会调用customizeRegistration(),并将Servlet注册后得到的
Registration.Dynamic传递进来。通过重载customizeRegistration()方法,我们可以对DispatcherServlet进行额外的配置
- 使用customizeRegistration()配置文件上传
1 |
|
6.添加其他的Servlet和Filter
按照AbstractAnnotationConfigDispatcherServletInitializer的定义,它会创建DispatcherServlet和
ContextLoaderListener。但是,如果你想注册其他的Servlet、Filter或Listener的话,那该怎么办呢?
基于Java的初始化器(initializer)的一个好处就在于我们可以定义任意数量的初始化器类。因此,如果我们想往Web容器中注册其他组件的话,只需创建一个新的初始化器就可以了。最简单的方式就是实现Spring的WebApplicationInitializer接口。
