zoukankan      html  css  js  c++  java
  • .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>
  • 相关阅读:
    .NET Core下的Socket示例.
    VS没办法调试,直接退出,报错:1. 使用调试生成配置或禁用调试选项“启用‘仅我的代码’”。。。
    2017年2月7日 今年第一天上班了
    .NET Core错误:The specified framework 'Microsoft.NETCore.App', version '1.0.0-rc2-3002702' was not found.
    KB2533623 下载
    Ajax Not Found,asp.net mvc 中
    JavaScript外部函数调用AngularJS的函数、$scope
    029医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------数据模型的分析(建表)
    028医疗项目-模块三:药品供应商目录模块——供货商药品目录查询功能----------需求分析
    50个查询系列-第10个查询:查询没有学全所有课的同学的学号、姓名;
  • 原文地址:https://www.cnblogs.com/zltao/p/10481829.html
Copyright © 2011-2022 走看看