struts2中拦截器与过滤器的区别

本文详细介绍了Struts框架中拦截器的概念、配置方法及自定义拦截器的步骤,包括拦截器接口的使用、init和destroy方法的作用、intercept方法的实现等关键点。同时,对比了拦截器与过滤器的区别,并提供了Struts框架中过滤器的配置方式。通过实例展示了如何在Action中引用自定义拦截器,以及在web.xml中配置过滤器。

struts拦截器拦截只能action ,拦截器需要在struts配置文件进行配置。

拦截器配置文件:


拦截器类实现:


如何自定义一个拦截器?

自定义一个拦截器需要三步:

1自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。

2strutx.xml中注册上一步中定义的拦截器。

3在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。

 

Interceptor接口声明了三个方法:

 

public interface Interceptor extends Serializable {

 

    void destroy();

 

    void init();

 

    String intercept(ActionInvocation invocation) throws Exception;

}

 

Init方法在拦截器类被创建之后,在对Action镜像拦截之前调用,相当于一个post-constructor方法,使用这个方法可以给拦截器类做必要的初始话操作。

 

Destroy方法在拦截器被垃圾回收之前调用,用来回收init方法初始化的资源。

 

Intercept是拦截器的主要拦截方法,如果需要调用后续的Action或者拦截器,只需要在该方法中调用invocation.invoke()方法即可,在该方法调用的前后可以插入Action调用前后拦截器需要做的方法。如果不需要调用后续的方法,则返回一个String类型的对象即可,例如Action.SUCCESS

另外AbstractInterceptor提供了一个简单的Interceptor的实现,这个实现为:

public abstract class AbstractInterceptor implements Interceptor {

 

     public void init() {

    }

   

    public void destroy() {

    }

 

 

    public abstract String intercept(ActionInvocation invocation) throws Exception;

}

在不需要编写initdestroy方法的时候,只需要从AbstractInterceptor继承而来,实现intercept方法即可。即图2拦截器类实现



过滤器需要配置在web.xml中,配置文件如下



servlet过滤器可以对几乎所有请求起作用。

过滤器实现类:

服务启动会依次执行filter的init方法
-intercept的init方法,当有action请求时,intercept拦截进intercept方法,当有访问jsp或servlet..时 进filter的doFilter方法,action走完跳转的页面filter不会拦截

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的天晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值