• .Net转Java自学之路—Struts2框架篇四(拦截器)


    拦截器概述:

      1、在struts2框架中封装的很多功能都是在拦截器中。
      2、在struts2中有很多拦截器,不是每次这些拦截器都回执行,每次执行的都是默认拦截器。
      3、默认拦截器的位置在struts2-core.jar包中的struts-default.xml文件中可以找到。
      4、拦截器执行:在action对象创建之后与action的方法执行之前执行。

    原理:

      拦截器底层主要使用俩个原理:AOP思想,责任链模式。

      AOP思想:
        AOP就是面向切面编程;如在基本功能的基础上扩展功能,不通过修改源代码的方式进行扩展。就是AOP思想。

      责任链模式:
        设计模式的一种,责任链模式和过滤链很相似。要一次性执行多个操作,而每个操作执行后都要执行类似于放行操作后,才能执行下一个操作。
        过滤链:一个请求可以有多个过滤器进行过滤,每个过滤器只有做放行才能到下一个过滤器。

      类似于放行操作的方法:invocation.invoke();

      拦截器在action对象创建以后,在action的方法执行之前执行。

      在action方法执行之前执行默认拦截器,执行过程使用aop思想,在action没有直接调用拦截器的方法,使用配置文件方式进行操作。在执行拦截器时,执行很多的拦截器,这个过程使用责任链模式。

    过滤器和拦截器的区别:

      过滤器:服务器启动时创建。过滤器理论上可以过滤任意内容。
      拦截器:拦截器只可以拦截action。

    自定义拦截器:

      在Struts2中有很多的拦截器,这些拦截器是Struts2封装的功能,但在实际开发中,Struts2中的拦截器中可以没有要使用的功能,这时需要自定义拦截器来实现功能。

      结构:

        继承AbstractInterceptor类,该类实现了Interceptor接口。该接口中的三个方法:
          init();初始化
          destroy();销毁
          String intercept(ActionInvocation invocation);拦截逻辑的方法

      实现自定义拦截器的方式:

        第一种方式:自定义拦截器时需要继承AbstractInterceptor或实现Interceptor即可。
        第二种方式:自定义拦截器继承MethodFilterInterceptor来实现,让action中某个方法不进行拦截。重写拦截器逻辑方法doIntercept。并配置action和拦截器的关系(注册拦截器)。

      如何让拦截器与action有关系:

        不是在action中调用拦截器的方法,而是通过配置文件方式让它们建立关系。
        配置步骤:
          1、在要拦截的action标签所在的package标签中声明拦截器。

    <interceptors>
        <interceptor name="selfname" class="自定义拦截器类的全路径">
        </interceptor>
    </interceptors>

          2、在具体的action标签中使用声明的拦截器。

    <interceptor-ref name="声明拦截器的name">
    </interceptor-ref>

          3、Struts2中执行很多的默认拦截器,但如果在action中配置自定义拦截器,那么默认的拦截器就不会执行。需要把默认拦截器手动配置。在struts2配置文件的action标签下手动配置。手动配置默认拦截器:俩种方式
            》将interceptor-stack中的默认拦截器重新写一遍。
            》直接使用interceptor-stack的name属性defaultStack值。

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

            配置的拦截器会对action中所有的方法都进行拦截。因为在action中有部分方法不需要拦截,那么需要配置不拦截的方法。在使用拦截器配置interceptor-ref标签中配置不拦截的方法。

    <interceptor-ref name="声明拦截器的name">
        <param name="excludeMethods(忽略某些方法。该name值时固定的)">方法1,方法2(action不拦截的方法名称)</param>
    </interceptor-ref>

    Struts2标签:

      struts2的标签只能使用在JSP页面中。导入标签库:

    <%@ taglib uri="/struts-tags" prefix="s"%>

      s:property:与ognl表达式在jsp页面中获取值栈数据。

      s:iterator:获取值栈list集合数据,表示list集合。

      s:debug:查看值栈结构和数据。

      表单标签:

        在html中表单标签:
          1、form(action、method、enctype)
          2、输入项:大部分在input中封装 type="值"
            text:普通输入项
            password:密码输入项
            radio:单选输入项
            checkbox:复选输入项
            select:下拉输入项
            textarea:文本域
            file:文件上传项
            hidden:隐藏项
            button:普通按钮
            submit:提交按钮
            image:图片提交
            reset:重置

        在Struts2中对应html表单标签大部分都有,标签中多有label属性。
          form >> s:form(action、method、enctype)
          输入项:
            text >> s:textfield:普通输入项
            password >> s:password:密码输入项
            radio >> s:radio:单选输入项

    <s:radio list="{'男','女'}" name="sex" label="性别"></s:radio><!-- 该情况显示值和value值相同 -->
    <s:radio list="#{'0':'男','1':'女'}" name="sex" label="性别"></s:radio><!-- 该情况显示值和value值不同 -->

            checkbox s:checkboxlist>> :复选输入项
            select >> s:select:下拉输入项
            textarea >> s:textarea:文本域
            file >> s:file:文件上传项
            hidden >> s:hidden:隐藏项
            submit >> s:submit:提交按钮
            reset >> s:reset:重置

    <s:submit value="提交"></s:submit>
    <s:reset value="重置"></s:reset>
  • 相关阅读:
    生成客户端信任的证书文件
    postgresql Streaming Replication监控与注意事项
    采用pacemaker+corosync实现postgresql双机热备、高可用方案
    51nod1305(简单逻辑)
    51nod1091(贪心)
    51nod1009(1的数目)
    51nod1102(数塔)
    51nod1459(带权值的dijkstra)
    51nod1265(判断四个点是否共面)
    51node1264(判断线段相交)
  • 原文地址:https://www.cnblogs.com/zltao/p/10481829.html
Copyright © 2020-2023  润新知