Bootstrap

Spring MVC 处理响应的整个流程

当用户接受到请求后,控制器并不会处理用户请求,只是对用户的请求参数进行解析处理,然后调用业务逻辑方法处理用户请求,当处理请求完成后,控制器将处理结果通过JSP页面呈现给用户。

在web.xml 文件中定义前端控制器DispatcherServlet来拦截用户请求;

<!-- 前端控制器 -->
	<servlet>
		<servlet-name>SpringMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:application.xml</param-value>
		</init-param>
		<!-- 设置该Servlet的加载顺序 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

控制器实际有两部分共同组成,即拦截用户请求 和 处理请求 的通用代码都由前端控制器完成,而实际的业务控制,则由Controller 处理。

DispatcherServlet 执行流程:

Servlet容器将http请求封装为HttpServletRequest和HttpServletReponse
1.用户发起请求,请求被Spring前端总控制器 DispatcherServlet 处理

  1. DispatcherServlet 对请求URL进行解析,根据解析后的URL调用HandlerMapping 获取Handler配置的所有相关对象。
  2. HandlerMapping类根据request请求的URL等信息查找能够进行处理的Handler,以及相关拦截器interceptor并构造HandlerExecutionChain。
  3. HandlerMapping类将构造的HandlerExecutionChain类的对象返回给前端控制器DispatcherServlet类。
  4. 前端控制器拿着上一步的Handler遍历所有配置的HandlerAdapter类请求执行Handler。
  5. HandlerAdapter类执行相关Handler(Controller)并获取ModelAndView类的对象。
  6. HandlerAdapter类将上一步Handler执行结果的ModelAndView 类的对象返回给前端控制器。
  7. DispatcherServlet类遍历所有配置的ViewResolver类请求进行视图解析。
  8. ViewResolver类进行视图解析并获取View对象。
  9. ViewResolver类向前端控制器返回上一步骤的View对象。
  10. DispatcherServlet类进行视图View的渲染,填充Model。
  11. DispatcherServlet类向用户返回响应。
;