对于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类对我们来说很重要。
分享到:
相关推荐
RequestProcessor是Struts1框架中的关键组件,它负责处理HTTP请求,初始化ActionForm,调用Action执行业务逻辑,并将结果返回给用户。 具体步骤如下: 1. **配置Spring**:首先,我们需要在Spring的配置文件中定义...
然而,在使用Struts时,可能会遇到一个问题,即无法初始化`java.util.Date`类型的表单(Form)字段。这个问题在实际开发中很常见,因为日期和时间的处理是Web应用中的核心功能。 在Struts框架中,表单通常由...
这种方式使得 Spring 容器能够在 Struts 初始化时加载,从而管理应用中的所有bean。 2. **使用 ContextLoaderListener 监听器** 另一种启动 Spring 容器的方法是在 `web.xml` 中配置 `ContextLoaderListener` ...
Struts 1.1 的默认 RequestProcessor 是 `org.apache.struts.action.RequestProcessor`。 6. **Tiles**: Struts 1.1 集成了 Tiles 模块,允许开发者创建可重用的页面片段(Tiles),增强了视图的组织和复用能力。...
另外,`RequestProcessor`是Struts1处理请求的关键类,它负责初始化Action实例,并将请求分发给相应的Action。开发者可以自定义RequestProcessor以扩展其功能。 总的来说,Struts1 API帮助文档覆盖了框架的所有关键...
2. **web.xml**:配置Servlet,包括Struts的DispatcherServlet(Front Controller)和Filter,以及Struts的初始化参数。 **五、MyEclipse中的Struts工具** MyEclipse提供了对Struts的集成支持,包括自动创建Action...
7. **RequestProcessor**:请求处理器负责初始化Struts框架,处理请求并调用ActionServlet。 8. **Tiles**:Tiles是Struts的一个扩展,提供了一种更灵活的方式来组织和组合页面布局。它允许将一个大的页面拆分为多...
因为StrutsTestCase的MockStrutsTestCase不会在启动时初始化监听器,所以将所有上下文文件放置在插件中是一种变通方法。 配置完插件后,就可以让Spring管理你的Action了。Spring1.1.3提供了两种方式: 1. 覆盖...
ActionServlet在初始化时会读取配置文件(struts-config.xml),并根据配置创建ActionForm和Action的实例。 2. **ActionMapping**:这个类定义了请求与Action类之间的映射关系。它包含了ActionForm和Action的路径...
8. **ActionServlet**:作为Struts的核心Servlet,负责初始化和配置ActionMapping、ActionForm等组件。 9. **配置文件**:包括struts-config.xml和web.xml,它们定义了Struts的全局配置,如Action的映射、数据源、...
在Struts框架中,`init()`方法用于初始化ActionServlet,它会调用`initInternal()`以及其他必要的初始化操作,比如加载配置、注册事件监听器等。 5. **struts流程图方法图.vsd**: 这个文件可能是一个详细的流程图,...
- **概述**:`RequestProcessor`类在Struts架构中扮演着核心角色之一,主要作为`ActionServlet`的助手类。`ActionServlet`的主要功能通过`RequestProcessor`类实现,尤其是在处理HTTP请求时。 - **职责**:处理...
8. **PlugIn**:允许开发者插入自定义的初始化和销毁代码,以扩展Struts1的功能。 9. **Interceptor**:拦截器是Struts1中实现AOP(面向切面编程)的重要机制,可以定义在请求处理之前和之后执行的逻辑,例如日志...
5. **RequestProcessor**:每个Struts应用都有一个RequestProcessor,它是请求处理的第一道防线,负责初始化ActionServlet,检查请求,以及将请求分派到相应的Action。 6. **Tiles**:Tiles是Struts的一个扩展,...
10. **RequestProcessor**:RequestProcessor是Struts1处理请求的起点,它负责解析请求,初始化ActionForm,调用Action,以及处理其他请求相关的任务。 "readme2.txt" 和 "readme.txt" 文件通常包含关于压缩包的...
8. **RequestProcessor**:它是请求处理的第一步,负责初始化ActionServlet,以及处理请求前的预处理工作。 9. **ValueStack**:在Struts 1.3.x版本中引入,ValueStack是一个对象栈,用于存储ActionForm和模型对象...
6. **RequestProcessor**:处理来自请求的预处理和后处理任务,例如校验ActionForm,初始化Action实例等。 7. **ActionMapping**:描述了Action与URL之间的映射关系,决定了请求如何被路由到特定的Action。 8. **...