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. <global-exception-mappings>
  3. <exception-mapping result="error" exception="java.lang.ArithmeticException"></exception-mapping>
  4. </global-exception-mappings>
  5. <!--同样,result结果配置,也需要简化配置,可以配置全局的结果映射-->
  6. <global-results>
  7. <result name="error">/error.jsp</result>
  8. </global-results>

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

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

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

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

2,struts.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. <interceptor-stack name="ljhStack">
  8. <interceptor-ref name="defaultStack"/>
  9. <interceptor-ref name="timeInterceptor"></interceptor-ref>
  10. </interceptor-stack>
  11. </interceptors>
  12. <!-- 默认引用,对所有的Action起作用 -->
  13. <default-interceptor-ref name="ljhStack"/>
  14. </package>
  15. <!-- 只需要继承我们自己声明的拦截器栈即可了 -->
  16. <package name="example" namespace="/user" extends="ljh-Interceptor">
  17. <action name="login" class="com.bjpowernode.struts2.action.LoginAction" method="login">
  18. <result name="success">/success.jsp</result>
  19. <result name="login">/login.jsp</result>
  20. </action>
  21. </package>
  22. </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的结合等等,在后边的总结中会重点涉及到。

Struts2(五)——核心拦截器的更多相关文章

  1. Struts2的核心——拦截器

    虽然以前已经学了很多的拦截器,但是在这里还是想重头梳理一下所有有关拦截器的知识,尤其是struts2中的拦截器 1:拦截器是什么? java里的拦截器是动态拦截Action调用的对象.它提供了一种机制 ...

  2. 十五、struts2中的拦截器(框架功能核心)

    十五.struts2中的拦截器(框架功能核心) 1.过滤器VS拦截器 功能是一回事. 过滤器是Servlet规范中的技术,可以对请求和响应进行过滤. 拦截器是Struts2框架中的技术,实现AOP(面 ...

  3. struts2.1.6教程五、拦截器

    在前面我们已经初步使用过拦截器,下面继续细细探讨. 1.概述strust2中的拦截器 拦截器是Struts2框架的核心,它主要完成解析请求参数.将请求参数赋值给Action属性.执行数据校验.文件上传 ...

  4. Struts2(十四)拦截器实现权限管理

    一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...

  5. struts2内置拦截器和自定义拦截器详解(附源码)

    一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...

  6. 5.Struts2中的拦截器

    拦截器是Struts2中的核心,其自带很多很多的拦截器,这里主要介绍一下自定义拦截器,恩多一半情况下呢?我们不需要使用到自定义的拦截器,Struts2本身已经提 供了很多的拦截器供我们使用,对于自定义 ...

  7. struts2中的拦截器

    一  AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP ...

  8. Struts2笔记_拦截器

    A.拦截器是什么 --- Interceptor:拦截器,起到拦截Action的作用. ---Filter:过滤器,过滤从客户端向服务器发送的请求. ---Interceptor:拦截器,拦截是客户端 ...

  9. java struts2入门学习---拦截器学习

    一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦 ...

随机推荐

  1. 【转】基于Qt, TUIO和TSLIB的嵌入式Linux下的多点触摸设计

    这个教程描述了在嵌入式linux下使用Qt如何设置一个支持多点触摸和单点触摸的输入系统.这里假定你已经有了对应的驱动程序,驱动可以从触摸屏的厂商那里获得或者使用一个linux 内核源码中已经存在的驱动 ...

  2. uva11624 - Fire!

    uva11624 - Fire! 火在蔓延,人在走.火会蔓延,不会熄灭,我们可以确定某个点着火的时间(广搜).对于J来说,要是他走到某点的时间比火蔓延到该点的时间要短,那么他走到该点的时候,火还没蔓延 ...

  3. MFC获取当前时间

    获取按钮消息响应函数: void CTest17GetTimeDlg::OnGetTime() { // TODO: 在此添加控件通知处理程序代码 //UpdateData(true); CTime  ...

  4. Ubuntu的防火墙UFW

    这是个简单的防火墙,可以直接在命令行启停,也可安装提图形端gufw *安装 sudo apt-get install ufw gufw *常用命令 sudo ufw enable //启动 ufw d ...

  5. Android 打造自己的个性化应用(五):仿墨迹天气实现续--> 使用Ant实现zip/tar的压缩与解压

    上一篇中提到对于Zip包的解压和压缩需要借助Ant 实现,我经过参考了其他的资料,整理后并加上了一些自己的看法: 这里就具体地讲下如何使用Ant进行解压缩及其原因: java中实际是提供了对  zip ...

  6. ASP.NET MVC 阻止当前请求的视图页面缓存OutputCache

    设置缓存 [OutputCache(Duration =333,VaryByCustom ="Index")] 缓存: //在action中,临时阻止该次请求的视图页面缓存 Res ...

  7. SpringMvc学习-环境搭建

    最近在学习SpringMVC,首先来说说SpringMVC项目的搭建. 1.SpringMVC简介 spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级W ...

  8. 关于自定义UICollectionViewLayout的一点个人理解<一>

    自定义UICollectionView,主要会用到以下几个方法: - (void)prepareLayout; 第一次加载layout.刷新layout.以及- (BOOL)shouldInvalid ...

  9. CDZSC_2015寒假新人(2)——数学 G

    G - G Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status ...

  10. 一大坨GoogleAPI的学习笔记之一(oAuth2.0)

    官方文档地址:https://developers.google.com/accounts/docs/OAuth2InstalledApp 最近Ubuntu下VGA接口无端的不能用了,木有心情翻译了, ...