springmvc拦截器

1.还是 责任链模式的应用
2.mvc拦截器链 和 mybatis拦截器链比较相似
而filter链和aop拦截器链比较相似

3. mvc拦截器链 和 mybatis拦截器链相似点

	1.都是用 list 来保存拦截器
	2.都是遍历拦截器,执行每一个拦截器,不是栈中栈模式

区别

	1.mvc的拦截器,里面有3个方法
		1.首先调用 每一个拦截器的 pre方法,如果return true,就执行下一个拦截器的pre方法
		
		2.只要执行了,pre方法,就会把 index++,并且把这个拦截器,加入到新的拦截器链中
		
		3.拦截器执行完(前提所有pre都 return true),调用controller执行
		  然后,倒叙 遍历 拦截器链(此时index为最大,就是从最后一个拦截器到第一个拦截器)
		  执行他们的 post方法,执行完,将modelAndView 返回给 disServlet,它调用视图解析器解析
		  
		4.最后去 倒叙 执行 新的拦截器的 aflter方法,也就是说,即使第一个拦截器的
		  pre方法就retrun false,那么新的拦截器链也会有一个拦截器,也就是说after方法必定会执行,只是有几个拦截器可以执行的问题

mvc拦截器执行的流程

	1.因为有了拦截器,所以和没有拦截器的mvc执行流程有点区别
	
	2.mappedHandler 获取到 (handler 和 interceptor)
	
	3.没有拦截器的,就是继续获得 适配器,然后执行handler
	  有拦截器后,会先mappedHandler get拦截器链
	  然后执行拦截器链pre方法,index++,并将执行了的拦截器加入新的拦截器链中
	  如果所有拦截器pre都return true,下一步
	  
	4.获取 适配器,执行 handler方法 return ModelAndView
	
	5.没有拦截器的,到这一步,就将ModelAndView return给 disServlet了
	 有拦截器的,会继续倒叙 执行拦截器链的 post方法(可以把modelAndView传给它 ),执行完,将modelAndView返回给 disServlet 解析执行
	
	6.然后执行新的,拦截器链的 after方法,这一步modelAndView已经解析了,无法获得它了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值