• Struts2_03_控制器(过滤器/拦截器/Action)


    一、过滤器

    过滤器是Struts2控制器的最前端控制器,请求对象首先被过滤器过滤。Struts2的过滤器有三层次,参考工作原理图中与过滤器有关的部分,不再赘述。

    二、拦截器

      1.简单了解什么是拦截器?

    • 拦截器是Struts2中第二个层次的控制器,他会在Action执行前后运行一些Action类需要的通用功能;
    • 拦截器是使用AOP思想设计;
    • API中提供了大量的拦截器类;当然,我们也可以自定义拦截功能,也就是自定义拦截器。

     

      2.如何使用拦截器?

      ①定义拦截器

    使用拦截器前,必须先在struts.xml文件中定义拦截器,使用标记<interceptor>定义。

      ②使用拦截器

    定义拦截器之后就可以再Action中引用,通过标记<interceptor_ref>指定要使用的拦截器。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
      <constant name="struts.objectFactory" value="spring" />
      <package name="default" extends="struts-default">
      <!-- 定义拦截器 -->
      <interceptors>     <interceptor name="MyInterceptor01" class="interceptor.MyInterceptor01" />
        <
    interceptor name="MyInterceptor02" class="interceptor.MyInterceptor02" />      
      </interceptors>   
      <action name="loginAction" class="loginAction">
        <!-- 引用拦截器-->
        <interceptor-ref name="MyInterceptor01"></interceptor-ref>
        <
    interceptor-ref name="MyInterceptor02"></interceptor-ref>
        <result name="fail">/index.jsp </result>     <result name="success">/success.jsp</result>    </action>   </package> </struts>

      3.拦截器栈的定义与使用

    往往我们需要对多个拦截器一起使用,那么就可以定义一个拦截器栈,将需要使用的拦截器捆绑在一起,方便使用,也就是说拦截器栈是多个拦截器的集合。

    先看下面的代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
      <constant name="struts.objectFactory" value="spring" />
      <package name="default" extends="struts-default">
        <interceptors>
          <!--定义拦截器 -->
          <interceptor name="MyInterceptor01" class="interceptor.MyInterceptor01" />
          <
    interceptor name="MyInterceptor02" class="interceptor.MyInterceptor02" />
          <
    interceptor name="MyInterceptor03" class="interceptor.MyInterceptor03" />
          <
    interceptor name="MyInterceptor04" class="interceptor.MyInterceptor04" />
          <!--定义拦截器栈 -->      
          <interceptor-stack name="myInterceptorStack">         
            <interceptor-ref name="MyInterceptor01"/>         
            <interceptor-ref name="defaultStack02"/>       
          </interceptor-stack>     
        </interceptors>     
        <action name="loginAction" class="loginAction">
          <!-- 使用拦截器栈 -->
          <
    interceptor-ref name="myInterceptorStack" />       <result name="fail">/index.jsp </result>       <result name="success">/success.jsp</result>       </action>   </package> </struts>

    上述定义了4个拦截器,还定义了一个拦截器栈,拦截器栈中引用了两个拦截器,如果下次需要同时访问这两个拦截器,就可以直接访问拦截器栈即可以了。

      4.默认拦截器或拦截器栈的定义与使用

    在一个项目的某个包中,我们可以定义默认的拦截器或拦截器栈,那么,该包下的Action在<interceptor-ref>没有指定情况下,都会被默认拦截器或拦截器栈拦截。但是,如果包中的某个Action指定了<interceptor-ref>,则默认的拦截器或拦截器栈失效,必须再次指定方可使用。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
      <constant name="struts.objectFactory" value="spring" />
      <!--定义默认拦截器栈 -->
      <default-
    interceptor-ref name="myInterceptorStack" />   <package name="default" extends="struts-default">        <action name="loginAction" class="loginAction">       <result name="fail">/index.jsp </result>       <result name="success">/success.jsp</result>       </action>   </package> </struts>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
      <constant name="struts.objectFactory" value="spring" />
      <!--定义默认拦截器栈 -->
      <default-
    interceptor-ref name="myInterceptorStack" />   <package name="default" extends="struts-default">        <action name="loginAction" class="loginAction">
        <!--指定拦截器引用,此时默认拦截器失效-->
        <interceptor-ref name="MyInterceptor01" />
        <!-- 再次指定默认拦截器,使其生效 -->
        <
    interceptor-ref name="myInterceptorStack" />

          <result name="fail">/index.jsp </result>
          <result name="success">/success.jsp</result>
        </action>
      </package>
    </struts>

     

      5.struts-default.xml中定义的拦截器栈

    struts.xml中的Action都继承了struts-default.xml中的struts-default包,因此都默认继承struts-default包的默认拦截器栈。

     

    三、Action

    • Action是Struts2的第三层的控制器,需要自行开发;
    • Action是Struts2应用中使用数量最多的控制器;
    • Action实现的功能与Servlet非常类似,然而,Action不是Servlet,仅仅是一个普通的java类;
    • Action的主要作用就是:封装请求参数调用业务逻辑,执行业务操作,根据执行结果返回结果视图实现页面导航,被称为"业务控制器"
  • 相关阅读:
    jupyter中添加conda环境
    MobaXterm的安装和使用(linux上传文件夹)
    CentOS7.5安装python3并设置成系统默认python环境
    Linux系统下conda的安装与使用
    手把手教你Pycharm远程连接服务器端项目进行本地开发调试!
    执行Kakfa Topic创建操作,发现无法创建提示replication factor larger than available brokers
    4. Median of Two Sorted Arrays (Solution 1: Merge Sort)
    636. Exclusive Time of Functions
    477. Total Hamming Distance
    863. All Nodes Distance K in Binary Tree
  • 原文地址:https://www.cnblogs.com/slliang/p/2655900.html
Copyright © 2020-2023  润新知