zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/moster/p/8055989.html
Copyright © 2011-2022 走看看