struts-RequestProcessor

本文详细介绍了Struts框架中RequestProcessor类的process方法的工作流程,包括处理多部分请求、选择映射、处理本地化等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于多应用模块的Struts应用,每个子应用模块都有各自的RequestProcessor实例。当子应用模块被选择时,就会调用子应用模块的RequestProcessor实例的process()方法来处理请求。

(1)RequestProcessor类的process()方法

Public void process(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletEXception{ 
request = processMultipart(request);
// Identify the path component we will use to select a mapping
String path = processPath(request,response);
if(path == null){
return;
}
if(log.isDebugEnabled()){
log.debug(“Processing a ” +request.getMethod()+”’ for path ‘”+path+”’”);
}
//Select a Locale for the current user if requested processLocale(request,response);
//set the content type and no-caching headers if requested processContent(request,response);
processNoCache(request,response);
//General perpse preprocessing hook
if(!processPreprocess(request,response)){ return; }
//Identify the mapping for this request
ActionMapping mapping = processMapping(request,response,path);
if(mapping == null){ return; }
//Check for any role request to perform this action
if(!processRoles(request,response,mapping){ return; }
//process any ActionForm bean related to this request ActionForm form = processActionForm(request,response,mapping);
processPopulate(request,response,form,mapping);
if(!processValidate(request,response,form,mapping){ return; }
//process a forward or include specified by this mapping
if(!processForward(request,response ,mapping){ return; }
if(!processInclude(request,response ,mapping){ return; }
//create or acquire the Action instance to process this request
Action action = processActionCreate(request,response ,mapping);
if(action == null){ return; }
//call the Action instance itself
ActionForward forward = processActionPerform(request,response,action,form,mapping);
//process the returned ActionForward instance
processForwardConfig(request,response,forward);
}


RequestProcessor类的process()方法依次执行的流程
<1>调用processMultipart():如果HTTP请求方式为POST,并且请求的contentType属性以“multipart/form-data”开头,标准的HttpServletRequest对象将被重新包装,以方便处理”multipart”类型的HTTP请求。如果请求方式为”GET”,或者contentType属性不是”multipart”,就直接返回原始的HttpServletRequest对象
<2>调用processPath():获得请求URI的路径,这一信息可以用于选择合适的Struts Action 组件
<3>调用processLocale():当ControllerConfig对象的locale属性为true,将读取用户请求中包含的Locale信息,然后把Locale实例保存在session范围内
<4>调用processContent():读取ControllerConfig对象的contentType属性,然后调用response.setContentType(contentType)方法,设置响应结果的文档类型和字符编码。
<5>调用processNoCache():读取ControllerConfig对象的nocache属性,如果nocache==true,在响应结果中将加入特定的头参数
<6>调用processPreprocess():该方法不执行任何操作,直接返回true,子类可以覆盖这个方法,执行客户化的预处理请求操作
<7>调用processMapping():寻找和用户请求的URI匹配的ActionMapping,如果不存在,就返回错误的消息
<8>调用processRoles(): 先判断是否为Action配置了安全角色,如果配置了安全角色,就调用isUserInRole()方法判断当前用户是否具备必需的角色,如果不具备,就结束处理流程,返回错误信息。
<9>调用processActionForm(): 先检查是否为ActionMapping配置了ActionForm,如果是,则找出该实例,如果不是,则创建该实例,并且保存在适当的范围中
<10>调用processPopulate(): 如果ActionMapping配置了ActionForm实例,就先调用它的reset()方法,再把数据装到ActionForm中
<11>调用processValidate(): 如果ActionMapping配置了ActionForm,并且ActionMapping的validate属性为true,就调用ActionForm的validate()方法,如果validate()方法返回的ActionErrors对象包含ActionMessage对象,说明表单验证失败,就把ActionErrors对象存储在request范围内,再把请求转发到ActionMapping的input属性指定的Web组件。要是验证成功,就继续下面的流程
<12>调用processForward(): 判断是否在ActionMapping中配置了forward属性,如果配置了就调用RequestDispatcher的forward()方法,请求流程结束,否则继续下一步。 <13>调用processInclude(): 判断是否在ActionMapping中配置了include属性,是的话接调用RequestDispatcher的include()方法,流程结束,否则继续下一步
<14>调用processActionCreate():先判断Action缓存中是否存在这个Action的实例,如果不存在就创建一个Action实例,并且保存在Action缓存中。
<15>调用processActionPerform():该方法再调用Action实例的execute()方法
<16>调用processActionForward():把Action的execute()方法返回的ActionForward对象作为参数传给他,由它来执行请求转发或者重定向。
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值