zoukankan      html  css  js  c++  java
  • Struts2(五)——核心拦截器

     Struts框架一共为我们提供了35个拦截器,其中默认的拦截器有18个,框架访问action的异常处理,配置信息处理,转发重定向选择,上传等等等等,都是这18个拦截器中设置的,起着非比寻常的作用。而这些在struts-default.xml文件中都有设置,看一下吧:

    1. <interceptor-stack name="defaultStack">  
    2.                 <interceptor-ref name="exception"/>  
    3.                 <interceptor-ref name="alias"/>  
    4.                 <interceptor-ref name="servletConfig"/>  
    5.                 <interceptor-ref name="i18n"/>  
    6.                 <interceptor-ref name="prepare"/>  
    7.                 <interceptor-ref name="chain"/>  
    8.                 <interceptor-ref name="debugging"/>  
    9.                 <interceptor-ref name="scopedModelDriven"/>  
    10.                 <interceptor-ref name="modelDriven"/>  
    11.                 <interceptor-ref name="fileUpload"/>  
    12.                 <interceptor-ref name="checkbox"/>  
    13.                 <interceptor-ref name="multiselect"/>  
    14.                 <interceptor-ref name="staticParams"/>  
    15.                 <interceptor-ref name="actionMappingParams"/>  
    16.                 <interceptor-ref name="params">  
    17.                   <param name="excludeParams">dojo..*,^struts..*</param>  
    18.                 </interceptor-ref>  
    19.                 <interceptor-ref name="conversionError"/>  
    20.                 <interceptor-ref name="validation">  
    21.                     <param name="excludeMethods">input,back,cancel,browse</param>  
    22.                 </interceptor-ref>  
    23.                 <interceptor-ref name="workflow">  
    24.                     <param name="excludeMethods">input,back,cancel,browse</param>  
    25.                 </interceptor-ref>  
    26.             </interceptor-stack>  

             我们可以通过这些配置,找到对应的类,进行相关操作。

              一,这里只看一下第一个拦截器,exception

                     1在默认的18个拦截器中,第一个拦截器就是exception拦截器,这就意味着,后续流程所有发生的异常都将被捕获到。就可以做统一的异常处理。如果我们相对action中的异常进行处理,需要我们在action配置中增加异常映射标签:

                     <exception-mappingresult="error" exception="java.lang.Exception"></exception-mapping>

                    

                     2,如果每个action都想处理异常呢,总不能每个action都进行一次配置吧!框架为我们提供了配置全局使用的方法:

    1. <!--在package标签里声明全局的异常映射标签,进行简化配置。-->  
    2.               
    3.             <global-exception-mappings>  
    4.                 <exception-mapping result="error" exception="java.lang.ArithmeticException"></exception-mapping>          
    5.             </global-exception-mappings>  
    6.           
    7.             <!--同样,result结果配置,也需要简化配置,可以配置全局的结果映射-->  
    8.               
    9.             <global-results>  
    10.                 <result name="error">/error.jsp</result>  
    11.             </global-results>  

            这样就方便我们的错误处理了。

          二,那么当我们想要扩展框架的功能,自定义拦截器,该如何使用呢?

                假如我们想要定义一个计算方法执行时长的拦截器,看看需要我们做哪些工作呢?

                1,在创建计算action执行时间拦截器时,两种方法,继承父类:AbstractInterceptor实现接口:Interceptor。重写里边的方法:intercept()方法

                2struts.xml中需要声明我们拦截器,如果直接声明,那么我们默认的18个拦截器将不起作用,如何配置及时每个action都能起到作用,又是所有的拦截器都执行呢?需要利用到拦截器栈来对框架默认的拦截器栈进行覆盖:

     

    1. <!--action继承这个拦截器栈,代替了框架默认的了-->  
    2.    <package name="ljh-Interceptor" extends="struts-default">      
    3.         <interceptors>  
    4.                           <!--声明自己的计算时间的拦截器-->  
    5.             <interceptor name="timeInterceptor" class="com.ljh.struts2.interceptor.TimeInterceptor"></interceptor>  
    6.               
    7.                    <!--声明自己的拦截器栈,包含了框架的默认拦截器栈,和自己声明的拦截器-->   
    8.             <interceptor-stack name="ljhStack">  
    9.                 <interceptor-ref name="defaultStack"/>  
    10.                 <interceptor-ref name="timeInterceptor"></interceptor-ref>  
    11.             </interceptor-stack>  
    12.         </interceptors>     
    13.           
    14.         <!-- 默认引用,对所有的Action起作用 -->  
    15.         <default-interceptor-ref name="ljhStack"/>  
    16.     </package>     
    17.     
    18.          <!-- 只需要继承我们自己声明的拦截器栈即可了 -->  
    19.     <package name="example" namespace="/user" extends="ljh-Interceptor">  
    20.         <action name="login" class="com.bjpowernode.struts2.action.LoginAction" method="login">  
    21.             <result name="success">/success.jsp</result>  
    22.             <result name="login">/login.jsp</result>  
    23.         </action>  
    24.     </package>          
    25. </span>  

     

             综上为拦截器的简单学习。

             框架对团队开发的支持:这里补充一点额外的知识:对于struts.xml配置文件的管理,如果就一个struts.xml文件,不仅会造成内容过多难于管理,还有大大提高版本冲突的可能性,所以在开发中,我们会根据功能模块进行相应的划分,让struts.xml总配置文件去包含其它的子配置文件即可,利用include标签。

     

    1.         <include file="resources/struts-interceptor.xml"></include>  
    2.         <include file="resources/struts-exception.xml"></include>  
    3.         <include file="resources/struts-login.xml"></include>  
    4.         <include file="resources/struts-system.xml"></include>  

             这样不仅方便了我们的管理,也方便了合作开发,提高了开发效率。

              综上,主要是对框架拦截器的学习,这样框架的基本知识也就结束了。虽然总结的浅显,但是涉及的比较全面,需要我们根据每一点进行深入的学习应用,这样才能将框架掌握的更好。当然了,单独struts2框架的知识结束了,不等于它的学习结束了。重点还在于此框架和其他框架的集成合并。例如Struts2+Spring+Hibernate,Struts2+Spring+Ibatis的结合等等,在后边的总结中会重点涉及到。

  • 相关阅读:
    【BZOJ】1626: [Usaco2007 Dec]Building Roads 修建道路(kruskal)
    【BZOJ】1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛(lis)
    【BZOJ】1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏(刷水严重)
    【BZOJ】1699: [Usaco2007 Jan]Balanced Lineup排队(rmq/树状数组)
    【BZOJ】1625: [Usaco2007 Dec]宝石手镯(01背包)
    【BZOJ】1617: [Usaco2008 Mar]River Crossing渡河问题(dp)
    【BZOJ】1618: [Usaco2008 Nov]Buying Hay 购买干草(dp)
    【BZOJ】1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛(dp/-bfs)
    【BZOJ】1613: [Usaco2007 Jan]Running贝茜的晨练计划(dp)
    【BZOJ】1612: [Usaco2008 Jan]Cow Contest奶牛的比赛(floyd/dfs)
  • 原文地址:https://www.cnblogs.com/huangcongcong/p/4745806.html
Copyright © 2011-2022 走看看