SpringMVC工作原理

 

具体工作流程:
当客户端发出一个请求,首先被DispatcherServlet捕获(若该请求不经过DispatcherServlet,那么直接返回相应资源,非SSM)

DispatcherServlet收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制。判断是否有相应的Handler方法。

如果没有找到相应的解析器Handler,查看是否配置了 <mvc:default-servlethandler/>  ,若配置了它会对DispatcherServlet的请求进行处理,如果该请求已经作了映射,有相应的请求处理方法,那么会接着交给后台对应的处理程序(目标资源),如果没有作映射,就交给 WEB 应用服务器默认的 Servlet 处理(返回404页面,控制台:No mapping found for HTTP request with URI [/xx/xx] in DispatcherServlet),从而找到对应的静态资源,只有再找不到资源时才会报错。

 

若相应的处理请求的 Handler 方法,则调用 HandlerMapping , HandlerMapping 将会把请求映射为HandlerExecutionChain 对象(包含一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象。

然后调用HandlerAdapter,HandlerAdapter 将会把Handler 处理器包装为适配器,从而支持多种类型的处理器

然后向下这里调用调用拦截器的 PreHandle (进行预处理,当preHandle方法返回false时,从当前拦截器往回执行所有拦截器的afterCompletion方法,再退出拦截器链。当preHandle方法全为true时,执行下一个拦截器,直到所有拦截器执行完。)方法对ModelAndView进行操作,处理完成后返回ModelAndView 对象(包含模型数据、逻辑视图名)。

然后执行handle方法,返回ModelAndView

执行postHandle方法:它是进行处理器拦截用的,它的执行时间是在处理器进行处理之后,也就是在Controller的方法调用之后执行,但是它会在DispatcherServlet进行视图的渲染之前执行,也就是说在这个方法中可以对ModelAndView进行操作。(这里判断是否存在异常)如果不存在异常,继续执行。

之后执行 processDispatchResult 方法。如果这里存在异常:进入processHandlerException -> HandlerExceptionResolver 组件解析异常,则返回一个新的 ModelAndView 对象(继续执行下去)。

 

若没有异常,进入render 方法 调用ViewResolver组件解析ModelAndView对象得到实际的View解析视图

 

View会根据传进来的Model模型数据进行渲染

 

最后调用拦截器的 afterCompletion方法清理资源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章