Struts2 拦截器的使用及配置

Struts2 的拦截器

拦截器 :可以在Action,resul被执行之前或之后进行一系列的处理。比如当我们在淘宝买东西时,如果你刚开始没有登录,点击添加购物车或购买会跳转到登录界面。

Part One


拦截器的使用方法 。

1.定义一个 类 (如本文中的MyIntercepter )使其实现Intercepter的接口。重写它的抽象方法。
在intercept()方法中,你可以编写自己将要完成的功能代码。

2.在struts.xml配置拦截器:

<interceptors>
            <interceptor name="拦截器的名字" class="拦截器对应的JAVA类型"/>
        </interceptors>

3.在Action的配置中,使用拦截器<interceptor-ref name=”拦截器的名字”>。

简单的Interceptor例子:

package com.inter;
//注意interceptor的导入 是xwork2里的
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class MyIntercepter implements Interceptor{

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void init() {
        // TODO Auto-generated method stub

    }

    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        System.out.println("MyIntercepter.....");
        return null;
    }

}
package com.inter;

public class MyAction { 


    public void test() {
        System.out.println("This is MyAction......");
    }

}
<package name="interceptor" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="inter1" class="com.inter.MyIntercepter"></interceptor>

        </interceptors>

        <action name="my" class="com.inter.MyAction" method="test">
            <interceptor-ref name="inter1"></interceptor-ref>
        </action>

    </package>

执行结果:

这里写图片描述

这里写图片描述

由执行结果可看出 ,MyAction已经被拦截。

在前文中 拦截器类除了实现Intercepter接口外,还可以通过继承 AbstractInterceptor类

public class MyIntercepter2 extends AbstractInterceptor{

    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        // TODO Auto-generated method stub
        System.out.println("MyIntercepter2...");
        return null;
    }
}

Part Two


拦截器栈的配置:(myStack)

<interceptors>
            <interceptor name="inter1" class="com.inter.MyIntercepter"/>
                <interceptor name="inter2" class="com.inter.MyIntercepter2"/>
                <!-- 定义myStack拦截器栈 -->
            <interceptor-stack name="myStack">
                <interceptor-ref name="inter1"></interceptor-ref>
                <interceptor-ref name="inter2"></interceptor-ref>
            </interceptor-stack>

        </interceptors>

在Action中引用myStack拦截器栈

<action name="my" class="com.inter.MyAction" method="test">
            <interceptor-ref name="myStack"></interceptor-ref>
        </action>

测试结果为:
这里写图片描述
被 inter1拦截后 inter2不被执行 。

在 MyIntercepter程序中加入下面的语句:

这里写图片描述

运行结果:

这里写图片描述

Part Three


我们可以定义一个只拦截某个特定方法的拦截器:

如:

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class MyIntercepter4 extends MethodFilterInterceptor{


    @Override
    protected String doIntercept(ActionInvocation arg0) throws Exception {

        System.out.println("必须检查.........");
        arg0.invoke();
        return null;
    }


}

Struts.xml配置如下:

 <interceptor name="my3" class="com.myinter.MyIntercepter4">
                <param name="excludeMethods">sel</param>
                <param name="includeMethods">add</param>
             </interceptor>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值