zoukankan      html  css  js  c++  java
  • 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的主要作用就是:封装请求参数调用业务逻辑,执行业务操作,根据执行结果返回结果视图实现页面导航,被称为"业务控制器"
  • 相关阅读:
    个人冲刺二(7)
    个人冲刺二(6)
    个人冲刺二(5)
    个人冲刺二(4)
    对称二叉树 · symmetric binary tree
    108 Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
    530.Minimum Absolute Difference in BST 二叉搜索树中的最小差的绝对值
    pp 集成工程师 mism师兄问一问
    17. Merge Two Binary Trees 融合二叉树
    270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点
  • 原文地址:https://www.cnblogs.com/slliang/p/2655900.html
Copyright © 2011-2022 走看看