• Struts2拦截器


    Struts2 拦截器

      Struts2 拦截器在访问某个 Action 方法之前或之后实施拦截, Struts2 拦截器是可插拔的, 拦截器是 AOP 的一种实现.
      拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 在访问被拦截的方法时, Struts2拦截器链中的拦截器就会按其之前定义的顺序被依次调用
      Interceptor 接口
        每个拦截器都是实现了 com.opensymphony.xwork2.interceptor.Interceptor接口的 Java 类:

                

          init: 该方法将在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化
          interecept: 每拦截一个动作请求, 该方法就会被调用一次.
          destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次.
        Struts 会依次调用程序员为某个 Action 而注册的每一个拦截器的 interecept 方法.每次调用 interecept 方法时, Struts 会传递一个 ActionInvocation 接口的实例. 
        ActionInvocation: 代表一个给定动作的执行状态, 拦截器可以从该类的对象里获得与该动作相关联的 Action 对象和 Result 对象. 在完成拦截器自己的任务之后, 拦截器将调用 ActionInvocation 对象的 invoke 方法前进到 Action 处理流程的下一个环节.
        还可以调用 ActionInvocation 对象的 addPreResultListener 方法给 ActionInvocation 对象 “挂” 上一个或多个 PreResultListener 监听器. 该监听器对象可以在动作执行完毕之后, 开始执行动作结果之前做些事情
        AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现
      

    Struts2 自带的拦截器

    自定义拦截器
      要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:

    public class PermissionInterceptor implements Interceptor {
      private static final long serialVersionUID = -5178310397732210602L;
      public void destroy() {}
      public void init() {}
      public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("进入拦截器");    
        if(session里存在用户){
          String result = invocation.invoke();
        }else{
          return “logon”;
        }
        //System.out.println("返回值:"+ result);
        //return result;
      }
    }
    <package name="itcast" namespace="/test" extends="struts-default">
      <interceptors>
        <interceptor name=“permission" class="cn.yzu.aop.PermissionInterceptor" />
        <interceptor-stack name="permissionStack">
          <interceptor-ref name="defaultStack" />
          <interceptor-ref name=" permission " />
        </interceptor-stack>
      </interceptors>
      <action name="helloworld_*" class="cn.yzu.action.HelloWorldAction" method="{1}">
        <result name="success">/WEB-INF/page/hello.jsp</result>
        <interceptor-ref name="permissionStack"/>
      </action>
    </package>

    因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。
    如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-ref name=“permissionStack”/>把拦截器定义为默认拦截器。注意:每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。

    博文推荐:Struts2拦截器原理以及实例    

  • 相关阅读:
    安装MySQL-python时报错
    人的成功平台很重要
    开源运维工具
    遗忘Windows Server 2008R2密码的处理方法
    操作系统下载和操作系统更新失败解决
    说说对SQL 语句优化有哪些方法?
    Git彻底删除历史提交记录的方法
    MSSQL备份脚本
    .NET Core Data Access
    各种数据库默认端口总结
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/6147929.html
Copyright © 2020-2023  润新知