一、SpringMVC 流程图
组件说明:
1、HandlerMapping 里存储是所有请求和处理器之间的关系,HandlerExecutionChain 是来找到某一个请求和处理器之间的关系,还有拦截器,即某一个指定的请求和处理器之间的管理。
2、HandlerAdapter:处理器适配器:来执行 Handler(处理器)中的方法,对处理器执行和调用,还会执行拦截器的方法。
如果没有执行拦截器,会执行默认拦截器,先执行 preHandler,若返回 false,拦截,至此结束;返回 true,继续向下执行。
3、HandlerExceptionResolver 异常处理器:如果对该异常能够进行处理,就进行处理;若不能进行处理,按默认的处理
4、无论成功与否,拦截器的 AfterCompletion 都会执行。
工作流程描述:
1、所有请求,前端控制器( DispatcherServlet) 收到请求,调用 doDispatch 进行处理;
2、根据 HandlerMapping 中保存的请求映射信息找到,处理当前请求的,处理器执行链(HandlerExecutorChain)包含拦截器,处理器;
3、根据当前处理器找到他的 HandlerAdapter(适配器);
4、拦截器的 preHandler 先执行;
5、适配器执行目标方法,并返回 ModelAndView
(1)ModelAttribute 注解标注的方法提前运行;
(2)执行目标方法的时候(确定目标方法用的参数)
[1] 有注解
[2] 无注解
a、看是否Model、Map,以及其他的
b、如果是自定义类型
① 从隐含模型中看有没有,如果有就从隐含模型中拿;
② 如果没有,再看是否有 SessionAttribute标注的属性,如果是从 session 中拿,如果拿不到会抛出异常;
③ 都不是,就利用反射创建对象;
6、拦截器的 postHandler 执行;
7、处理结果(页面渲染)
(1)如果有异常使用异常解析器处理异常,处理完后还会返回 ModelAndView;
(2)调用 render 进行页面渲染
① 视图解析器根据视图名得到视图对象;
② 视图对象调用 render 方法;
(3) 执行拦截器的 afterCompletion
二、SpringMVC 工作流程描述
SpringMVC运行流程图:
a、如果没有配置,则控制台报映射查找不到,客户端展示 404 错误;
b、如果有配置,查看默认的 Servlet 是否能处理:
① 默认 Servlet 能处理:则执行目标资源(一般为静态资源,如:JS、CSS、HTML);
② 默认 Servlet 不能处理:匹配不到资源,报 404 错误;