对于RequestProcessor,有的人可能很陌生,毕竟它不象ActionSerlvet那样,在我们的面前频繁的出现。但
是,RequestProcessor用的要远比ActionServlet多,那么RequestProcessor到底是干什么的呢?
一句话:这个类真正包含了struts 控制器在处理Servlet请求时所遵循的控制逻辑
!
当 ActionServlet接收到客户请求后,会进行一连串的初始化操作,然后,就会将客户请求转交给合适的处理器进行处理,这个合适的处理器就是
org.apache.struts.action.RequestProcessor。既然我们知道了RequestProcessor的用处,下面我
们就详细的分析下这个处理器类。
- 调用processMultipart( )方法,如果 HttpServletRequest是POST方式,且请求为multipart/form-data ,
Struts框架将请求对象包装成处理multipart 请求专用的请求对象,否则,只是简单地返回原有的请求对象。一般来说,除非需要处理文件上传,否则不用关心multipart 功能的具体细节。
- 调用processPath( ) 方法,该方法用来从请求URL中获应用取路径部分。获取到的信息在稍后的步骤中用于选择合适的Struts Action调用。
- 调用processLocale( )方法,处理一些国际化的事务。
- 调用方法processContent( ),来决定请求的content type编码(encoding)方式。content type可以配合在配置文件中,也可以在jsp文件中配置,默认为text/html。
- 根据noCache属性的设置调用processNoCache( ) 方法,如果noCache设置为true。则添加合适的响应头到响应对象中,使得页面保留在浏览器的Cache中。这些响应头包含Pragma, Cache-Control, 和Expires 。
- 调
用processPreprocess(
)方法,这个方法在这儿设置一个钩子,方法的默认实现只是简单地返回true,这样给了自定义处理器的开发者提供了一个合适的地方让你添加自己的业务逻
辑。因为这个方法在调用
Action之前被调用,如果你重载这个方法,只需要返回false,则Action就不会被调用。例如,你可以重载这个方法用户检查客户
session,如果不通过就返回false。
- 调用processMapping( )方法,根据客户请求信息中的path 信息来决定是否返回ActionMapping对象实例。如果不能够找到path 的映射,则客户将会得到一个error 响应。
- 通过调用processRoles( )方法,检查是否为Action配置了安全角色。如果配置了角色要求,则请求对象的isUserInRole( )方法被调用,如果用户属于这些角色,则客户会得到显示一个error 响应。
- 调
用processActionForm( )方法,检查是否存在为 ActionMapping配置的ActionForm
。如果存在,则在有效区域内查找是否存在该ActionForm
的实例,存在,则复用,不存在,则创建一个实例。然后将实例保存与再配置文件中配置好的有效区域
(request,session,application)内,并用Action元素的name属性作为该实例的关键字。
- 调用processPopulate( )方法,如果存在为ActionMapping配置的ActionForm,则封装请求对象中的数据到ActionForm 中,在进行封装之前,先调用ActionForm 的reset( )方法进行属性值的默认化。
- 调
用processValidate( )方法,如果 ActionForm被配置好,并且action元素的属性validate被设置为true
,则进一步调用validate( )方法进行规则校验。如果validate( )方法校验失败,就会保存一个ActionErrors
对象到请求区域中,请求将会自动重定向到action映射的input属性所指定的页面中。如果校验通过或在action
映射中没有配置ActionForm,则继续处理请求。
- 根据action 映射是否配置了forward属性。如果配置了,则相应地调用RequestDispatcher对象的 forward( )方法。
- 根据action
映射是否配置了include属性。如果配置了,则相应地调用RequestDispatcher对象的 include( )方法。
- 调用processActionCreate( )方法,创建或获取一个Action对象实例处理请求。processActionCreate( )方法会在缓存中查找是否存在已经创建好的Action实例,如果存在,则复用,否则,则重新创建并将其保存在缓存中。
- 调
用processActionPerform( )方法,该方法用于在一个try/catch 代码块中调用action 实例的execute(
)方法,这样确保action 的execute( )方法一旦发生执行异常能够被RequestProcessor捕获。
- 调用
processActionForward( )方法,并传入action的execute(
)方法所返回的ActionForward对象实例,方法通过检查ActionForward对象实例,决定采用redirect或forword方式进
行重定向。究竟采用redirect还是forword取决于forward元素的redirect属性值。
在Struts中,只允许应用提供一个ActionServlet类,但是根据需要可以存在多个客户化的RequestProcessor类,例如:对于包含多个模块的应用,每个子应运模块都可以有各自的RequestProcessor实例.
分享到:
相关推荐
在处理业务逻辑时,Action可以对这个列表进行操作,如添加、删除、修改商品信息。处理完业务逻辑后,Action会决定跳转到哪个JSP页面来显示结果,这通常通过返回一个ActionForward来实现。 关于源码层面,我们可以...
- 描述:可以通过覆盖Struts的RequestProcessor来定制处理流程,例如添加额外的拦截器。 - 作用:提高了Struts框架的灵活性,使得开发者可以更好地控制请求的处理流程。 - **窍门3:将动作管理委托给Spring** - ...
Struts+Spring+Hibernate(SSH)是经典的Java Web开发框架组合,用于构建高效、可扩展的企业级应用程序。以下是对文档内容的详细解释: 1. **创建WEB项目**:首先,你需要在IDE(如Eclipse或IntelliJ IDEA)中创建...
在Struts框架中,核心概念包括Action、ActionForm、ActionMapping、RequestProcessor等。Action负责处理用户请求,ActionForm存储用户输入的数据,ActionMapping定义了请求与Action之间的映射关系,而...
本系统使用 Spring 的DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor,将 Struts 动作整合到 Spring 框架中。 Spring框架是轻量级组件部署和运行的容器,可以很好的支持AOP(面向切面编程)的...
本系统使用 Spring 的DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor,将 Struts 动作整合到 Spring 框架中。 Spring框架是轻量级组件部署和运行的容器,可以很好的支持AOP(面向切面编程)的...
本系统使用 Spring 的DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor,将 Struts 动作整合到 Spring 框架中。 Spring框架是轻量级组件部署和运行的容器,可以很好的支持AOP(面向切面编程)的...
- **Action执行控制**:Struts1通过RequestProcessor控制,而Struts2采用拦截器栈控制。 - **安全性**:Struts1的Action需要手动处理线程安全问题,Struts2为每个请求生成一个新的Action实例,避免了这一问题。 - **...
在Struts 1.2中,关键组件包括Action、ActionForm、ActionMapping、RequestProcessor和Tiles等。Action是处理用户请求的核心,它接收来自控制器的请求并调用相应的业务逻辑。ActionForm则负责在控制器和视图之间传递...
- **封装Hibernate数据库操作方法**:封装常用的数据操作方法,如增加、删除、修改、查询等。 - **数据持久化处理**:使用Hibernate将Java对象映射到数据库表中。 - **Hibernate配置文件**:进一步配置Hibernate...