SpringMVC工作原理详解

流程图:

具体工作流程:
1.客户端发送请求。

2.DispatcherServlet捕获请求,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制。(这里判断是否有相应的解析器)。

3.如果没有找到相应的解析器,判断是否配置<mvc:default-servlethandler/>它会对DispatcherServlet的请求进行处理,如果该请求已经作了映射,那么会接着交给后台对应的处理程序(目标资源),如果没有作映射,就交给 WEB 应用服务器默认的 Servlet 处理(返回404页面),从而找到对应的静态资源,只有再找不到资源时才会报错。

4.如果找到相应的解析器,则调用HandlerMapping, HandlerMapping 将会把请求映射为HandlerExecutionChain 对象(包含一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器)对象,通过这种策略模式,很容易添加新的映射策略。

5.然后调用HandlerAdapter,HandlerAdapter 将会把Handler 处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器。

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

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

8.如果这里存在异常:HandlerExceptionResolver 组件解析异常,则返回一个新的 ModelAndView 对象(继续执行下去)。

9.执行ViewResolver ,它将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术。

10.接下View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术,并相应客户端。

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

 

这里需要注意一点:

postHandle方法只会在当前这个Interceptor的preHandle方法返回值为true的时候才会执行。

afterCompletion方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值