过滤器与拦截器的爱恨情仇

过滤器与拦截器的爱恨情仇

        先说一下吧,希望看到这篇文字的时候,你是后端实习生!我是干了这么多年才发现,过滤器和拦截器有相似之处还有偌大的异处,实在是惭愧惭愧,此时已狠狠睡了一觉泪流一地啊!

        常用的框架Spring+Struts+Hibernate、SpringMVC+MyBatis,当然还有其他的,现在我只说这两个,我也只接触这两个。

        来自Struts2拦截器,英文:interceptor,他真的类似于Filter。拦截器本身是一种AOP面向切面的编程思想,所以这和SpringAOP是同一种编程思想而已,在功能上也就是类似的。基于Struts拦截的需要继承ActionSupport并在struts.xml中配置一下。并且struts2中内置了一些拦截器,当然也可以继承AbstractIntercepter自定义拦截器。

        Spring里也是有拦截器的,网上好多人说SpringAOP模块实现拦截,到也没错,只不过Spring里的拦截分:方法前拦截器(MethodBeforeAdvise接口)、返回后拦截器(AfterReturningAdvise接口)、异常捕获拦截器(ThrowAdvise接口)并且在需要时候,在ApplicationContext.xml里配置即可。

        过滤器,英文:Filter,是Servlet的属性,他是要配置在web.xml中的,通过</filter>,</filter-mapping>,里面还有<url-pattern/> 等等。

       那spring的过滤器呢?不严谨的说spring有过滤器,因为spring整合了servlet,实际上用的还是servlet的过滤器。也就是说,无论SSH或SSM都可以在web.xml里配置<filter>过滤器。常常听到的struts的过滤器,其实也是需要在web.xml中配置的还是使用<filter>实现。

      拦截器和过滤器的最大不同则在于:

      使用范围的不同(Filter只能用于Web程序另者均可)/阻拦规则不同(Servlet规则另者Spring框架支持)/阻止资源不同(Spring管理一切组件可以灵活拦截配置注入,前者不行)/阻止程度不同(前者只能事前,而Intecepter任何时机)

     所以说使用SSH/SSM可以只有这3种方式实行拦截

     1:使用<filter>

  2:使用webwork的interceptor,
  3:将action(controller)交给spring管理,并使用spring的Aop机制

  而在Spring框架等MVC框架支持下,注入异常拦截,验证拦截相关的注解,BaseController,自定义注解,设置切点/面也最终回归到上述3种方法。

  他们的爱恨情仇我知道的就这些,实际上他们的事而可不止这些,欢迎大家爆料~

     

 

 

       

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值