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

       

  • 相关阅读:
    重写MembershipProvider实现自己的身份验证
    重写MembershipProvider用于事务处理(一)
    ASP.NET 2.0中GridView无限层复杂表头的实现
    用好VS2005之扩展membership服务
    ASP.NET2.0角色控制和管理
    asp.net2.0自带的Provider源码下载
    ASP.NET2.0上传EXCEL文件到gridview中显示
    一次编辑GridView 的所有行
    重写MembershipProvider用于事务处理(二)
    创建表头固定,表体可滚动的GridView
  • 原文地址:https://www.cnblogs.com/Prozhu/p/5886455.html
Copyright © 2011-2022 走看看