Spring mvc : DispatcherServlet

2017-11-02  本文已影响24人  MentallyL

c通过上篇我们知道了Spring mvc是需要配置一个DispatcherServlet,那么一个springmvc是怎么做到把一个请求通过一个Servlet来转发到不同的Controller上呢?

我们就需要了解下DispatcherServlet这个类,看看它到底做了什么。

DispatcherServlet的继承关系:

DispatcherServlet继承关系

各个Servlet的作用:

  1. HttpServletBean

主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。

  1. FrameworkServlet

将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。

  1. DispatcherServlet

初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。

在分析DispatcherServlet处理请求过程之前,我们回顾一下Servlet对于请求的处理。

HttpServlet提供了service方法用于处理请求,service使用了模板设计模式,在内部对于http get方法会调用doGet方法,http post方法调用doPost方法...........


Paste_Image.png

进入processRequest方法看下:




其中注册的监听器类型为ApplicationListener接口类型。

doDispatch方法功能简单描述一下:

首先根据请求的路径找到HandlerMethod(带有Method反射属性,也就是对应Controller中的方法),然后匹配路径对应的拦截器,有了HandlerMethod和拦截器构造个HandlerExecutionChain对象。HandlerExecutionChain对象的获取是通过HandlerMapping接口提供的方法中得到。有了HandlerExecutionChain之后,通过HandlerAdapter对象进行处理得到ModelAndView对象,HandlerMethod内部handle的时候,使用各种HandlerMethodArgumentResolver实现类处理HandlerMethod的参数,使用各种HandlerMethodReturnValueHandler实现类处理返回值。 最终返回值被处理成ModelAndView对象,这期间发生的异常会被HandlerExceptionResolver接口实现类进行处理。

上一篇 下一篇

猜你喜欢

热点阅读