• Struts2 拦截器


    1. 为什么要使用拦截器

       

    2. 拦截器的原理
    它有三个阶段:1. 执行Action之前的处理 2.调用ActionInvocation的invoke()方法将控制器转交给后续拦截器或者返回结果字符串终止执行 3. 执行Action之后的处理


    3. Struts2 内置拦截器
    1) params 拦截器
    2)staticParams拦截器
    3)servletConfig拦截器
    4)fileUpload 拦截器
    5) validation 拦截器
    6)workflow 拦截器
    7) exceiption 拦截器


    Struts2的默认拦截器可以查看 struts-default.xml 文件。

    <interceptors>
    <!-- 定义拦截器 -->
    <interceptor name="deprecation" class="org.apache.struts2.interceptor.DeprecationInterceptor" />

    <!-- 定义拦截器栈 -->
    <interceptor-stack name="basicStack">

    <!-- 指定引用的拦截器 -->
    <interceptor-ref name="exception"/>
    <interceptor-ref name="servletConfig"/>
    <interceptor-ref name="prepare"/>
    </interceptor-stack>
    </interceptors>

    <!-- 定义默认的拦截器引用 -->
    <default-interceptor-ref name="defaultStack"/>


    提示: 拦截器栈有多个<interceptor-ref>,谁在前,谁先起作用
    拦截器起作用的顺序:先<action>, 再本包,再父包

    4. 拦截器的配置【自定义】
    <interceptor .../>
    <interceptor-ref ...>


    5. 自定义拦截器
    方法1: 实现Interceptor接口
    该接口提供了3个方法,1) void init(),该拦截器被初始化之后,在拦截器执行拦截之前,系统回调该方法。2) void destroy() ,在拦截器实例被销毁之前。 3) String intercept(ActionInvocation ai) throws Exception: 用户需要实现的拦截器动作。
    提示: ActionInvocatio 代表当前action 执行的状态

    方法2: 继承AbstractInterceptor 抽象类【推荐使用该方法】
    该类提供了 init() 和 destroy()方法的空实现; 只需要实现intercept()方法即可

    方法3:继承MethodFilterInterceptor类: 指定拦截的方法; 指定不拦截的方法

    --------------

    步骤:1) 继承AbstractInterceptor实现拦截器类
            2) struts.xml中定义拦截器
          <interceptor name="..." class="..." />
      3) <action> 引用拦截器
        单独引用: 引用自定义和默认拦截器
        拦截栈引用: 定义拦截器栈包含自定义和默认拦截器


    6. 拦截器与过滤器
    相似点: 功能相似; 原理相似;方法类似;
    不同点:内容不同,拦截器用于拦截对Action请求,而过滤器几乎可以过滤所有的内容
    拦截器中可以获取Action的当前执行状态,而过滤器不可以
    过滤器是Servlet中概念,在Web.xml中配置; 拦截器是struts/webWork中概念,在struts.xml中配置。

  • 相关阅读:
    学习web前端要去一线就业吗
    程序员什么时候该考虑跳槽
    前端工程师应该具备怎样的一种技术水平
    如何掌握学习移动端Web页面布局
    如何优化Web前端技术开发生态体系
    想进名企大厂?阿里程序员给你三点建议
    对即将入职前端工作的新人有哪些建议?
    Java基础学习之快速掌握Session和cookie
    Java入门学习之JDK介绍与初次编程实现
    Java编译的运行机制初步讲解
  • 原文地址:https://www.cnblogs.com/Theladyflower/p/4624219.html
Copyright © 2020-2023  润新知