SpringMVC常用组件
DispatcherServlet:前端控制器,不需要工程师开发,由框架提供
- 作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求
HandlerMapping:处理器映射器,不需要工程师开发,由框架提供
- 作用:根据请求的url、method等信息查找Handler,即控制器方法
Handler:处理器,需要工程师开发
- 作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理
HandlerAdapter:处理器适配器,不需要工程师开发,由框架提供
- 作用:通过HandlerAdapter对处理器(控制器方法)进行执行
ViewResolver:视图解析器,不需要工程师开发,由框架提供
- 作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、RedirectView
View:视图
- 作用:将模型数据通过页面展示给用户
SpringMVC执行流程
1. 浏览器发送请求,被SpringMVC 前端控制器 DispatcherServlet 进行处理
DispatcherServlet 对请求的 URL(网页地址) 解析为请求标识符 URI(服务器资源路径)
2. URI 映射,判断是否存在请求URI对应的映射
不存在,则是静态资源,交给 mvc:default-servlet-hanler,如果没有配置默认Servlet,则404,如果配置了默认的Servlet,则由默认的Servlet处理静态资源,返回页面 -- 结束。
存在URI 映射 == 存在逻辑视图对应的控制器方法,则执行 3.
3. HandlerMapping 匹配控制器方法 - Hanlder
根据 URI,调用 HandlerMapping匹配到控制器方法,获取 Handler配置的所有相关对象
4. DispatcherServlet 选择合适的 HandlerAdapter
DispatcherServlet 根据获取的 Handler,选择合适的 HandlerAdapter调用控制器方法
5. 执行拦截器的 preHandler方法
在HandlerAdapter调用控制器方法前,按配置拦截器的顺序正向执行拦截器的 preHandler方法
6.HandlerAdapter调用控制器方法
控制器方法执行
7.执行拦截器的 postHandler方法
控制器方法执行后,按配置拦截器的逆序反向执行拦截器的 postHandler方法
8. DispatcherServlet 接收 ModelAndView对象,解析和渲染视图
Handler 执行完成后,向DispatcherServlet 返回 ModelAndView对象,DispatcerServlet 根据该对象选择合适的 ViewResolver 进行视图解析,根据Model和View,来渲染视图
9.执行拦截器的 afterCompletion方法
渲染视图完毕后,按配置拦截器的逆序反向执行拦截器的 afterCompletion方法
10. 将渲染结果返回给客户端
DispatcherServlet初始化过程
DispatcherServlet 本质上是一个 Servlet,所以天然的遵循 Servlet 的生命周期。所以宏观上是 Servlet 生命周期来进行调度。