1.常用组件
- DispatcherServlet:前端控制器
能够处理请求并响应 - HandlerMapping:处理器映射器
能够根据url定位到handler - HandlerAdapter:处理器适配器
能够具体对handler执行 - handler:处理器
在前端控制器的控制下 处理器对具体的请求进行响应 - ViewResolver:视图解析器
对视图解析,得到相应的视图相对地址 - View:视图
具体的页面
2. DispatcherServlet的初始化过程
- 创建 webApplicationContext(web的IOC容器)
- 初始化IOC容器
- 初始化处理器映射器
- 初始化处理器适配器
- 初始化视图解析器
3.DispatcherServlet的处理请求过程
- service()中调用了processRequest(request,response)的方法
- 最终调用了doDispatch(request,response)方法
- HandlerMapping匹配浏览器发送的请求的handler
- HandlerAdapter创建调用handler方法的处理器适配器
- 调用拦截器的prehandle
- 处理器适配器调用具体的控制器方法,封装结果为一个ModelAndView对象
- 调用拦截器的posthandle
- 调用processdispatchresult()
- processdispatchresult(request,response,ModelAndView)
- 利用ModelAndView来处理模型和渲染视图
- 调用拦截器的afterCompletion方法
4.SpringMVC的执行流程
- 用户发送请求,被前端控制器DispatcherServlet捕获
- 对URL(浏览器地址)进行解析,得到URI(服务器具体地址),判断请求URI对应的映射
- 不存在
- 判断是否配置了默认servlet,配置了则访问静态资源
- 没配置,则404
- 不存在
- 存在
- 根据URI调用HandlerMapping获得该Handler配置的相关对象
- 根据Handler选择合适的HandlerAdapter
- 成功获得HandlerAdapter则开始执行拦截器的prehandle(正向)
- 提取Request中的模型数据,填充handler形参,执行Handler
- 请求参数格式转换(表单转换为对象)
- 请求消息数据转换(String转换为Integer)
- Handler执行完成后向DispatcherServlet返回一个ModelAndView对象
- 执行拦截器的postHandle方法(逆向)
- 根据ModelAndView来选择合适的ViewResolver进行解析并渲染视图(会判断是否存在异常,有异常则有异常处理器处理)
- 渲染视图完成后执行拦截器的afterCompletion方法(逆向)
- 渲染结果返回客户端