- 浏览: 675368 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
AOP 中的 aspect 在不同的框架下表示的意思不同:
Java 代理:服务
Spring : advice
Struts :拦截器
Struts 中拦截器是 AOP ( Aspect-Oriented Programming )思想的体现:
1 、将与业务无关的解决特定领域问题(日志、安全、事务 … )的代码从程序流程中分离出来,以切面的方式挂载到主流程的执行点
2 、集中管理横切关注点代码
3 、提高架构分层级别
Struts2 拦截器的功能:
1 、拦截器是 Struts2 的基石;
2 、 Struts2 通过丰富的内置拦截器实现了清洁的 MVC 分层;
3 、 Struts2 的大多数功能都是通过拦截器提供的(表单数据映射,数据校验,国际化,文件上传等等);
4 、 Struts2 允许开发者自定义拦截器(权限验证,日志,事务处理)
5 、 Struts2 插件扩展基本上都是通过拦截器实现的
拦截器机制:
1 、拦截 Action 的执行,为其添加预处理和后处理过程
2 、 ActionInvocation , Action 调度器,实现拦截器与 Action 的 cross-cut (横切)
ActionInvocation 说明:
执行过程 :
1 、 Struts 根据请求的 URL 创建对应的 Action 对象,并为其创建 ActionInvocation 实例;
2 、根据配置文件查找应当触发的拦截器和执行顺序,并添加到 ActionInvocation 对象中;
3 、 ActionInvocation 的 invoke() 方法被触发;
逐个调用 interceptor 的 intercep() 方法
调用预处理方法
递归调用 ActionInvocation 的 invoke 方法
调用后处理方法
4 、执行 Action ,获取 result ;
5 、执行 inteceptor 中注册的 preResultListeners ;
6 、执行 Result ;
为了理解清楚,我们再看看 Action 的生命周期:
Interceptors
<package name="default" extends="struts-default"> <interceptors> <interceptor name="timer" class=".."/> <interceptor name="logger" class=".."/> </interceptors> <action name="login" class="tutorial.Login"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <result name="input">login.jsp</result> <result name="success" type="redirectAction">/secure/home</result> </action> </package>
Stacking Interceptors
拦截器栈:
拦截器栈指定包含的拦截器引用和执行顺序,便于使用
内置拦截器栈
basicStack : Struts2 提供了最常用的栈,提供了异常处理,将 HTTP 对象和请求 / 表单参数注入 action ,和处理转换错误的功能;
validationWorkflowStack :向 basic 栈中添加验证和工作流的功能;
fileUploadStack :向 basic 栈中添加对自动文件上传的支持;
defaultStack :这是默认的栈,它为绝大多数的应用场景提供了所有的功能,实际上,他包括了核心发布版中几乎所有的可用拦截器;
<package name="default" extends="struts-default"> <interceptors> <interceptor name="timer" class=".."/> <interceptor name="logger" class=".."/> <interceptor-stack name="myStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> </interceptor-stack> </interceptors> <action name="login" class="tutuorial.Login"> <interceptor-ref name="myStack"/> <result name="input">login.jsp</result> <result name="success" type="redirectAction">/secure/home</result> </action> </package>
Demo
MyInterceptor.java
package org.lxh.interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; /** * @author xudongwang 2011-5-13 * */ public class MyInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { System.out.println("拦截器之前。。。。"); String result = invocation.invoke(); System.out.println("拦截器之后。。。。"); return result; } }
说明:
invocation.invoke(); 传递拦截器链,即继续执行其他的拦截器
此方法返回后续拦截器执行的 result ;
在此方法前进行预处理;
在此方法后处理后处理;
Struts.xml:
<interceptors> <interceptor name="myInterceptor" class="org.lxh.interceptor.MyInterceptor"></interceptor> </interceptors> <action name="hello-world" class="org.lxh.action.UserAction" method="hello"> <interceptor-ref name="myInterceptor"></interceptor-ref> <result>/hello_struts2.jsp</result> </action>
Struts2 提供的拦截器可以在 struts2-core-2.1.8.1.jar 包下的 struts-default.xml 查看关于默认的拦截器与拦截器链的配置。
<?xml version="1.0" encoding="UTF-8" ?> <!-- /* * $Id$ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" "http://struts.apache.org/dtds/struts-2.1.7.dtd"> <struts> <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" /> <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" /> <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="xwork" class="com.opensymphony.xwork2.DefaultActionProxyFactory"/> <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class="org.apache.struts2.impl.StrutsActionProxyFactory"/> <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="tiger" class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/> <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="notiger" class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/> <bean type="com.opensymphony.xwork2.conversion.ObjectTypeDeterminer" name="struts" class="com.opensymphony.xwork2.conversion.impl.DefaultObjectTypeDeterminer"/> <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="struts" class="com.opensymphony.xwork2.util.WildcardHelper" /> <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="namedVariable" class="com.opensymphony.xwork2.util.NamedVariablePatternMatcher"/> <bean type="com.opensymphony.xwork2.util.PatternMatcher" name="regex" class="org.apache.struts2.util.RegexPatternMatcher"/> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" /> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" /> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" /> <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" /> <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="struts" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default"/> <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" /> <constant name="struts.multipart.handler" value="jakarta" /> <bean type="org.apache.struts2.views.TagLibrary" name="s" class="org.apache.struts2.views.DefaultTagLibrary" /> <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" /> <bean class="org.apache.struts2.views.velocity.VelocityManager" name="struts" optional="true" /> <bean class="org.apache.struts2.components.template.TemplateEngineManager" /> <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" /> <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" /> <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" /> <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" /> <bean type="com.opensymphony.xwork2.conversion.impl.XWorkConverter" name="xwork1" class="com.opensymphony.xwork2.conversion.impl.XWorkConverter" /> <bean class="com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter" /> <bean type="com.opensymphony.xwork2.TextProvider" name="xwork1" class="com.opensymphony.xwork2.TextProviderSupport" scope="default" /> <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="default" /> <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/> <bean type="com.opensymphony.xwork2.util.ValueStackFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlValueStackFactory" /> <bean type="com.opensymphony.xwork2.util.reflection.ReflectionProvider" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionProvider" /> <bean type="com.opensymphony.xwork2.util.reflection.ReflectionContextFactory" name="struts" class="com.opensymphony.xwork2.ognl.OgnlReflectionContextFactory" /> <bean type="com.opensymphony.xwork2.TextProvider" name="system" class="com.opensymphony.xwork2.DefaultTextProvider" /> <bean type="com.opensymphony.xwork2.conversion.NullHandler" name="java.lang.Object" class="com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler" /> <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="struts" class="com.opensymphony.xwork2.validator.AnnotationActionValidatorManager" /> <bean type="com.opensymphony.xwork2.validator.ActionValidatorManager" name="no-annotations" class="com.opensymphony.xwork2.validator.DefaultActionValidatorManager" /> <bean type="com.opensymphony.xwork2.validator.ValidatorFactory" class="com.opensymphony.xwork2.validator.DefaultValidatorFactory"/> <bean type="com.opensymphony.xwork2.validator.ValidatorFileParser" class="com.opensymphony.xwork2.validator.DefaultValidatorFileParser" /> <bean class="com.opensymphony.xwork2.ognl.OgnlUtil" /> <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" /> <bean type="ognl.PropertyAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.ObjectAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.Iterator" class="com.opensymphony.xwork2.ognl.accessor.XWorkIteratorPropertyAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.Enumeration" class="com.opensymphony.xwork2.ognl.accessor.XWorkEnumerationAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.List" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.Set" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.Map" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.Collection" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> <bean type="ognl.PropertyAccessor" name="com.opensymphony.xwork2.ognl.ObjectProxy" class="com.opensymphony.xwork2.ognl.accessor.ObjectProxyPropertyAccessor" /> <bean type="ognl.MethodAccessor" name="java.lang.Object" class="com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor" /> <bean type="ognl.MethodAccessor" name="com.opensymphony.xwork2.util.CompoundRoot" class="com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor" /> <bean class="org.apache.struts2.views.jsp.ui.OgnlTool" /> <bean type="org.apache.struts2.dispatcher.StaticContentLoader" class="org.apache.struts2.dispatcher.DefaultStaticContentLoader" name="struts" /> <bean type="com.opensymphony.xwork2.UnknownHandlerManager" class="com.opensymphony.xwork2.DefaultUnknownHandlerManager" name="struts" /> <!-- Silly workarounds for OGNL since there is currently no way to flush its internal caches --> <bean type="ognl.PropertyAccessor" name="java.util.ArrayList" class="com.opensymphony.xwork2.ognl.accessor.XWorkListPropertyAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.HashSet" class="com.opensymphony.xwork2.ognl.accessor.XWorkCollectionPropertyAccessor" /> <bean type="ognl.PropertyAccessor" name="java.util.HashMap" class="com.opensymphony.xwork2.ognl.accessor.XWorkMapPropertyAccessor" /> <package name="struts-default" abstract="true"> <result-types> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/> <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/> <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /> </result-types> <interceptors> <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/> <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/> <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/> <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/> <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/> <interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" /> <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" /> <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" /> <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/> <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/> <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/> <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/> <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/> <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/> <interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/> <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/> <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/> <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/> <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/> <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/> <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/> <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/> <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/> <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/> <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" /> <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" /> <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" /> <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" /> <interceptor name="jsonValidation" class="org.apache.struts2.interceptor.validation.JSONValidationInterceptor" /> <interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" /> <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor" /> <!-- Basic stack --> <interceptor-stack name="basicStack"> <interceptor-ref name="exception"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> </interceptor-stack> <!-- Sample validation and workflow stack --> <interceptor-stack name="validationWorkflowStack"> <interceptor-ref name="basicStack"/> <interceptor-ref name="validation"/> <interceptor-ref name="workflow"/> </interceptor-stack> <!-- Sample JSON validation stack --> <interceptor-stack name="jsonValidationWorkflowStack"> <interceptor-ref name="basicStack"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel</param> </interceptor-ref> <interceptor-ref name="jsonValidation"/> <interceptor-ref name="workflow"/> </interceptor-stack> <!-- Sample file upload stack --> <interceptor-stack name="fileUploadStack"> <interceptor-ref name="fileUpload"/> <interceptor-ref name="basicStack"/> </interceptor-stack> <!-- Sample model-driven stack --> <interceptor-stack name="modelDrivenStack"> <interceptor-ref name="modelDriven"/> <interceptor-ref name="basicStack"/> </interceptor-stack> <!-- Sample action chaining stack --> <interceptor-stack name="chainStack"> <interceptor-ref name="chain"/> <interceptor-ref name="basicStack"/> </interceptor-stack> <!-- Sample i18n stack --> <interceptor-stack name="i18nStack"> <interceptor-ref name="i18n"/> <interceptor-ref name="basicStack"/> </interceptor-stack> <!-- An example of the paramsPrepareParams trick. This stack is exactly the same as the defaultStack, except that it includes one extra interceptor before the prepare interceptor: the params interceptor. This is useful for when you wish to apply parameters directly to an object that you wish to load externally (such as a DAO or database or service layer), but can't load that object until at least the ID parameter has been loaded. By loading the parameters twice, you can retrieve the object in the prepare() method, allowing the second params interceptor to apply the values on the object. --> <interceptor-stack name="paramsPrepareParamsStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="i18n"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="servletConfig"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack> <!-- A complete stack with all the common interceptors in place. Generally, this stack should be the one you use, though it may do more than you need. Also, the ordering can be switched around (ex: if you wish to have your servlet-related objects applied before prepare() is called, you'd need to move servletConfig interceptor up. This stack also excludes from the normal validation and workflow the method names input, back, and cancel. These typically are associated with requests that should not be validated. --> <interceptor-stack name="defaultStack"> <interceptor-ref name="exception"/> <interceptor-ref name="alias"/> <interceptor-ref name="servletConfig"/> <interceptor-ref name="i18n"/> <interceptor-ref name="prepare"/> <interceptor-ref name="chain"/> <interceptor-ref name="debugging"/> <interceptor-ref name="scopedModelDriven"/> <interceptor-ref name="modelDriven"/> <interceptor-ref name="fileUpload"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="multiselect"/> <interceptor-ref name="staticParams"/> <interceptor-ref name="actionMappingParams"/> <interceptor-ref name="params"> <param name="excludeParams">dojo\..*,^struts\..*</param> </interceptor-ref> <interceptor-ref name="conversionError"/> <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods">input,back,cancel,browse</param> </interceptor-ref> </interceptor-stack> <!-- The completeStack is here for backwards compatibility for applications that still refer to the defaultStack by the old name --> <interceptor-stack name="completeStack"> <interceptor-ref name="defaultStack"/> </interceptor-stack> <!-- Sample execute and wait stack. Note: execAndWait should always be the *last* interceptor. --> <interceptor-stack name="executeAndWaitStack"> <interceptor-ref name="execAndWait"> <param name="excludeMethods">input,back,cancel</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <interceptor-ref name="execAndWait"> <param name="excludeMethods">input,back,cancel</param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="defaultStack"/> <default-class-ref class="com.opensymphony.xwork2.ActionSupport" /> </package> </struts>
下面列一个表格简单说明一下:
拦截器 |
名字 |
说明 |
Alias Interceptor |
alias |
在不同请求之间将请求参数在不同名字件转换,请求内容不变 |
Chaining Interceptor |
chain |
让前一个 Action 的属性可以被后一个 Action 访问,现在和 chain 类型的 result ( <result type=”chain”> )结合使用。 |
Checkbox Interceptor |
checkbox |
添加了 checkbox 自动处理代码,将没有选中的 checkbox 的内容设定为 false ,而 html 默认情况下不提交没有选中的 checkbox 。 |
Cookies Interceptor |
cookies |
使用配置的 name,value 来是指 cookies |
Conversion Error Interceptor |
conversionError |
将错误从 ActionContext 中添加到 Action 的属性字段中。 |
Create Session Interceptor |
createSession |
自动的创建 HttpSession ,用来为需要使用到 HttpSession 的拦截器服务。 |
Debugging Interceptor |
debugging |
提供不同的调试用的页面来展现内部的数据状况。 |
Execute and Wait Interceptor |
execAndWait |
在后台执行 Action ,同时将用户带到一个中间的等待页面。 |
Exception Interceptor |
exception |
将异常定位到一个画面 |
File Upload Interceptor |
fileUpload |
提供文件上传功能 |
I18n Interceptor |
i18n |
记录用户选择的 locale |
Logger Interceptor |
logger |
输出 Action 的名字 |
Message Store Interceptor |
store |
存储或者访问实现 ValidationAware 接口的 Action 类出现的消息,错误,字段错误等。 |
Model Driven Interceptor |
model-driven |
如果一个类实现了 ModelDriven ,将 getModel 得到的结果放在 Value Stack 中。 |
Scoped Model Driven |
scoped-model-driven |
如果一个 Action 实现了 ScopedModelDriven ,则这个拦截器会从相应的 Scope 中取出 model 调用 Action 的 setModel 方法将其放入 Action 内部。 |
Parameters Interceptor |
params |
将请求中的参数设置到 Action 中去。 |
Prepare Interceptor |
prepare |
如果 Acton 实现了 Preparable ,则该拦截器调用 Action 类的 prepare 方法。 |
Scope Interceptor |
scope |
将 Action 状态存入 session 和 application 的简单方法。 |
Servlet Config Interceptor |
servletConfig |
提供访问 HttpServletRequest 和 HttpServletResponse 的方法,以 Map 的方式访问。 |
Static Parameters Interceptor |
staticParams |
从 struts.xml 文件中将 <action> 中的 <param> 中的内容设置到对应的 Action 中。 |
Roles Interceptor |
roles |
确定用户是否具有 JAAS 指定的 Role ,否则不予执行。 |
Timer Interceptor |
timer |
输出 Action 执行的时间 |
Token Interceptor |
token |
通过 Token 来避免双击 |
Token Session Interceptor |
tokenSession |
和 Token Interceptor 一样,不过双击的时候把请求的数据存储在 Session 中 |
Validation Interceptor |
validation |
使用 action-validation.xml 文件中定义的内容校验提交的数据。 |
Workflow Interceptor |
workflow |
调用 Action 的 validate 方法,一旦有错误返回,重新定位到 INPUT 画面 |
Parameter Filter Interceptor |
N/A |
从参数列表中删除不必要的参数 |
Profiling Interceptor |
profiling |
通过参数激活 profile |
ok,struts2.2的拦截器就搞这么多。
发表评论
-
Struts2标签与JSTL标签混用
2012-07-16 00:07 2992项目中遇到JSTL标签(需要standard.jar和jstl ... -
Struts2.2 OGNL
2012-06-29 01:54 1849OGNL ,作为Struts2 一大亮点,感觉也是 ... -
NoClassDefFoundError: org/apache/commons/io/FileUtils
2012-06-27 00:58 4723在做Struts Demo中出现: Exception ... -
Struts2.2 Tags
2012-06-28 00:48 1842Struts2 标签,这玩意没什么可说的,直接把以前做的 ... -
Struts2.2 Type Conversion
2012-06-26 23:51 2133Struts2 的转换器: ... -
Struts2.2 Localization
2012-06-25 23:55 1712今天来说说Struts2 ... -
Struts2.2 Validation
2012-06-11 00:59 2819数据验证的方式: ... -
Struts2.2 Results Types
2012-06-10 01:11 1684视图返回类型详细的信息可以查看 struts2-c ... -
Struts2.2 Action
2012-06-09 00:13 1825在说 Struts2 中的 Actio ... -
Struts2.2 Configuration
2012-06-07 23:39 1999在前面的 Struts2.2 CURD Dem ... -
Struts2.2入门By CRUD
2012-06-06 21:49 2364SSH中Struts可谓是比较 ...
相关推荐
Struts2.2和SSH是Java Web开发中的两个重要框架,它们在构建高效、可维护的Web应用程序中扮演着核心角色。Struts2是一个强大的MVC(Model-View-Controller)框架,而SSH则通常指的是Struts2、Spring和Hibernate的...
4. **拦截器(Interceptors)**:拦截器是Struts 2的核心特性之一,它们在Action执行前后进行拦截,实现诸如日志记录、事务管理、权限检查等跨切面的功能。 5. **配置文件**:Struts 2的配置通常在`struts.xml`文件...
Struts2.2.1.1.chm帮助文档是一个针对Apache Struts 2框架的官方指南,该框架是Java平台上广泛使用的MVC(Model-View-Controller)架构的一部分,用于构建企业级Web应用程序。这个CHM(Compiled HTML Help)文件包含...
Struts2.2.3.1是Apache Struts框架的一个版本,它是一个开源的MVC(Model-View-Controller)框架,广泛应用于Java Web开发中。这个帮助文档提供了该版本Struts框架的详细指南和API参考,对于开发者来说是极其宝贵的...
Struts2.2入门By CRUD 是一个针对初学者的教程,旨在帮助他们了解如何使用Struts2框架进行基本的创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,即CRUD操作。这个教程可能包含了源代码示例和...
3. **拦截器(Interceptors)**: 拦截器是Struts 2中的重要组件,可以实现诸如日志、权限检查、数据校验等通用功能,它们按照定义的顺序在Action执行前后进行处理。 4. **OGNL(Object-Graph Navigation Language)**: ...
此外,Struts 2的拦截器(Interceptors)机制提供了AOP(面向切面编程)功能,允许在Action执行前后插入自定义逻辑,如日志记录、权限检查等。 在视图层,Struts 2与JSP和FreeMarker等模板技术无缝集成。开发者可以...
Struts2的2.2.3.1版本是一个重要的里程碑,它包含了Struts2框架的核心组件和其他依赖库,为开发者提供了完整的开发环境。 首先,让我们详细了解Struts2框架的关键特性: 1. **Action和Result**:Struts2的核心是...
2. **拦截器(Interceptors)**:拦截器是Struts2强大的功能之一,它们在动作执行前后按顺序执行,可以实现如事务管理、权限验证、日志记录等通用功能。 3. **结果类型(Result Types)**:Struts2支持多种结果类型...
Struts2.2.3.1是该框架的一个特定版本,包含了一些改进和修复,旨在提高性能和稳定性。 在Struts2.2.3.1手册.chm中,我们可以找到关于这个版本的详尽指南和API参考。这份文档是开发者理解和使用Struts2框架的重要...
2. **拦截器(Interceptors)**:Struts 2使用拦截器来处理请求,如日志、事务管理和验证。拦截器链允许开发者在不修改Action代码的情况下添加额外的功能。 3. **OGNL(Object-Graph Navigation Language)**:...
4. **依赖库**:包括ognl.jar,它是一种强大的对象导航语言,用于表达Action和Interceptors之间的数据绑定。struts2-json-plugin.jar提供了JSON支持,使应用程序能与Ajax和RESTful API通信。 5. **Spring集成**:...
2. **拦截器(Interceptors)**:Struts2的一个核心特性是拦截器,它们是实现AOP(面向切面编程)的一种方式。拦截器链可以定义在配置文件中,用于在Action执行前后执行特定的任务,如日志记录、权限检查、数据验证...
最后,`struts2_2_actionDefaultConfig`这个文件名可能指的是针对Struts2.2版本的Action默认配置相关示例或教程。Struts2的不同版本可能有一些细微差异,所以这份学习资料可能关注的是特定版本的最佳实践。 总的来...
2. Interceptors(拦截器):拦截器是Struts2的一大特色,它们定义了一系列预定义和自定义的行为,如日志、异常处理、事务管理等。拦截器按预定义顺序执行,形成一个执行链。 3. Result:结果表示Action执行后的...
##### 2.2 struts.xml配置 - `struts.xml`是Struts2的核心配置文件,用于定义包(Package)、Action及其映射等。一个简单的示例配置如下: ```xml <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD...
尽管这个教程是基于Struts2.0,但是理解这些基本概念对于学习更新的版本如Struts2.1、2.2等非常重要。随着版本的升级,Struts2引入了更多的改进和优化,例如更强大的拦截器、更好的性能以及对注解的支持。然而,核心...
3. **拦截器(Interceptors)**:拦截器是Struts2的一个重要概念,它们是按照预定义的顺序在Action调用前后执行的一系列功能模块。拦截器可以用于日志记录、权限验证、事务管理等场景。 4. **结果类型(Result ...
例如,通过元素定义Action,通过<interceptors>配置拦截器栈,通过定义Action执行后的结果跳转。 五、版本迭代 xwork-core-2.2.1.1是XWork的一个版本,相比早期版本,它可能包含了一些新的功能、性能优化或bug修复...
**2.2 Struts1的MVC实现** Struts1的MVC实现基于ActionForm、Action、ActionServlet等核心组件。ActionForm用于封装请求参数,Action负责业务逻辑处理,ActionServlet作为控制器负责调度。 **2.3 Struts2的简单...