首页 > 代码库 > DispatcherServlet
DispatcherServlet
DispatcherServlet(前端控制器)是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
DispatcherServlet 作为前置控制器是web服务器的入口,是spring mvc最重要的一个类,通过它的生命周期可以加深对web服务器的理解。
1)初始化阶段:调用init()方法,Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。
在Servlet的整个生命周期内,init()方法只被调用一次。
2)响应客户请求阶段:调用service()方法
3)终止阶段:调用destroy()方法
Servlet初始化阶段:
在下列时刻Servlet容器装载Servlet:
1)Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:
<loadon-startup>1</loadon-startup>
2)在Servlet容器启动后,客户首次向Servlet发送请求
3)Servlet类文件被更新后,重新装载Servlet
DispatcherServlet的结构
复习了上述知识后我们来看看DispatcherServlet的结构:
DispatcherServlet继承自抽象类:FrameworkServlet,间接继承了HttpServlet (FrameworkServlet继承自HttpServletBean,而HttpServletBean继承自HttpServlet )
Servlet的初始化
1 protected void initStrategies(ApplicationContext context) {
2 initMultipartResolver(context); //文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
3 initLocaleResolver(context); //本地化解析
4 initThemeResolver(context); //主题解析
5 initHandlerMappings(context); //通过HandlerMapping,将请求映射到处理器
6 initHandlerAdapters(context); //通过HandlerAdapter支持多种类型的处理器
7 initHandlerExceptionResolvers(context); //如果执行过程中遇到异常将交给HandlerExceptionResolver来解析
8 initRequestToViewNameTranslator(context); //直接解析请求到视图名
9 initViewResolvers(context); //通过ViewResolver解析逻辑视图名到具体视图实现
10 initFlashMapManager(context); //flash映射管理器
11 }
DispatcherServlet