Struts拦截器

Struts拦截器

struts.xml配置文件中注册:

<interceptor name="interceptorName" class="interceptorClass" />

或者

<interceptor name="interceptorName" class="interceprotClass">

        <param name="paramName">paramValue</param>

</interceptor>

拦截器栈:

<interceptors>

        <interceptor name="interceptor1" class="interceptorClass" />

        <interceptor name="interceptor2" class="interceprotClass" />

        <interceptor-stack name="myStack">

            <interceptor-ref name="interceptor1" />

            <interceptor-ref name="interceptor2" />

        </interceptor-stack>

</interceptors>

配置默认拦截器(每个包下只能定义一个默认拦截器):

<default-interceptor-ref name="myStack" />

 

只要自定义包继承了struts-default默认包,就会继承其内置的各个拦截器和其默认的拦截器栈。struts-dafault包的默认拦截器栈会作用于所有的这些Action。

 

使用拦截器时,需要在Action中进行配置,通过<interceptor-ref>标签类指定在Action中使用的拦截器。

<action name="login" class="com.chen.action.LoginAction">

        <result name="input">/login.jsp</result>

        <interceptor-ref name="interceptor1" />

        <interceptor-ref name="interceptor2">

            <param name="paramName">paramValue</param>

        </interceptor-ref>

</action>

Struts2的默认拦截器

alias拦截器

该拦截器的作用是给参数起一个别名,实现Action之间的传值。

在struts.xml文件中的<action>标签下,添加以下标签:

<param name="aliases">#{'name1':'value1','name2':'value2'}</param>

在调用包含上面代码的Action时,Struts2框架会将Action莲中当前Action的前一个Action的name1和name2属性取出,赋给当前Action的value1和value2属性,这样就完成了Action之间的传值。

注释:从一个Action调到另一个Action,可以通过设置result元素的type属性来实现。有两种方法:第一种是将type设置为chain结果类型;第二种是将types属性设置为redirectAction类型。

prepare拦截器

该拦截器用来调用实现了Preparable接口的Action的prepare()方法。

如果一个Action实现了Preparable接口,则prepare拦截器会在执行execute()方法之前先执行prepare()方法。

         由于Action所在的包基本上都继承了struts-default包,因此也会继承其默认拦截器栈defaultStack,而在defaultStack中配置了prepare拦截器,所以prepare拦截器不需要在struts.xml文件中配置,就会被正确的调用。

timer拦截器

timer拦截器的功能是输出调用Action所需要的时间,它记录了execute方法和在timer后面定义的其他拦截器的intercept方法的执行时间之和,其时间单位为毫秒。

<action name="login" class="com.chen.action.LoginAction">

        <interceptor-ref name="timer" />

        <result name="input">/login.jsp</result>

</action>

 

自定义拦截器

         Struts2拦截器在访问某个Action 方法之前或之后实施拦截。

Struts2 拦截器是可插拔的, 拦截器是 AOP 的一种实现。

编写自定义拦截器

         自定义拦截器有两种定义方法,一种是要实现com.opensymphony.xwork2.interceptor.Interceptor接口;另一种是继承AbstractInterceptor类来定义拦截器。

(1)实现Interceptor接口定义拦截器:

publicclass PermissionInterceptor implements Interceptor {

    privatefinalstaticlongserialVersionUID=1L;

    @Override

    publicvoid destroy() {

    }

    @Override

    publicvoid init() {

    }

    @Override

    public String intercept(ActionInvocation invocation) throws Exception {

        String result=null;

        //提取session[username]

        Object username=ActionContext.getContext().getSession().get("username");

        //验证是否登录(若登录会存在session

        if(username!=null&&!username.equals("")){

             result=invocation.invoke();

        }else{

            result="login";

        }

        System.out.println(result);

        returnresult;

    }

}

(2)继承AbstractInterceptor类定义拦截器

publicclass MyInterceptor extends AbstractInterceptor {

    @Override

    public String intercept(ActionInvocation invocation) throws Exception {

       

        //调用下一个拦截器

        String result=invocation.invoke();

        returnresult;

    }

}

 

配置自定义拦截器

在struts.xml文件中的<package>标签下:

<interceptors>

        <interceptor name="mylogin" class="com.chen.interceptor.PermissionInterceptor"></interceptor>

</interceptors>

 

方法过滤拦截器

继承MethodFilterInterceptor类的子类能够有选择的拦截Action中的某个指定方法。

继承MethodFilterInterceptor类的子类必须实现doIntercept()方法,用来实现真正的拦截逻辑。

编写方法过滤拦截器:

publicclass MyMethodFilterInterceptor extends MethodFilterInterceptor {

    @Override

    protected String doIntercept(ActionInvocation invocation) throws Exception {

        String result=invocation.invoke();

        returnresult;

    }

}

在struts.xml中配置方法过滤拦截器

<interceptors>

        <interceptor name="FilterInterceptor" class="com.chen.interceptor.MyMethodFilterInterceptor" />

</interceptors>

    <action name="filterAction" class="com.chen.action.FilterAction">

        <result name="success">/success.jsp</result>

        <interceptor-ref name="FilterInterceptor">

            <!-- 指定拦截方法 -->

            <param name="includeMethods">execute,method1</param>

            <!-- 指定不拦截方法 -->

            <param name="excludeMethods">method2</param>

        </interceptor-ref>

    </action>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值