Struts2的拦截器的使用详解

Struts2的拦截器:
    一,拦截器的使用:
        新建一个MyInterceptor拦截器类,实现com.opensymphony.xwork2.ActionInvocation接口中。
        public class MyInterceptor implements Interceptor {
            /**
             * 由xml中可以提定Action中的参数值
             */
            private String myparam;
       
            public String getMyparam() {
                return myparam;
            }
       
            public void setMyparam(String myparam) {
                this.myparam = myparam;
            }
       
            public void destroy() {
                System.out.println("服务器关闭执行销毁操作!");
            }
       
            public void init() {
                System.out.println("服务器启动时执行初始化操作!");
            }
       
            public String intercept(ActionInvocation invocation) throws Exception {
       
                System.out.println(myparam);
                /**
                 * 执行之前的操作
                 */
                String result = invocation.invoke();
                /**
                 * 执行之后操作
                 */
                return result;
            }
        }
    二,在strust.xml中配置拦截器
    `    <struts>
            <package name="mengya" extends="struts-default">
       
                <!-- 拦截器在struts2中的配置 -->
                <interceptors>
                    <interceptor name="myInterceptor"
                        class="com.mengya.interceptor.MyInterceptor">
                        <!-- param可以没有,向拦截器中的属性赋值 -->
                        <param name="myparam">mengya</param>
                    </interceptor>
                   
                    <!-- 配置自己的拦截器栈 -->
                    <interceptor-stack name="myStack">
                        <interceptor-ref name="myInterceptor"></interceptor-ref>
                        <interceptor-ref name="defaultStack"></interceptor-ref>
                    </interceptor-stack>
       
                </interceptors>
                <!--
                    为该package指定一个默认的拦截器栈,这样就可以不用为每个action指定一拦截器栈
                -->
                <default-interceptor-ref name="myStack"></default-interceptor-ref>
       
                <!--
                    郑重说明
                    当某个action中引用了某了interceptor之后就替换了原用的一个默认interceptor
                    即defaultStack,页defaultStack包含了很多完成sturs2一些基本功能的拦截器。
                    故当某个action中引用了某了interceptor之后还要引用defaultStack这个拦截器栈。
                -->
       
                <action name="login" class="com.mengya.action.LoginAction">
                    <result name="success">/show.jsp</result>
                    <result name="input">/index.jsp</result>
                    <!--
                        <interceptor-ref name="myInterceptor"></interceptor-ref>
                        <interceptor-ref name="defaultStack"></interceptor-ref>
                    -->
                    <!--
                        也可以在action中引用自己的拦截器栈
                    -->
                    <!--
                        <interceptor-ref name="myStack"></interceptor-ref>
                    -->
                </action>
       
            </package>
        </struts>
   
    三,对于Struts2中拦截器栈里的拦载器执行的顺序:
        Struts2中的拦截器中的拦截器最上面的最先执行,即进入拦截器的顺序是按照拦截栈中配置的顺序,出拦截器
        是先配置的后执行,即与进入拦载器的顺序相反。
   
    四,Struts2的拦截器除了实现ActionInvocation接口外还可以继承com.opensymphony.xwork2.interceptor.AbstractInterceptor
        AbstractInterceptor抽象器实现了ActionInvocation接口,空实现了init和destroy方法。因此继承了AbstractInterceptor类我们只需重写它的intercept即可。
       
    五,    Struts2的方法过滤拦截器:
        1,继承com.opensymphony.xwork2.interceptor.MethodFilterInterceptor类重写doIntercept方法
        2,方法过滤拦截器的配置:
            <interceptors>
                <!-- 声明方法过滤拦截器 -->
                <interceptor name="myMethodFilterInterceptor" class="com.mengya.interceptor.MyMethodFilterInterceptor"></interceptor>
            </interceptors>
            <!-- 在action配置方法过滤拦截器 -->
            <action name="login" class="com.mengya.action.LoginAction">
                <result name="success">/show.jsp</result>
                <result name="input">/index.jsp</result>
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <interceptor-ref name="myMethodFilterInterceptor">
                    <!-- 不拦截的方法,即,号隔开 -->
                    <param name="excludeMethods">execute,test</param>
                    <!-- 要拦截的方法,即,号隔开 -->
                    <param name="includeMethods">execute</param>
                </interceptor-ref>
            </action>
        3,说明:若某个方法同时出现在excludeMethods(不拦截的方法)和includeMethods(要拦截的方法)当中时
            那么这个方法会被拦截。除它情况下excludeMethods里面的方法不拦截,includeMethods里面的方法会被拦截。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值