Spring MVC 用DispatcherServlet处理请求

SpringMVC框架和其他web的MVC框架一样:请求驱动;所有设计都围绕一个servlet展开,它负责把所有的请求都分发到控制器,同时提供其他web开发需要的功能。作为Spring的中央处理器,DispatcherServlet做的更多。它与Spring IOC无缝集成,spring的任何特性,在springMVC中都可以使用。

DispatcherServlet是一个前端控制器的设计模式,处理流程如下:(图片来源于网络)

《Spring MVC 用DispatcherServlet处理请求》

DispatcherServlet就是这个servlet,继承自HttpServlet,需要在web.xml中配置,例如:

<web-app>
    <servlet>
        <servlet-name>helloWorld</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>helloWorld</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

配置好DispatcherServlet之后,请求经过这个servlet,会按照以下流程处理:

《Spring MVC 用DispatcherServlet处理请求》

收到一个http请求之后,DispatcherServlet根据HandlerMapping来选择并且调用适当的控制器。

控制器接受请求后,处理器适配器调用处理器进程处理,并给予使用的GET、Post方法适当的调用service方法,service方法将设置基于定义的业务逻辑的模型数据,并返回ModelAndView到DispatcherServlet。

DispatcherServlet会从ViewResolver获取帮助,获取视图。

视图确定后,把模型数据传递给视图,渲染,然后呈现在浏览器。

这是最基本的流程,其实还有一些操作是我们不必要关心的,如下是整个复杂的流程:

首先、搜索对应的上下文对象webApplicationContext,并把它作为一个属性绑定到请求上,以便控制器和其他组件能够使用它,属性的键名默认为:DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE。

将地区(local)解析器绑定到请求上,以便在处理时获得区域相关的信息。

将主题(theme)解析器绑定到请求上,以便其他组件处理请求时能够知道渲染那个主题文件。

如果你配置了multipart文件处理器,那么框架将查找该文件是不是multipart(分为多个部分连续上传)。若是,则将该请求包装成一个MultipartHttpServletRequest对象,以便处理链中的其他组件对它做进一步的处理。

该请求查找一个合适的处理器。如果可以找到对应的处理器,则与该处理器关联的整条执行链(前处理器、后处理器、控制器等)都会被执行,以完成相应模型的准备或视图的渲染

如果处理器返回的是一个模型(model),那么框架将渲染相应的视图。若没有返回任何模型(可能是因为前后的处理器出于某些原因拦截了请求等,比如,安全问题),则框架不会渲染任何视图,此时认为对请求的处理可能已经由处理链完成了。

 

    原文作者:Spring MVC
    原文地址: https://blog.csdn.net/cuiyaocool/article/details/82625911
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞