第四章 Adding workflow with interceptor(上)
1. Interceptor接口的三个方法:
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
抽象类AbstractInterceptor实现了Interceptor接口
abstract class AbstractInterceptor implements Interceptor
2. timer拦截器,用于记录执行的时间
3. logger拦截器,用于在执行前和执行后打印出信息
4. params拦截器(defaultStack),通过ValueStack将request parameters保存到属性中
5. staticParams拦截器(defaultStack),将配置文件中设置的参数通过ValueStack保存到属性中,在defaultStack中位于params拦截器前面,因此request parameters会覆盖配置文件中的parameters。
如下所示:
<action name="exampleAction" class="example.ExampleAction">
<param name="firstName">John</param>
<param name="lastName">Doe</param>
</action>
6. servlet-config拦截器(defaultStack),用于将各种Servlet API注入到action中,
ServletContextAware—Sets the ServletContext
ServletRequestAware—Sets the HttpServletRequest
ServletResponseAware—Sets the HttpServletResponse
ParameterAware—Sets a map of the request parameters
RequestAware—Sets a map of the request attributes
SessionAware—Sets a map of the session attributes
ApplicationAware—Sets a map of application scope properties
PrincipalAware—Sets the Principal object (security)
只要action继承了这些接口,实现相应的Setter方法,都可以实现注入
7. fileupload拦截器(defaultStack),将文件的三个属性,File,ContentType,Filename保存到request parameters中去,使得文件的这些属性可以像基本的request parameters那样保存到action或者域模型中去,因此这个拦截器在defualtStack中位于staticParams和params拦截器之前
8. workflow拦截器(defaultStack),用于做数据校验,DefaultWorkflowInterceptor继承MethodFilterInterceptor,MethodFilterInterceptor类用doIntercept()方法封装了intercept(),主要是添加了一个方法过滤。
Action只要实现了Validateable接口,都可以通过validate()方法进行数据校验(如何校验,用户自己实现)
实现了ValidationAware接口,可以通过判断ValidationAwareSupport中是否有错误内容而进行重定向到INPUT,(ValidationAwareSupport实现了ValidationAware接口,主要保存actionErrors、actionMessages、fieldErrors等这些错误信息,ActionSupport中有该类的一个实例)
workflow拦截器在defualtStack中位于最后
workflow拦截器的几个参数
alwaysInvokeValidate (true or false; defaults to true, which means that validate() will be invoked)
inputResultName (name of the result to choose if validation fails; defaults to Action.INPUT)
excludeMethods (names of methods for which the workflow interceptor shouldn’t execute, thereby omitting validation checking for a specific entry point method on an action)
9. validation拦截器(defaultStack),区别于workflow校验器,主要是在XML或者Java annotations中定义校验规则(AnnotationValidationInterceptor继承ValidationInterceptor)
validation拦截器在defualtStack中位于workflow拦截器之前
10. prepare拦截器(defaultStack),需要action实现Preparable接口,如果加载prepare拦截器,prepare()方法会在execute()方法调用前被调用(无论execute()方法是否被invoke)
Action可以除了execute(),还可以有其他的方法,例如input(),update(),则prepare可以采用
prepareInput()或prepareDoInput()、prepareupdate()或prepareDoUpdate()方法来对应action的执行方法(采用prepare,prepareDo作为前缀)
prepare拦截器的参数
alwaysInvokePrepare - Default to true.设置为false可以关闭prepare()方法。
11. modelDriven拦截器(defaultStack),将Model放入ValueStack中
modelDriven拦截器位于prepare拦截器之后params拦截器之前
12. exception拦截器(defaultStack),在defaultStack中位于第一位,捕获异常定位到用户定义的错误页面
例如在struts.xml配置文件中定义全局的result映射处理异常情况
<package name="chapterFourPublic" namespace="/chapterFour" extends="struts-default">
……
<!--package中的全局result映射 -->
<global-results>
<result name="error">/chapterFour/Error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error" />
</global-exception-mappings>
……
</package>
然后在error.jsp中的内容如下,用户显示异常
<p><h4>Exception Name: </h4><s:property value="exception" /></p>
<p><h4>What you did wrong:</h4> <s:property value="exceptionStack" /></p>
13. token&tokenSession拦截器,用于防止重复提交
14. scopedModelDriven拦截器(defaultStack),
15. execAndWait拦截器,长时间执行请求,给用户一个feedback
分享到:
相关推荐
### Struts2_Action 学习笔记与通配符配置详解 #### 一、Struts2简介及简单配置 Struts2是一个基于Java EE平台的开源Web应用框架,它继承了Struts1的优点,并在此基础上进行了大量的改进。Struts2的核心功能之一是...
- **原理**:Struts2 的拦截器会在 Action 执行完成后,调用 getter 方法并将结果存储到适当的范围对象中。 **3.4 请求转发与重定向** - **转发**:Action 的 execute 方法返回一个字符串,根据这个字符串找到对应...
本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...
笔记中可能详细讲解了Struts2的配置文件,如struts.xml,它是整个应用的配置中心,定义了Action的映射、结果类型、拦截器栈等。在Action配置中,我们可以指定Action类、方法以及对应的URL路径,实现请求与业务的关联...
13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...
本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...
本课程笔记主要涵盖了Struts2的基础概念、核心功能及其工作流程。 首先,Struts2的处理流程是通过一系列的组件协作完成的,包括Filter Dispatcher(过滤器调度器)、Action、Interceptor(拦截器)和Result。当用户...
### 魔乐科技Struts2.x框架笔记详解 #### 一、框架开发基础与特性 **框架开发来源**:框架开发的核心在于反射机制的应用,它使得开发者能够以更为灵活的方式构建应用程序。在Struts2.x框架中,这一点体现得尤为...
这篇读书笔记主要涵盖了Struts2的核心概念和配置细节,对于初学者来说,是理解Struts2工作原理和配置的宝贵资料。 1. Package配置: 在Struts2中,`<package>`元素用来组织和配置相关的Action。`name`属性定义了包...
本笔记主要涵盖了Struts2的基础知识,包括但不限于配置、Action、拦截器、结果类型以及异常处理等内容。 1. **Struts2框架简介** Struts2是Apache软件基金会的一个开源项目,它是Struts1的升级版,弥补了Struts1在...
3. **定义struts.xml**:在classpath中放置struts.xml文件,这是Struts2的核心配置文件,用于声明包、结果类型、拦截器以及Action等元素。 4. **创建视图和控制器**:在项目中编写JSP页面作为视图,同时定义Action类...
### Struts2 技术内幕读书笔记(1) #### WEB开发浅谈 ##### 面向对象浅谈 面向对象编程(Object-Oriented Programming,OOP)是一种软件开发范式,它通过模拟现实世界中的对象及其交互来构建程序结构。这种编程...
本文将深入探讨Struts2的核心概念,包括Namespace、标签、Action以及它们在实际开发中的应用。 一、Namespace Namespace在Struts2中主要用于组织和隔离Action,它决定了Action的访问路径。默认情况下,Namespace为...
3. **使用Struts2进行下载**:通过设置Action的结果类型为`stream`,并提供文件流,Struts2可以生成下载链接。 **六.Struts2的属性驱动和模型驱动** 1. **属性驱动**:Action类中的字段直接对应请求参数,Struts2...
### Struts2 综合知识点解析 #### 一、Struts2 概述与历史背景 **Struts2** 是一款流行的 Java Web 开发框架,它遵循 MVC (Model-View-Controller) 设计模式,旨在简化 Web 应用程序的开发过程。Struts2 提供了一...
### Struts2学习笔记之文件上传与Ajax开发 #### Struts2文件上传 **文件上传简介** 文件上传是Web应用中常见的功能之一,Struts2框架内置了对文件上传的支持,使得开发者能够轻松地实现这一功能。为了确保文件...
2. **Package**:包是Struts2中的一个关键概念,用于组织相关的Action和结果(Result)。包可以继承其他包,从而实现配置的复用和分层。`package`标签的属性包括name、extends、namespace等,其中,namespace用于...
本篇超详细学习笔记将带你逐步深入理解Struts2的核心概念和运作机制。 首先,让我们了解Struts2的基本特性。Struts2是一个基于Servlet的框架,它通过将JSP作为视图(View),Servlet作为控制器(Controller),并将...
3. **Action执行**: Struts2内核解析请求并定位到相应的Action类进行执行。 4. **结果处理**: 执行完成后,根据Action的返回值选择相应的`<result>`配置来确定下一步动作。 #### Struts2分模块开发 为了更好地组织...
3. **匹配Action**: Struts2根据配置文件找到对应的Action,创建Action实例。 4. **执行拦截器链**: 拦截器按照配置顺序逐个执行,可以进行预处理、AOP(面向切面编程)等操作。 5. **调用Action方法**: 当拦截器链...