SpringMVC运行流程:
首先我们点击页面的链接 发送请求经过 springDispatcherServlet
SpringDispatcherServlet会判断springMvc 中是否有其对应的映射,如果没有
则 看是否配置了 如果配置了 说明请求是静态的资源文件 ,则直接找到目标资源文件响应。
如果 SpringDispatcherServlet发现springMvc 中有其对应的映射,则 由
这个HandlerExecutionChain 包含两部分内容 目标处理的handler 和 一些拦截器
获取完 mappedHandler 再获取
也就是 对应的handler适配器 通俗点说 就是 真正干活的handler
然后去调用拦截器的PreHandle 方法
这个里面相当于 我调用了 所有拦截器的preHandle 方法
preHandle 方法调用完之后 , 调用目标的hanle方法 得到ModelAndView 对象
上传图片好不方便 接下来 详细描述 可以跟面试官聊的:
点击链接,请求首先会到我们在web.xml 中配置的 DispatcherServlet 中,在dispatcherServlet 中我们首先会查看springMvc配置文件中有没有对应资源的映射,如果没有 ,则看springmvc配置文件中有没有配置如果配置了,则直接响应请求(这是对于一些静态的资源文件来说的)
当然如果springmvc配置文件中有对应的资源映射文件,则在dispatcherServlet的doDispatcher()方法中 通过handlerMapping 获取handlerExecutionChain(mappedHandler) 接着通过得到的mappedHandler 得到我们的HandlerAdapter(ha),然后去执行handlerExcetionChain中拦截器集合的preHandle()方法。当执行完所有的preHandle方法后,接下来执行获取的HandlerAdapter(ha)的handle()方法(也就是我们的目标方法)。执行完目标方法(handler)返回modelAndView对象(mv),接着根据返回的mv 对象 执行handlerExecutionChain中的拦截器集合的postHandle()方法。在postHandle()判断有没有发生异常,如果有异常,则重新得到异常对应的modelAndView 对象exMv
否则 调用render(mv,request,response)正常渲染页面,渲染完页面完成请求响应 最后在执行集合拦截器中的afterCompletion()方法.
然后就欧了!