from: http://www.cnblogs.com/bianshencho/archive/2009/09/27/1575082.html
对于RequestProcessor这个类,有的人可能很陌生,毕竟它不象ActionSerlvet那样,在我们的面前频繁的出现。但是,RequestProcessor用的要远比ActionServlet多,那么RequestProcessor到底是干什么的呢?当ActionServlet接收到客户请求后,会进行一连串的初始化操作,然后,就会将客户请求转交给合适的处理器进行处理,这个合适的处理器就是org.apache.struts.action.RequestProcessor。既然我们知道了RequestProcessor的用处,下面我们就详细的分析下这个处理器类。
1.调用processMultipart()方法,如果HttpServletRequest是POST方式,且请求为multipart/form-data ,Struts框架将请求对象包装成处理multipart 请求专用的请求对象,否则,只是简单地返回原有的请求对象。一般来说,除非需要处理文件上传,否则不用关心multipart 功能的具体细节。
2.调用processPath()方法,该方法用来从请求URL中获应用取路径部分。获取到的信息在稍后的步骤中用于选择合适的Struts Action调用。
3.调用processLocale()方法,处理一些国际化的事务。
4.调用方法processContent(),来决定请求的content type编码(encoding)方式。content type可以配合在配置文件中,也可以在jsp文件中配置,默认为text/html。
5.根据noCache属性的设置调用processNoCache() 方法,如果noCache设置为true。则添加合适的响应头到响应对象中,使得页面保留在浏览器的Cache中。这些响应头包含Pragma, Cache-Control, 和Expires 。
6.调用processPreprocess()方法,这个方法在这儿设置一个钩子,方法的默认实现只是简单地返回true,这样给了自定义处理器的开发者提供了一个合适的地方让你添加自己的业务逻辑。因为这个方法在调用Action之前被调用,如果你重载这个方法,只需要返回false,则Action就不会被调用。例如,你可以重载这个方法用户检查客户session,如果不通过就返回false。
7.调用processMapping()方法,根据客户请求信息中的path 信息来决定是否返回ActionMapping对象实例。如果不能够找到path 的映射,则客户将会得到一个error 响应。
8.通过调用processRoles()方法,检查是否为Action配置了安全角色。
如果配置了角色要求,则请求对象的isUserInRole()方法被调用,如果用户属于这些角色,则客户会得到显示一个error 响应。
9.调用processActionForm()方法,检查是否存在为ActionMapping配置的ActionForm 。如果存在,则在有效区域内查找是否存在该ActionForm 的实例,存在,则复用,不存在,则创建一个实例。然后将实例保存与再配置文件中配置好的有效区域(request,session,application)内,并用Action元素的name属性作为该实例的关键字。
10.调用processPopulate()方法,如果存在为ActionMapping配置的ActionForm,则封装请求对象中的数据到ActionForm 中,在进行封装之前,先调用ActionForm 的reset()方法进行属性值的默认化。
11.调用processValidate()方法,如果ActionForm被配置好,并且action元素的属性validate被设置为true ,则进一步调用validate()方法进行规则校验。如果validate()方法校验失败,就会保存一个ActionErrors 对象到请求区域中,请求将会自动重定向到action映射的input属性所指定的页面中。如果校验通过或在action 映射中没有配置ActionForm,则继续处理请求。
12.根据action 映射是否配置了forward属性或include属性来决定下一步操作。如果配置了任意一个,则相应地调用RequestDispatcher对象的forward()方法或include()方法,调用后,对客户请求的处理结束。否则,继续处理请求。
13.调用processActionCreate()方法,创建或获取一个Action对象实例处理请求。processActionCreate()方法会在缓存中查找是否存在已经创建好的Action实例,如果存在,则复用,否则,则重新创建并将其村于缓存中。
14.调用processActionPerform()方法,该方法用于在一个try/catch 代码块中调用action 实例的execute()方法,这样确保action 的execute()方法一旦发生执行异常能够被RequestProcessor捕获。
15.调用processActionForward()方法,并传入action的execute()方法所返回的ActionForward对象实例,方法通过检查ActionForward对象实例,决定采用redirect或forword方式进行重定向。究竟采用redirect还是
forword取决于forward元素的redirect属性值。
在实际的应用开发中,如果我们想对Struts在初始化的时候进行一些扩展,我们可以重新写ActionServlet的子类,或RequestProcessor的子类,但是不建议去写ActionServlet的子类,在RequestProcessor中为我们提供了processPreprocess()这个钩子方法,这样,我们可以去重写这个方法,来进行扩展。虽然RequestProcessor在表面上不是很常用到,但是他给人的感觉却恰恰相反,这个类用来处理我们每一次的请求,所以,更好的了解RequestProcessor类对我们来说很重要。
分享到:
相关推荐
2. **RequestProcessor组件**: RequestProcessor是每个子应用模块的请求处理器,它才是真正执行处理工作的核心。在调用Action的execute方法之前,RequestProcessor会执行一些预处理任务。开发者可以通过扩展...
如果你要进行java开发可以下载这个资源使用,这个不错,可以试一试。
接下来,创建一个Action类,这是Struts2中的核心组件,负责处理用户的请求。比如,我们可以创建一个名为`LoginAction`的类,实现登录逻辑: ```java public class LoginAction { private String username; ...
本教程将基于提供的"Strust1框架搭建完整代码"进行详解,帮助你理解和掌握Struts1的基础知识。 1. **Struts1简介** Struts1是早期Web开发中的重要框架,它简化了Java Servlet和JSP的开发,通过定义Action类和配置...
2. 表单验证:Struts1支持基于注解的表单验证,可以在Action类中定义验证规则,标签库会自动处理验证逻辑。 3. 国际化:Struts1标签库可以轻松实现国际化,通过`<s:text>`标签结合资源文件,实现多语言支持。 4. ...
SSM框架是Java Web开发中常用的三大组件:Spring MVC、Spring和MyBatis的组合,它们各自负责不同的职责,共同构建了一个高效、灵活的Web应用解决方案。下面将详细阐述这三个框架的核心概念、功能以及如何协同工作。 ...
2. **Action类**:Action类是Struts 2的核心组件,它处理HTTP请求,执行业务逻辑,并返回一个结果。每个Action类通常对应于一个特定的用户操作或业务流程。 3. **配置文件**:Struts 2使用XML配置文件(struts.xml...
该漏洞影响了Struts2的StrutsPrepareAndExecuteFilter组件,使得未正确过滤的用户输入被传递到OGNL表达式中执行。 除了CVE-2017-5638,还有其他多个Struts2漏洞,如CVE-2018-11776、CVE-2018-11778等。这些漏洞同样...
这些jar包包含了框架的核心组件、依赖的库以及用于处理请求和响应的类。下面将详细介绍这些关键的jar包及其作用: 1. **struts2-core.jar**:这是Struts2的核心库,包含了框架的基本结构和主要组件,如Action、...
strust2 中文 帮助文档 新手入门到精通
讲述了Spring和Strust2的整合
2. **Action类**:在Struts2中,Action类是处理用户请求的核心组件,它接收HTTP请求,执行相应的业务逻辑,并返回结果。 3. **配置文件**:Struts2的配置文件(通常为struts.xml)用于定义Action类与URL的映射,...
最为完善的Strust2.3.15.2 chm 帮助文档;文档中包含了xwork部分,可以直接查看struts底层xwork部分的实现;如通常需要继承的ActionSupport、DefaultTypeConverter等
strust2漏洞利用程序
java的strust2框架开发详细教程,适合有基础的读者阅读
总的来说,这个"spring2.5+struts1+hibernate3.0 JAR包集合"代表了一个成熟、广泛使用的Java Web开发解决方案,它整合了优秀的组件,为开发人员提供了强大的工具,以构建复杂、高性能的应用程序。然而,随着技术的...
阿帕奇网站最新下载的strust2的jar包
这个"java struts2应用JAR包"包含了运行Struts2框架所需的核心库和其他相关组件。 首先,Struts2的核心JAR包主要包括以下几个部分: 1. **struts2-core.jar**:这是Struts2框架的核心库,包含了Action、...