• Struts2-整理笔记(五)拦截器、拦截器配置


    拦截器(Interceptor)

     拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制。

    拦截器的优点

    1. 简化了Action的实现。拦截器能把很多功能从Action中独立出来,大量减少了Action的代码
    2. 功能更单一。按照上面的描述,把功能从Action中分离出来,分散到不同的拦截器中,这样每个拦截器的功能,以及Action本身的功能就更单一了。
    3. 通用代码模块化。从Action中把功能分离出来,放到拦截器中去实现,这样能把一些在多个Action中通用的代码进行模块化,封装在一个或者几个拦截器中。
    4. 提高重用性。当通用的功能代码被封装在拦截器中,实现了代码模块化过程之后,就可以对不同的Action,根据功能需要,来配置相同的拦截器了。
    5. 实现AOP。
    6. 拦截器相比Filter具有更强大的功能,比如拦截器与Servlet的API无关,比如拦截器可以访问到值栈等。

    拦截器创建(三种方式)

    1. 第一种创建方式
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.Interceptor;
    
    //拦截器:第一种创建方式
    //拦截器生命周期:随项目的启动而创建,随项目关闭而销毁
    public class MyInterceptor implements Interceptor {
        @Override
        //初始化方法
        public void init() {
            
        }
    
        @Override
        //拦截方法
        public String intercept(ActionInvocation arg0) throws Exception {
            return null;
        }
    
        @Override
        //销毁方法
        public void destroy() {
            
        }
    }

      2.第二种创建方式

    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    //创建方式2: 继承AbstractInterceptor -> struts2的体贴
    //帮我们空实现了init 和 destory方法. 我们如果不需要实现这两个方法,就可以只实现intercept方法
    public class MyInterceptor2 extends AbstractInterceptor {
    
        @Override
        public String intercept(ActionInvocation arg0) throws Exception {
            
            return null;
        }
    
    }

      3.第三种创建方式(优秀)因为可以自己定制那个方法要(不要)拦截

    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
    
    //继承:MethodFilterInterceptor 方法过滤拦截器
    //功能: 定制拦截器拦截的方法.
    //    定制哪些方法需要拦截 判断的代码已经封装在interceptor中
    //    定制哪些方法不需要拦截
    public class MyInterceptor3 extends MethodFilterInterceptor{
    
        @Override
        protected String doIntercept(ActionInvocation invocation) throws Exception {
            //前处理
            System.out.println("MyInterceptor3的前处理!");
            //放行
            String result = invocation.invoke();
            //后处理
            System.out.println("MyInterceptor3 的后处理!");
            
            return result;
        }
    }

    拦截器配置

    <?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="inter" namespace="/" extends="struts-default" >
        <interceptors>
        <!-- 1.注册拦截器 -->
            <interceptor name="myInter3" class="cn.zhr.a_interceptor.MyInterceptor3"></interceptor>
        <!-- 2.注册拦截器栈 -->
            <interceptor-stack name="myStack">
                <!-- 自定义拦截器引入(建议放在20个拦截器之前) -->
                <interceptor-ref name="myInter3">
                    <!-- 指定哪些方法不拦截,这两不能同时指定
                     <param name="excludeMethods">add,delete</param> -->
                     <!-- 指定哪些方法需要拦截 -->
                     <param name="includeMethods">add,delete</param>
                </interceptor-ref>
                <!-- 引用默认的拦截器栈(20个) -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>    
        </interceptors>
        <!-- 3.指定包中的默认拦截器栈 -->
        <default-interceptor-ref name="myStack"></default-interceptor-ref>
            <action name="Demo1Action_*" class="cn.zhr.a_interceptor.Demo1Action" method="{1}" >
                <!-- 为Action单独指定走哪个拦截器(栈) 
                <interceptor-ref name="myStack"></interceptor-ref>-->
                <result name="success" type="dispatcher" >/index.jsp</result>
            </action>
        </package>
        <package name="tag" namespace="/" extends="struts-default" >
            <action name="Demo2Action" class="cn.zhr.b_tag.Demo2Action" method="execute" >
                <result name="success" type="dispatcher" >/tag1.jsp</result>
            </action>
            <action name="Demo3Action" class="cn.zhr.b_tag.Demo3Action" method="execute" >
                <result name="success" type="dispatcher" >/tag2.jsp</result>
            </action>
        </package>
    </struts>

     最近一直在忙着复习考试,刚腾出时间就过来把博客补一下。

  • 相关阅读:
    Learning KVM
    KVM HOST IN A FEW LINES OF CODE
    VM学习—实现自己的内核
    gvisor bluepillHandler + SwitchToUser
    GO语言调试利器dlv快速上手
    gvisor debug
    gvisor 系统 调用初始化
    Android开发 02
    Android开发 01
    加分项
  • 原文地址:https://www.cnblogs.com/moster/p/8055989.html
Copyright © 2020-2023  润新知