Structs2过滤器拦截器

拦截器与过滤器的区别

拦截器是基于java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

过滤器属于Servlet,配置在web.xml中,过滤器可以作用于一切页面,控制器等等元素。 拦截器作用域小于过滤器
拦截器只拦截action,拦截器是Struts2的核心功能;拦截器是在struts.xml配置文件中进行配置的,自定义拦截器后,要将Struts2默认拦截器在struts.xml中重新配置。实际上都可以叫拦截器或者过滤器 ,只不过一个拦截web请求,一个拦截Action方法(拦截器拦截前Action已经实例化了)调用。
如果配置多个过滤器或者多个拦截器,那么这些过滤器或者拦截器的执行顺序按照配置时的顺序执行;过滤器和拦截器在xml文件中的配置不一定要在其他元素的前面,可以使任意位置
过滤器和拦截器的生命周期中都有init()和destroy()方法。

执行顺序

过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数 据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥), 再向上返回到过滤器的后续操作。

个人看法

其实对于过滤器和拦截器我个人认为过滤器他的主要功能就是过滤request的那个请求的,所以我觉得是可以用js来取代的,比如说那些前台之类的非空验证什么的,js都可以满足的。而拦截器是对Action层进行,拦截处理的,自己也可以封装一些类方法进行拦截验证。这都是我个人的理解和看法。

实战演习

struts2和servlet的共存
在过滤器中/表示拦截所有的请求,.action表示之过滤.action的请求,也就是说只有.action的请求才是有效的,其他的都不做处理struts2将会截获所有请求,对于servlet请求将不能够正常响应的。因为struts2把servlet当成action了,因为servlet和action都是没有后缀的。
这个时候你就可以通过修改过滤器来使他们共存了。
之前的web.xml中Struts 2的配置

<filter>
        <filter-name>struts2</filter-name>
       <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
   <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
   </filter-mapping>

之后的配置

<filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.action</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.jsp</url-pattern>
   </filter-mapping>
   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/user/*</url-pattern>
   </filter-mapping>

很多人对Structs2的过滤器很疑惑,总觉得是反着的,其实Structs2过滤器默认的是过滤全部请求,servlet的请求被过滤掉所以不能通过了,当你修改了一下过滤规则以后,假如只有一个*.action,那么action层就只能处理那些action后缀的请求了,也就和servlet撇清了关系,就是你搞你的,我搞我的不在过滤servlet的请求了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值