首页 > 代码库 > 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