zoukankan      html  css  js  c++  java
  • 初学Struts2-自定义拦截器及其配置

    自定义拦截器,首先新建一个继承自AbstractInterceptor类的类,然后重写intercept方法,代码如下

    public class HelloInterceptor extends AbstractInterceptor {
    
        @Override
        public String intercept(ActionInvocation invocation) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("拦截器测试");
            // 放行到下一个
            return invocation.invoke();
        }
    
    }

    一、自定义拦截器,只作用于当前Action类

    新建structs-interceptor.xml文件,然后进行相关配置,使用时要记得包含到structs.xml文件中;自定义的拦截器注册在包内(即package节点下),配置在action节点下,代码如下(记得配置structs提供的默认拦截器)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package
            name="interceptor"
            namespace="/interceptor"
            extends="struts-default">
            <!-- 注册拦截器 -->
            <interceptors>
                <!-- name:拦截器名称;class:拦截器完整类名 -->
                <interceptor
                    name="hello"
                    class="cn.hjp.interceptor.HelloInterceptor"></interceptor>
            </interceptors>
            <action
                name="HelloAction"
                class="cn.hjp.interceptor.HelloAction">
                <result
                    name="success"
                    type="dispatcher">/index.jsp</result>
                <!-- 拦截器拦截 ,自定义拦截器一般放在最前面 -->
                <interceptor-ref name="hello"></interceptor-ref>
                <!-- 如果自己配置了拦截器,不配置下面的拦截器,则struts默认的18个拦截器不在执行 -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </action>
        </package>
    </struts>

    二、自定义拦截器,作用于该包下所有Action类

     自定义拦截器,注册和配置都在package节点下,自定义的拦截器配置在拦截器栈中,最后还要重新配置structs的默认拦截器,这样,访问该包的action时就会走新配置的默认拦截器,代码如下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package
            name="interceptor"
            namespace="/interceptor"
            extends="struts-default">
            <interceptors>
                <!-- name:拦截器名称;class:拦截器完整类名 -->
                <interceptor
                    name="hello"
                    class="cn.hjp.interceptor.HelloInterceptor"></interceptor>
                <!-- 拦截器栈 -->
                <interceptor-stack name="myDefaultStack">
                    <!-- 拦截器拦截 ,自定义拦截器一般放在最前面 -->
                    <interceptor-ref name="hello"></interceptor-ref>
                    <!-- 如果自己配置了拦截器,不配置下面的拦截器,则struts默认的18个拦截器不在执行 -->
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                </interceptor-stack>
            </interceptors>
            <!-- 将自己的拦截器栈myDefaultStack设为该包下默认拦截器栈,如此,该包下的action都会执行默认拦截器栈中的拦截器 -->
            <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
            <action name="HelloAction"  class="cn.hjp.interceptor.HelloAction">
                <result name="success" type="dispatcher">/index.jsp</result>
            </action>
        </package>
    </struts>

    三、自定义拦截器,实现允许在其他包下也可以有效

    如果想让其他包下的action使用别的包下的拦截器,那么就让新的配置文件继承自其他包

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package
            name="interceptor2"
            namespace="/interceptor"
            extends="interceptor">
            <action name="TestInter"  class="cn.hjp.test.TestInter">
                <result name="success" type="dispatcher">/index.jsp</result>
            </action>
        </package>
    </struts>

    注意:由dtd文件决定了structs配置文件书写规则,所以拦截器和action的配置是有顺序的

    四、自定义指定方法的拦截器

    新建一个继承自MethodFilterInterceptor的类,并实现doIntercept方法,代码如下

    public class MyMethodInterceptor extends MethodFilterInterceptor {
    
        @Override
        protected String doIntercept(ActionInvocation invocation) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("方法拦截器");
            return invocation.invoke();
        }
    
    }

    新建一个进行测试的Action类,代码如下

    public class HelloAction2 extends ActionSupport {
    
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            return SUCCESS;
        }
        
        public void add(){
            System.out.println("方法拦截器---add方法");
        }
        
        public void find(){
            System.out.println("方法拦截器---find方法");
        }
    
        public void delete(){
            System.out.println("方法拦截器---delete方法");
        }
    }

    新建struts-methodInterceptor.xml文件,进行相关配置,最后记得include到struts.xml文件中,配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package
            name="methodInterceptor"
            namespace="/methodInterceptor"
            extends="struts-default">
            <interceptors>
                <interceptor
                    name="MyMethodInterceptor"
                    class="cn.hjp.interceptor.MyMethodInterceptor"></interceptor>
                <interceptor-stack name="myDefaultStack">
                    <interceptor-ref name="MyMethodInterceptor">
                        <!--excludeMethods指定不进行过滤的方法,includeMethods指定过滤的方法 -->
                        <!-- 如果只有excludeMethods,其他默认进行过滤,如果只有 includeMethods,其他默认不过滤,两个都有,其他默认不过滤-->
                        <param name="excludeMethods">find</param><!-- 如果多个方法,用英文逗号分隔 -->
                        <param name="includeMethods">add</param>
                    </interceptor-ref>
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                </interceptor-stack>
            </interceptors>
            <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
            <action
                name="HelloAction2"
                class="cn.hjp.interceptor.HelloAction2">
                <result
                    name="success"
                    type="dispatcher">/index.jsp</result>
            </action>
        </package>
    </struts>
  • 相关阅读:
    python 基础 7.1 datetime 获得时间
    Python 学习笔记12
    Python 学习笔记11
    Python 学习笔记10
    Python 学习笔记9
    Python 学习笔记8
    Python 学习笔记7
    Python 学习笔记6
    Python 学习笔记5
    Python 学习笔记4
  • 原文地址:https://www.cnblogs.com/hujiapeng/p/4686921.html
Copyright © 2011-2022 走看看