- 浏览: 243203 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (192)
- 技术研究学习 (19)
- 工作总结 (4)
- spring3.x (11)
- mail (2)
- jar (2)
- FCKeditor (1)
- quartz (2)
- json (1)
- jdbc (5)
- struts2 (6)
- java基础 (18)
- jboss (3)
- IT名称解析 (1)
- 测试工具 (2)
- 工作趣谈 (1)
- 数据库 (8)
- js (8)
- jquery (1)
- mysql (20)
- Sql (3)
- Oracle (1)
- easyui (0)
- log4j (1)
- 源码研究 (1)
- Jasper Report (0)
- Jbpm4 (4)
- xml (1)
- ireport (0)
- javavm (1)
- sitemesh (5)
- compass (1)
- jvm (1)
- ext (1)
- lucene (0)
- cxf (1)
- Blazeds (0)
- Resteasy (1)
- jaxb (1)
- tomcat (1)
- Rmi (1)
- BoneCP (1)
- velocity (3)
- OSCache (1)
- EHCache (1)
- 高性能开发 (9)
- 设计模式 (0)
- 网络协议应用 (1)
- Ibatis (1)
- powerdesigner (1)
- 架构师之路 (2)
- memcached (4)
- MapReduce (1)
- 测试组 (1)
- 图像处理 (2)
- LoadRunner (2)
- 报表 (1)
- 负载均衡 (1)
- 分布式 (3)
- c# (1)
- java中一些特殊问题 (3)
- java 8 (1)
- Mogodb (1)
- 项目设计与实现 (2)
- Ubuntu (1)
- eclipse (1)
- gradle (1)
- 私有云 (1)
- redis (1)
- 移动前端 (1)
最新评论
文章来自javaeye的黑暗浪子:http://darkranger.javaeye.com/
通过前几章介绍,读者应该明白在Web项目中,客户先在视图界面提交一个HTTP请求,在Struts2的ServletDispatcher接收请求时,Struts2会查找配置文件,如struts.xml文件。根据xml文件中定义的拦截器配置,会去调用拦截器。如果配置了拦截器栈,则根据拦截器在拦截器栈中的前后顺序,一一进行调用。而Struts2自带的源代码中也提供了缺省的拦截器配置。
在第一章中,笔者曾经介绍了Struts2的各个文件夹内容,也说过在src文件夹中包含了Struts2的所有底层实现源代码,读者们可到自己安装Struts2的文件路径下找到src\core\src\main\resources\,其中有个名为struts-default.xml。它是Struts2自定义的配置文件,其中有关拦截器的配置代码正是本节需要介绍的拦截器在Struts2中的缺省应用。
技术要点
本节代码说明Struts2中的拦截器缺省配置及其各拦截器的功能。
拦截器和拦截器栈的定义配置格式。
Struts2定义的各个拦截器功能介绍。
演示代码
代码解释
(1)在xml配置文件中配置拦截器和拦截器栈都是以“<interceptors>”开头,以 “</interceptors>”结尾。
(2)配置拦截器的格式如上面代码所示以“<interceptor/>”格式显示,其中两个属性name是拦截器名字,另一个是对应的类路径,因为之前也已经说过其实拦截器也是一个普通的Java对象。
(3)拦截器栈的格式是以“<interceptor-stack >”开头,以“</interceptor-stack>”结尾。其中属性name是拦截器栈名字。在 “<interceptor-stack >”和“</interceptor-stack>”之间可以设置拦截器。如代码所示格式为“<interceptor-ref />”,其中name属性也是拦截器名字。如果系统运行拦截器栈都是按照拦截器栈中定义的拦截器先后顺序执行拦截器。请读者仔细查看那个基础栈配置,其中配置的拦截器都是在xml文件中定义的拦截器。
注意:拦截器栈中不单单可以配置拦截器,它甚至还可以配置拦截器栈。比如在“validationWorkflowStack” 拦截器栈中就配置了“basicStack”拦截器栈。这样的话,配置的子拦截器栈中的拦截器也会被执行。这就类似于父集合和子集合的概念。
(4)针对struts-default.xml文件中各个拦截器配置,笔者一一做介绍,因为如果使用Struts2在Web项目开发中,这些拦截器都是默认缺省的会被执行的。因此了解一下Struts2底层的拦截器到底实现什么功能对开发人员来说是很有帮助的。
alias:对于HTTP请求包含的参数设置别名。
autowiring:将某些JavaBean实例自动绑定到其他Bean对应的属性中。有点类似Spring的自动绑定,在Spring部分会详细说明。
Chain:在Web项目开发中,以前使用Struts开发时候经常碰到两个Action互相传递参数或属性的情况。该拦截器就是让前一Action的参数可以在现有Action中使用。
conversionError:从ActionContext中将转化类型时候发生的错误添加到Action的值域错误中,在校验时候经常被使用到来显示类型转化错误的信息。
cookie:从Struts2.0.7版本开始,可以把cookie注入Action中可设置的名字或值中。
createSession:自动创建一个HTTP的Session,尤其是对需要HTTP的Session的拦截器特别有用。比如下面介绍的 TokenInterceptor。
debugging:用来对在视图间传递的数据进行调试。
ExecAndWait:不显式执行Action,在视图上显示给用户的是一个正在等待的页面,但是Action其实是在“背后”正在执行着。该拦截器尤其在对进度条进行开发的时候特别有用。
exception:将异常和Action返回的result相映射。
fileUpload:支持文件上传功能的拦截器。
i18n:支持国际化的拦截器。
logger:拥有日志功能的拦截器。
modelDriven:Action执行该拦截器时候,可以将getModel方法得到的result值放入值栈中。
scopedModelDriven:执行该拦截器时候,它可以从一个scope范围检索和存储model值,通过调用setModel方法去设置 model值。
params:将HTTP请求中包含的参数值设置到Action中。
prepare:假如Action继承了Preparable接口,则会调用prepare方法。
staticParams:对于在struts.xml文件中Action中设置的参数设置到对应的Action中。
scope:在session或者application范围中设置Action的状态。
servletConfig:该拦截器提供访问包含HttpServletResquest和HttpServletResponse对象的Map的方法。
timer:输出Action的执行时间。
token:避免重复提交的校验拦截器。
tokenSession:和token拦截器类似,但它还能存储提交的数据到session里。
validation:运行在action-validation.xml(校验章节将介绍)文件中定义的校验规则。
workflow:在Action中调用validate校验方法。如果Action有错误则返回到input视图。
store:执行校验功能时候,该拦截器提供存储和检索Action的所有错误和正确信息的功能。
checkbox:视图中如果有checkbox存在的情况,该拦截器自动将unchecked的checkbox当作一个参数(通常值为 “false”)记录下来。这样可以用一个隐藏的表单值来记录所有未提交的checkbox,而且缺省unchecked的checkbox值是布尔类型的,如果视图中checkbox的值设置的不是布尔类型,它就会被覆盖成布尔类型的值。
profiling:通过参数来激活或不激活分析检测功能,前提是Web项目是在开发模式下。(涉及到调试和性能检验时使用)
roles:进行权限配置的拦截器,如果登录用户拥有相应权限才去执行某一特定Action。
通过前几章介绍,读者应该明白在Web项目中,客户先在视图界面提交一个HTTP请求,在Struts2的ServletDispatcher接收请求时,Struts2会查找配置文件,如struts.xml文件。根据xml文件中定义的拦截器配置,会去调用拦截器。如果配置了拦截器栈,则根据拦截器在拦截器栈中的前后顺序,一一进行调用。而Struts2自带的源代码中也提供了缺省的拦截器配置。
在第一章中,笔者曾经介绍了Struts2的各个文件夹内容,也说过在src文件夹中包含了Struts2的所有底层实现源代码,读者们可到自己安装Struts2的文件路径下找到src\core\src\main\resources\,其中有个名为struts-default.xml。它是Struts2自定义的配置文件,其中有关拦截器的配置代码正是本节需要介绍的拦截器在Struts2中的缺省应用。
技术要点
本节代码说明Struts2中的拦截器缺省配置及其各拦截器的功能。
拦截器和拦截器栈的定义配置格式。
Struts2定义的各个拦截器功能介绍。
演示代码
<!------------------------文件名: struts-default.xml-----------------------------> <interceptors> <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> …………… <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" /> <!—基础栈 --> <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionError"/> </interceptor-stack> <!—校验和工作流栈 --> <interceptor-stack name="validationWorkflowStack"> <interceptor-ref name="basicStack"/> <interceptor-ref name="validation"/> <interceptor-ref name="workflow"/> </interceptor-stack> <!—文件上传栈--> <interceptor-stack name="fileUploadStack"> <interceptor-ref name="fileUpload"/> <interceptor-ref name="basicStack"/> </interceptor-stack> <!—模型驱动栈 --> <interceptor-stack name="modelDrivenStack"> <interceptor-ref name="modelDriven"/> <interceptor-ref name="basicStack"/> </interceptor-stack> <!—action链栈 --> <interceptor-stack name="chainStack"> <interceptor-ref name="chain"/> <interceptor-ref name="basicStack"/> </interceptor-stack> <!-- i18n国际化栈 --> <interceptor-stack name="i18nStack"> <interceptor-ref name="i18n"/> <interceptor-ref name="basicStack"/> </interceptor-stack> </interceptors>
代码解释
(1)在xml配置文件中配置拦截器和拦截器栈都是以“<interceptors>”开头,以 “</interceptors>”结尾。
(2)配置拦截器的格式如上面代码所示以“<interceptor/>”格式显示,其中两个属性name是拦截器名字,另一个是对应的类路径,因为之前也已经说过其实拦截器也是一个普通的Java对象。
(3)拦截器栈的格式是以“<interceptor-stack >”开头,以“</interceptor-stack>”结尾。其中属性name是拦截器栈名字。在 “<interceptor-stack >”和“</interceptor-stack>”之间可以设置拦截器。如代码所示格式为“<interceptor-ref />”,其中name属性也是拦截器名字。如果系统运行拦截器栈都是按照拦截器栈中定义的拦截器先后顺序执行拦截器。请读者仔细查看那个基础栈配置,其中配置的拦截器都是在xml文件中定义的拦截器。
注意:拦截器栈中不单单可以配置拦截器,它甚至还可以配置拦截器栈。比如在“validationWorkflowStack” 拦截器栈中就配置了“basicStack”拦截器栈。这样的话,配置的子拦截器栈中的拦截器也会被执行。这就类似于父集合和子集合的概念。
(4)针对struts-default.xml文件中各个拦截器配置,笔者一一做介绍,因为如果使用Struts2在Web项目开发中,这些拦截器都是默认缺省的会被执行的。因此了解一下Struts2底层的拦截器到底实现什么功能对开发人员来说是很有帮助的。
alias:对于HTTP请求包含的参数设置别名。
autowiring:将某些JavaBean实例自动绑定到其他Bean对应的属性中。有点类似Spring的自动绑定,在Spring部分会详细说明。
Chain:在Web项目开发中,以前使用Struts开发时候经常碰到两个Action互相传递参数或属性的情况。该拦截器就是让前一Action的参数可以在现有Action中使用。
conversionError:从ActionContext中将转化类型时候发生的错误添加到Action的值域错误中,在校验时候经常被使用到来显示类型转化错误的信息。
cookie:从Struts2.0.7版本开始,可以把cookie注入Action中可设置的名字或值中。
createSession:自动创建一个HTTP的Session,尤其是对需要HTTP的Session的拦截器特别有用。比如下面介绍的 TokenInterceptor。
debugging:用来对在视图间传递的数据进行调试。
ExecAndWait:不显式执行Action,在视图上显示给用户的是一个正在等待的页面,但是Action其实是在“背后”正在执行着。该拦截器尤其在对进度条进行开发的时候特别有用。
exception:将异常和Action返回的result相映射。
fileUpload:支持文件上传功能的拦截器。
i18n:支持国际化的拦截器。
logger:拥有日志功能的拦截器。
modelDriven:Action执行该拦截器时候,可以将getModel方法得到的result值放入值栈中。
scopedModelDriven:执行该拦截器时候,它可以从一个scope范围检索和存储model值,通过调用setModel方法去设置 model值。
params:将HTTP请求中包含的参数值设置到Action中。
prepare:假如Action继承了Preparable接口,则会调用prepare方法。
staticParams:对于在struts.xml文件中Action中设置的参数设置到对应的Action中。
scope:在session或者application范围中设置Action的状态。
servletConfig:该拦截器提供访问包含HttpServletResquest和HttpServletResponse对象的Map的方法。
timer:输出Action的执行时间。
token:避免重复提交的校验拦截器。
tokenSession:和token拦截器类似,但它还能存储提交的数据到session里。
validation:运行在action-validation.xml(校验章节将介绍)文件中定义的校验规则。
workflow:在Action中调用validate校验方法。如果Action有错误则返回到input视图。
store:执行校验功能时候,该拦截器提供存储和检索Action的所有错误和正确信息的功能。
checkbox:视图中如果有checkbox存在的情况,该拦截器自动将unchecked的checkbox当作一个参数(通常值为 “false”)记录下来。这样可以用一个隐藏的表单值来记录所有未提交的checkbox,而且缺省unchecked的checkbox值是布尔类型的,如果视图中checkbox的值设置的不是布尔类型,它就会被覆盖成布尔类型的值。
profiling:通过参数来激活或不激活分析检测功能,前提是Web项目是在开发模式下。(涉及到调试和性能检验时使用)
roles:进行权限配置的拦截器,如果登录用户拥有相应权限才去执行某一特定Action。
发表评论
-
struts2.1.3前后过滤器的区别
2013-03-11 12:38 827来源:http://blog.sina.com.c ... -
Struts2配置文件讲解
2012-09-14 19:23 800[size=large][/size][color=green ... -
struts2 文件上传 文件大小配置问题
2012-09-13 19:57 4152原文来自:http://blog.sina.com.cn/s/ ... -
struts2拦截器执行顺序问题
2012-08-15 10:15 1129struts.xml 中集成了 default-struts. ... -
JAAS(一)
2012-08-10 13:41 823Java Authentication Authorizati ...
相关推荐
Interceptor拦截器详解和部分源码的指导,方便深入学习struts2,增加理解
struts2拦截器详解,通过一个简单的例子让大家明白sturts2拦截器使用方法。
跟开涛学SpringMVC(5)处理器拦截器详解Java开发Java经验技巧共13页.pdf.zip
NULL 博文链接:https://jinnianshilongnian.iteye.com/blog/1679570
关于struts2 拦截器的详细的解释及其在开发中对struts2的拦截器的应用和拦截器在框架中的作用.
NULL 博文链接:https://cmexico.iteye.com/blog/621208
SpringMVC拦截器例子详解,
主要介绍了Struts2之Action接收请求参数和拦截器详解,非常具有实用价值,需要的朋友可以参考下
主要介绍了SpringMVC中的拦截器详解及代码示例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
本篇文章主要介绍了详解Retrofit Interceptor(拦截器) 拦截请求并做相关处理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了微信小程序wx.request拦截器详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本篇文章主要介绍了java中的Struts2拦截器浅解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
第五章 处理器拦截器详解 第六章 注解式控制器详解 注解式控制器运行流程及处理器定义 第六章 注解式控制器详解 SpringMVC3强大的请求映射规则详解 第六章 注解式控制器详解 Spring MVC 3.1新特性 生产者、消费者...
Struts2的拦截器的使用详解实例 博文链接:https://zmx.iteye.com/blog/457434
第五章 处理器拦截器详解 第六章 注解式控制器详解 注解式控制器运行流程及处理器定义 第六章 注解式控制器详解 SpringMVC3强大的请求映射规则详解 第六章 注解式控制器详解 Spring MVC 3.1新特性 生产者、消费者...
CXF使用EndpointImpl发布WebService加入拦截器
第五章 处理器拦截器详解.pdf 第六章 注解式控制器详解1(注解式控制器运行流程及处理器定义).pdf 第六章 注解式控制器详解2(SpringMVC3强大的请求映射规则详解).pdf 第六章 注解式控制器详解3(生产者、消费者请求...
主要介绍了SpringBoot拦截器Filter的使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了解决拦截器对ajax请求的拦截实例详解的相关资料,需要的朋友可以参考下