DispatcherServlet
;DispatcherServlet
请求处理映射器HandlerMapping
查找Handler
;HandlerMapping
根据用户请求的 url ,查找与之匹配的Handler
(也就是 Controller 中配置了相应路径的一个方法),返回一个执行链;DispatcherServlet
再请求处理适配器HandlerAdapter
执行Handler
;Handler
被执行;Handler
返回ModelAndView
对象;HandlerAdapter
又将ModelAndView
返回给DispatcherServlet
;DispatcherServlet
请求视图解析器View resolver
对视图进行解析;View resolver
根据View
的信息,匹配相应的视图结果并返回;DispatcherServlet
收到View
后,对视图进行渲染,将Model
中的数据填充到视图中的 request 区域,生成最终的视图;不难看出,DispatcherServlet
是整个流程控制的核心,由它调用其他组件处理请求、返回响应,相当于一个转发器或中央处理器,降低了其他组件之间的耦合度。如果不使用 SpringMVC,我们可能需要在web.xml
中为每一个请求都配置一个 Servlet,但是现在就只需要配置一个前端控制器:
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- springMVC 配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</init-param>
<!-- 容器在应用启动时就加载并初始化这个servlet,值越小,优先级越高 -->
<load-on-startup>1</load-on-startup>
<!-- 支持异步处理 -->
<async-supported>true</async-supported>
</servlet>
关于异步处理,详见:Servlet 3.0 新特性详解,张建平,IBM
在处理适配器HandlerAdapter
执行Handler
的过程中,Spring 还做了这些额外工作:
HttpMessageConverter
(消息转换):将请求信息,如 Json、XML 等数据转换成一个对象;处理结束后,将对象转换成指定的响应信息;request.getParameter
取到的参数都是字符串形式,所以需要转换成真正有效的类型,比如String
转换成Integer
、Double
等;BindingResult
或Error
中。整理自:SpringMVC+Mybatis快速开发与项目实战,黄文毅,清华大学出版社
原文:https://www.cnblogs.com/zzzt20/p/12442573.html