拦截器开发步骤(struts2)

strutrs2

拦截器:

定义:提前对请求和响应进行处理,旨在把action冗余的代码惊醒提取

1、 使用拦截器的注意事项:

a)        拦截器的拦截顺序与使用有关

b)        拦截器只对本包有效,如果其他包想使用拦截器,需要进行包继承

c)        拦截器不仅可以拦截请求还可以拦截响应

d)        拦截器中的返回值,可以对请求的终止而做跳转(改变请求轨迹)

开发步骤:

2.写拦截器类

package com.zgw.souji.interceptor;

importcom.opensymphony.xwork2.ActionInvocation;

importcom.opensymphony.xwork2.interceptor.Interceptor;

import com.opensymphony.xwork2.util.ValueStack;

public class MyInterceptor implementsInterceptor {

         /**

          * 服务器关闭,销毁拦截器

          */

         @Override

         publicvoid destroy() {}

         /**

          * 服务器关闭,开启拦截器

          */

         @Override

         publicvoid init() {}

         /**

          * 对action请求提前处理,提取action中冗余代码

          *

          */

         @Override

         publicString intercept(ActionInvocation at) throws Exception {

                   //获取值栈,用于管理数据

                   ValueStackstack = at.getStack();

                   //at.invoke();对action处理后向后传递,你不调用此方法,请求终止

                   System.out.println("我要拦截action");

                   at.invoke();

                   //跳转的jsp,和返回值excute()方法的返回值相同,通过返回值到配置文件

                   returnnull;

         }

}

3.写配置(拦截器,拦截器栈,默认栈)

<!-- 配置拦截器 -->

         <packagename="lanjieqipackage" extends="struts-default"

                   namespace="/lanjieqipackage">

                   <interceptors>

                            <!--注册的拦截器 -->

                            <interceptorname="lanjieqi" class="com.zgw.souji.interceptor.MyInterceptor"/>

<!-- 封装的拦截器栈 :把多次使用的多个拦截器封装为一个栈,直接使用拦截器栈,就可以享受多个拦截器的效果-->

                            <interceptor-stackname="fengzhuanglanjieqi">

                   <!--引入struts默认栈 :如果自己定义了默认栈,系统的拦截器就会失效 -->

                                     <interceptor-refname="defaultStack"/>

                                     <interceptor-refname="lanjieqi"/>

                            </interceptor-stack>

                   </interceptors>

                   <!--默认栈:对当前包下所有action都具有拦截的作用-->

                   <default-interceptor-refname="fengzhuanglanjieqi"/>

                   <actionname="myaction_*" class="com.zgw.souji.action.MyAction" method="{1}">

                            <resultname="shouye">/index.jsp</result>

                   </action>

         </package>

4. 方法拦截器:从粒度角度,针对一个Action的某些方法进行拦截

开发步骤 :

写拦截器类:class MyMethodIn extends MethodFilterInterceptor

package com.zgw.souji.interceptor;

importcom.opensymphony.xwork2.ActionInvocation;

importcom.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

/**

 * 方法拦截器

 * @author Mr fage

 * 2018-2-25下午4:03:48

 *

 */

public class MyInterceptor1 extendsMethodFilterInterceptor {

         @Override

         protectedString doIntercept(ActionInvocation at) throws Exception {

                   at.invoke();      //请求向后继续传递

                   returnnull;

         }

}

配置:

<!--方法拦截器 :针对action中某些方法进行拦截-->

                   <interceptorname="methodlanjieqi" class="com.zgw.souji.interceptor.MyInterceptor1">

                            <!--需要拦截的方法名  -->

                            <paramname="includeMethods">m1,m2</param>

                            <paramname="excludeMethods">m3,m4</param>

                   </interceptor>

                   <!--拦截器栈  -->

                   <interceptor-stackname="myStack">

                   <interceptor-refname="defaultStack"></interceptor-ref>

                   <interceptor-refname="methodlanjieqi"/>

                   </interceptor-stack>

                   </interceptors>

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值