Alias Interceptor
用于在ActionChain中的不同action之间传递参数,把相同的参数用不同的别名来命名
<param name="aliases">#{ 'foo' : 'bar' }</param>
foo参数的值将被赋予别名bar
Chaining Interceptor
该拦截器把所有value stack上的对象(除了那些实现了Unchainable接口的)拷贝到当前执行对象中(Action).可以定义includes和excludes分别指定需要或者不需要拷贝的参数,该拦截器一般和chain result结合使用.详细配置如下。
Checkbox Interceptor
和hiddenfield一起解决checkbox在未选中情况下提交到服务器端时的数据丢失问题。
Cookie Interceptor
顾名思义用于把cookie的值注入到action中,从源代码中得到的规则如下
Conversion Error Interceptor
Create Session Interceptor
DebuggingInterceptor
Execute and Wait Interceptor
Exception Interceptor
File Upload Interceptor
I18n Interceptor
Logger Interceptor
Message Store Interceptor
Model Driven Interceptor
Scoped Model Driven Interceptor
Parameters Interceptor
Prepare Interceptor
Scope Interceptor
Servlet Config Interceptor
Static Parameters Interceptor
Roles Interceptor
Timer Interceptor
Token Interceptor
Token Session Interceptor
Validation Interceptor
Workflow Interceptor
Parameter Filter Interceptor
Profiling Interceptor
MethodFilterInterceptor
有空写个测试用例测试一下。
用于在ActionChain中的不同action之间传递参数,把相同的参数用不同的别名来命名
<param name="aliases">#{ 'foo' : 'bar' }</param>
foo参数的值将被赋予别名bar
Chaining Interceptor
该拦截器把所有value stack上的对象(除了那些实现了Unchainable接口的)拷贝到当前执行对象中(Action).可以定义includes和excludes分别指定需要或者不需要拷贝的参数,该拦截器一般和chain result结合使用.详细配置如下。
<action name="someAction" class="com.examples.SomeAction">
<interceptor-ref name="basicStack"/>
<result name="success" type="chain">otherAction</result>
</action>
<action name="otherAction" class="com.examples.OtherAction">
<interceptor-ref name="chain"/>
<interceptor-ref name="basicStack"/>
<result name="success">good_result.ftl</result>
</action>
Checkbox Interceptor
和hiddenfield一起解决checkbox在未选中情况下提交到服务器端时的数据丢失问题。
Cookie Interceptor
顾名思义用于把cookie的值注入到action中,从源代码中得到的规则如下
- 如果cookieName存在*,并且cookieValue为空或者存在*,注入所有的cookie到action.
- 如果cookieName为空,不获取和注入任何cookie,即使定义了CookieAware得到的cookiemap也是空的。
- 如果cookieName不为空其不含有*,那么只注入于cookiename对应的cookie,并且注入前还会根据定义的cookieValue判断是否需要注入该cookiename对应的值。
Conversion Error Interceptor
- 要想利用该interceptor,action类必须实现ValidationAware接口
- 把所有conversionErrors转化成对应action的fielderrors。
- 保存用户提交上来的原始值,通过preresultlistener的处理还原到action的value stack中.
Create Session Interceptor
- 从源码上看除了ServletActionContext.getRequest().getSession(true);这句没有其它的功能了。
DebuggingInterceptor
- 显示action运行的调试信息有如下调试类型xml,console,command,browser.
Execute and Wait Interceptor
- 用于在后台处理处理需要很长执行时间的请求,用于防止http超时问题。
- 拦截器必须放在最后
- 该拦截器实际于session实现的。
- 主要原理是先返回一个wait结果(如果action为定义wait结果,struts2会利用freemarker自动生成一个wait页面)给浏览器,然后启动一个后台线程单独处理action的请求,等待action请求处理完成后把结果返回给母线程。
- action对象会被推入stack的最顶层,使用stack.push方法.
- 可以定义显示wait页面的延迟时间,如果查询请求并不需要很长时间的话,就不需要显示wait页面。
Exception Interceptor
- 主要的目的就是把exception转化成result,而不是大expcetion trace直接打印到页面上,一来提高系统的安全性,二来提高用户体验。
- 当系统捕获异常,系统会利用ExceptionHolder把exception wrap一下推入statck以便resutl页面render的时候可以获取到对应的action的信息,或者直接输入trace。
File Upload Interceptor
- 基于MultiPartRequestWrapper,用于处理文件上传的请求
- 获取所有页面上的file字段的文件,并且把这些字段转化设置到request的parameters中,并添加了contenttype和filename属性。对应的setter为fieldNameContentType,fieldNameFileName.
I18n Interceptor
- 设置于用户session相关的locale信息,并且保存该locale信息。
- 处理流程为先从request_locale=en_US获取locale信息,然后从request的parameters中删除locale信息,并且保存到session中,并应用到所有的request中。
Logger Interceptor
- 记录action的start和stop信息,只有英文信息,不支持国际化。
Message Store Interceptor
- 主要功能是为了把action的message和error已经field error存储到session,以供后续的action获取这些信息。
- 可以定义三种operationmode STORE,RETRIEVE,NONE.
- RETRIEVE主要通过合并集合和map的方式实现。
Model Driven Interceptor
- 操作其实很简单,就是调用实现的了ModelDriven接口的Action的getModel方法,然后把getModel返回的对象压栈。
Scoped Model Driven Interceptor
- 实现该接口的action可以根据scope的定义,直接从objectfactory中初始化对象,对象的标示由name属性决定。
Parameters Interceptor
- 主要功能是把parametermaps上的param利用OGNL表达式设置到相应stack的action中。
- 还能设置拒绝设置某些恶意参数例如.,#=,等会影响OGNL执行的参数,已经用户通过实现ParameterNameAware接口定义acceptableParameterName中忽略的参数。
- 例外还需要的功能包括CreatingNullObjects,DenyMethodExecution,ReportingConversionErrors。
Prepare Interceptor
- action实现了Preparable接口
- 调用prepare开头的方法。
- 调用prepareDo开头的方法.
- 如果alwaysinvokePrepare设置为true(默认),那名总会调用prepare方法.
Scope Interceptor
- 设计该拦截器的目的是为了利用session,application在多个action之间传递值,以实现类似wizard的导航功能。
- 可以利用application或session或者同时利用两者传递值。
- 如果利用session传递,则在传递过程中会为session加锁。
- 如果action定义该拦截器的属性为start,那么session中对应的property的值会被设置成该action锁对应的属性的值。(sessionReset属性具有一样的效果)
- 如果action定义该拦截器的属性为end,那么session中对应的properties会被移除。
- 如果action中为定义任何start,end或者sessionReset属性,那么表示该action处于wizard的中间,action执行前会从session中导入所需要的property的值,action执行完后会把这些值导出到session中。
- 该interceptor本身实现了PreResultListener接口并且在intercept之后添加自己到action执行完,result render前执行从action中到处property到session或者删除session中的property操作。
Servlet Config Interceptor
- 用于向实现了特定接口的action中注入和servlet有关的对象,action可以实现的对应接口如下 ServletContextAware,ServletRequestAware,ServletResponseAware,ParameterAware,RequestAware,SessionAware,ApplicationAware,PrincipalAware.
Static Parameters Interceptor
- 把struts.xml中定义的该interceptor的params pair注入对应的action中,并且如果action实现了Parameterizable接口该interceptor也会把该paramsmap通过该接口的setParams注入到对应的action中。
Roles Interceptor
- 通过该拦截器调用request的isUserInRole方法实现
Timer Interceptor
- 放回action中的方法执行的时间。
Token Interceptor
- 用于判断是否重复提交表单。在页面上和token一起使用。
Token Session Interceptor
- 用于判断是否重复提交表单。在页面上和token一起使用,Token Interceptor的改进版本,当token验证失败的时候会返回上次成功的action的执行结果。
Validation Interceptor
- 处理表单验证的拦截器,该拦截器一般配置于最后或者倒数第二个action,因为在该拦截器调用前所有的actionproperty需要准备好。
- 该拦截器支持用户实现Validatable接口的validate方法或者validateXxx,validateDoXxx方法,规则和pareparable一致。
- 拦截器支持exclude和includemethod方法的配置
Workflow Interceptor
- 该拦截器的也是为了验证,不过该action只调用那些实现了validatable或者ValidationAware接口的validateXxx,validate,validateDoXxx方法,并且判断是否有某个action,hasErrors()如果有直接打断action chain并且返回Input作为结果。
- 但是实际代码感觉和文档描述的有点不一致,实际代码只检查实现了ValidationAware的action的hasError方法.
Parameter Filter Interceptor
- 用于过滤哪些参数不需要,那些参数需要注入到action中。
- defaultBlock默认为false如果设置成true只有allow列表中的开头的parameter才能注入到action,
- allow和block的方式都是以字符串开头为规则例如person会block,person.name等等的字段。但是如果allow中定义了person.address那么该parameter可以通过。
Profiling Interceptor
- 用于打开系统性能检测功能。
MethodFilterInterceptor
- 所有继承该interceptor的拦截器都可以通过定义excludeMethods ,includeMethods来过滤拦截器需要拦截的方法,文档中解释说includeMethods比较优先,但是从代码上看感觉应该是excludeMethods比较优先,代码如下
if (((excludeMethods.contains("*") && !includeMethods.contains("*"))
|| excludeMethods.contains(method))
&& !includeMethods.contains(method)) {
return false;
}
return includeMethods.size() == 0 || includeMethods.contains(method) || includeMethods.contains("*");
有空写个测试用例测试一下。
发表评论
- 浏览: 7969 次
- 性别:

- 来自: 福建福州

- 详细资料
搜索本博客
最新评论
-
struts2实践- 结合jquery ...
客户端和服务端配合验证的方案有吗?
-- by hotdog -
struts2实践- 结合jquery ...
只用js验证很不保险,服务端验证不可少
-- by kjj -
struts2实践- 结合jquery ...
jquery 比较耗资源~
-- by happy002 -
struts2实践-页面分页的 ...
能发一个吗 谢谢 dawnco@163.com
-- by adapt -
struts2实践- 结合jquery ...
long_jianxiu 写道不晓得有没有完整的代码,我现在弄的一头雾水的,不知 ...
-- by luckaway






评论排行榜