什么是DispatcherServlet
DispatcherServlet在Spring MVC中属于MVC模式的C controller控制层,用于集中处理来自前端的请求,来自前端的请求通过DispatcherServlet进行分发处理,并且返回视图。
什么时候去加载DispatcherServlet
在ContextLoaderListener实现了spring mvc容器的根上下文的初始化,这个根上下文被整个web应用共享,而这个根上下文又被保存至ServletContext,这个ServletContext被tomcat中的所有应用共享。
而DispatcherServlet会持有自己的上下文,用于保存spring mvc的Bean对象他的上下文作为由ContextLoaderListener实现的根上下文的子上下文。
那么什么时候去加载DispatcherServlet?
首先通过上文的描述可以明确一点:DispatcherServlet必然在ContextLoaderListener加载完成之后才会去加载。
具体的加载时机:
要根据web.xml中servlet关于load-on-startup的配置来确定:
1、如果没有配置,或者配置为负数,那么在第一次request请求时加载
2、如果配置为大于等于0,那就在容器启动时加载,且启动的顺序根据配置数值的大小来排序,数字越小,越先启动。
从DispatcherServlet的继承体系了解它的作用
DispatcherServlet继承自FrameworkServlet、HttpServletBean、HttpServlet,因此他可以通过Servlet的API来对请求做出处理与相应。
DispatcherServlet主要做了两个事情:
1、初始化,通过HttpServlet的init来触发初始化操作,而在Servlet初始化时就会调用init方法。
2、处理请求。作为一个Servlet、Web容器会调用到Servlet的doGet和doPost方法,这些方法被FrameworkServlet重写,因此在初始化DispatcherServlet后,Web容器的请求会调用到FrameworkServlet的doGet、doPost,经过一些处理后,调用到DispatcherServlet的doDispatch,而doDispatch就是DispatcherServlet处理请求的核心入口。
明天看源码。。今天加班没时间了。。。。