• 十五、struts2中的拦截器(框架功能核心)


    十五、struts2中的拦截器(框架功能核心)

    1、过滤器VS拦截器

    功能是一回事。

    过滤器是Servlet规范中的技术,可以对请求和响应进行过滤。

    拦截器是Struts2框架中的技术,实现AOP(面向切面)的编程思想,可以对请求动作进行拦截。

    2、自定义拦截器

    步骤:

     

    1. 编写一个类,直接或间接实现Interceptor接口。(拦截器会驻留内存),一般都选择继承AbstractInterceptor

      public class MyInterceptor extends AbstractInterceptor {

       

          // 主要的拦截方法

          @Override

          public String intercept(ActionInvocation invocation) throws Exception {

              // 放行前执行

              System.out.println("");

              // 可以认为是过滤器的放行

              String result = invocation.invoke();

              // 放行后执行

              System.out.println("");

              return result;

          }

       

      }

       

      b、需要在struts.xml中进行定义

      <package name="p1" extends="struts-dafault">

              <interceptors>

                  <!-- 自定义拦截器 -->

                  <interceptor name="myinterceptor"

                      class="com.itheima.interceptors.MyInterceptor"></interceptor>

               </interceptors>

          </package>

       

      c、在动作配置中就可以使用了

      <action name="action1" class="com.itheima.action.DemoAction">

           <!--默认使用Struts-default.xml文件中的一个名称为defaultStack的拦截栈 -->

           <!--由于自己自定义了拦截器,所以默认的拦截器都失效了 -->

          <interceptor-ref name="myinterceptor"></interceptor-ref>

      <result>/success.jsp</result>

      </action>

       

       

      知识点:除了要使用自定义的拦截器之外,还要使用defaultStack,可以这么办

      方法一:(自己使用)

      <action name="action1" class="com.itheima.action.DemoAction">

              <!--默认使用Struts-default.xml文件中的一个名称为defaultStack的拦截栈 -->

              <!--由于自己自定义了拦截器,所以默认的拦截器都失效了 -->

              <!--这里拦截器同时使用defaultStack和自定义的拦截器 -->

              <interceptor-ref name="defaultStack"></interceptor-ref>

              <interceptor-ref name="myinterceptor"></interceptor-ref>

              <result>/success.jsp</result>

      </action>

       

      方法二:(大家都用的时候)

      <package name="mydefault" extends="struts-dafault" abstract="true">

              <interceptors>

                  <!--自定义拦截器 -->

                  <interceptor name="myinterceptor"

                      class="com.itheima.interceptors.MyInterceptor"></interceptor>

                  <!--自定义拦截器栈 -->

                  <interceptor-stack name="mydefaultStack">

                      <!-- 引用默认拦截栈 -->

                      <interceptor-ref name="defaultStack"></interceptor-ref>

                      <!-- 引用自定义拦截器 -->

                      <interceptor-ref name="myinterceptor"></interceptor-ref>

                  </interceptor-stack>

              </interceptors>

              <!-- 默认拦截器栈 -->

              <default-interceptor-ref name="myinterceptor"></default-interceptor-ref>

          </package>

       

          <package name="p1" extends="mydefault">

              <action name="action1" class="com.itheima.action.Demo1Action">

                  <!-- <interceptor-ref name="mydefaultStack"></interceptor-ref> -->

                  <result>/success.jsp</result>

              </action>

          </package>

       

      3、自定义拦截器:能够指定拦截的方法或不拦截的方法

      拦截器代码:

      public class MyInterceptor extends MethodFilterInterceptor {

       

          protected String doIntercept(ActionInvocation invocation) throws Exception {

              System.out.println("拦截了!");

              return invocation.invoke();

          }

       

      }

       

      Struts.xml文件配置:

      <package name="p1" extends="struts-default">

              <interceptors>

                  <!-- 自定义了一个拦截器 -->

      <intercepter name="myInterceptor" class="com.itheima.interceptor.MyInterceptor">

                  </intercepter>

              </interceptors>

              <action name="*" class="com.itheima.action.Demo1Action" method="{1}">

                  <!--对当前动作类的所有方法都进行拦截 -->

                  <interceptor-ref name="myInterceptor">

                      <!-- 排除不要拦截的动作方法 -->

                      <param name="excludeMethods">action2,action1</param>

      <!—-定义需要被拦截的方法-->

      <param name="includeMethods">actioin3</param>

                  </interceptor-ref>

                  <result>/success.jsp</result>

              </action>

          </package>

       

  • 相关阅读:
    C++ 使用老牌库xzip & unzip对文件进行压缩解压
    第一次玩蛇,有点紧张。
    fiddler 抓取手机http/https包
    disk或者Partition镜像的制作
    VS2013+phread.h环境配置
    C++ 浅谈 strlen 与 sizeof的区别
    Qt 显示网页的控件
    Qt error: C2236: 意外的标记“class”。是否忘记了“;”?
    初识MySQL——人生若如初相逢
    【学习笔记】HTML基础:列表、表格与媒体元素
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5886455.html
Copyright © 2020-2023  润新知