当用户接受到请求后,控制器并不会处理用户请求,只是对用户的请求参数进行解析处理,然后调用业务逻辑方法处理用户请求,当处理请求完成后,控制器将处理结果通过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 处理
- DispatcherServlet 对请求URL进行解析,根据解析后的URL调用HandlerMapping 获取Handler配置的所有相关对象。
- HandlerMapping类根据request请求的URL等信息查找能够进行处理的Handler,以及相关拦截器interceptor并构造HandlerExecutionChain。
- HandlerMapping类将构造的HandlerExecutionChain类的对象返回给前端控制器DispatcherServlet类。
- 前端控制器拿着上一步的Handler遍历所有配置的HandlerAdapter类请求执行Handler。
- HandlerAdapter类执行相关Handler(Controller)并获取ModelAndView类的对象。
- HandlerAdapter类将上一步Handler执行结果的ModelAndView 类的对象返回给前端控制器。
- DispatcherServlet类遍历所有配置的ViewResolver类请求进行视图解析。
- ViewResolver类进行视图解析并获取View对象。
- ViewResolver类向前端控制器返回上一步骤的View对象。
- DispatcherServlet类进行视图View的渲染,填充Model。
- DispatcherServlet类向用户返回响应。