目前正在看Struts的源码,希望有一天能写出其中的接收转发的完整功能。
不小心看到下面的文字,感觉不错,就转过来了。
同时,有颜色的字体是我自己对其做的笔记。
Struts1.2依然是应用很广的框架,熟悉其基本的控制流程是必要的:
[目前最新式1.3,但是也是08年更新的了。没办法,Apache已经全面停止对Struts1的更新了。]
一、ActionServlet的初始化
ActionServlet作为Struts组件的前端控制器,由于web.xml的相应配置:
<load-on-startup>0</load-on-startup>
在应用一加载时即会被实例化并调用其init方法,init方法所做的主要工作有二:
1. 加载struts配置文件,并创建用于封装配置信息的ModuleConfig对象
2. 加载资源文件,并创建用于封装资源文件的MessageResources对象
需要注意两点:如果web.xml有多模块配置,将创建多个ModuleConfig对象和MessageResources对象分别用于封装各个模块的struts配置文件和资源文件。
针对各个模块所创建的ModuleConfig对象和MessageResources对象将存储在ServletContext中,对应的属性名中有该模块名称的相应标识。
另外,如果有相应配置的话,init方法还将初始化数据源和PlugIn
二、ActionServlet的process
所有形如*.do的请求(根据web.xml中的相关配置)将提交给ActionServlet,最终将调用其process方法。process方法的主要工作有三:
[ActionServlet自身也有一个process()方法,作用是选择相应的Module进行处理。然后new一个RequestProcessor实例,并调用这个实例的process()方法]
1. 根据请求信息获知所请求的模块名称,从ServletContext中获得与请求模块对应的的ModuleConfig对象,并存储到request中。
2. 根据模块信息获得相应的RequestProcessor对象,一个模块对应一个RequestProcessor对象,RequestProcessor对象将关联与所属模块对应的ModuleConfig对象。
3. 调用RequestProcessor对象的process方法,将request和response作为参数传递给它。
三、RequestProcessor的process
RequestProcessor对象的process方法的主要工作有五步:
1. 调用自己的 processPreprocess(request, response)方法,该方法不进行任何操作,用于子类重写扩展其功能。
[该方法里面只有一条语句 return(true); 在1.3的版本中,我没有在该process()方法里面看见对他的调用。在1.3版本中,第一步是获取映射的path。具体哪个path我不确定,不过觉得应该是对应着struts-config.xml中的<action>标签里面的type属性的值。获取path之后,处理一下其他的属性,比如locale、contenttype、nocache并检验是否已经预处理。]
2. 获得与请求地址所匹配的ActionMapping对象,AcionMapping对象用于封装一个特定action的配置信息。
3. 根据ActionMapping中的配置信息获得ActionForm对象(该对象将缓存到request或session中),并将表单数据填充到ActionForm中,然后根据ActionMapping的配置决定是否验证ActionForm,如果验证,将调用ActionForm的validate方法,若其返回的ActionErros对象中包含ActionMessage对象则表示验证失败,将转向action配置信息input属性所指示的地址。
4. 如果ActionForm无需验证或验证通过将创建并缓存与请求地址匹配的Action对象,将ActionMapping对象、ActionForm对象、request和response [以及Action对象] 作为参数调用其execute方法。
5. 根据Action对象的execute方法返回的ActionForward对象,将请求转发或重定向到该ActionForward所封装的地址。
分享到:
相关推荐
语言:English,Français,español,italiano,中文 (简体),日本語 捕获整个页面或任何部分,矩形,圆形,箭头,线条和文字,模糊敏感信息,一键上传分享注释。支持PNG和链接 Great for capturing charts, graphs, and ...
POI_添加批注
HWPRO全文批注软件有以下八大特性:1、直接集成于Microsoft Word中,直接批改Word文件2、独创嵌入式连续化页面批注方式,滚动式跨页批注3、独创嵌入式对照清稿功能(政府行业版):在一个界面中同时显示原稿和批注稿...
前端使用JQUERY实现批注功能
CAD审图批注命令YX,APPLOAD加载后运行,相关设置S。本小程序为转载。
JPA批注帮助文档,在写持久层时的model注释参考。
对源代码进行批注和讨论。可自动分析C/C++/Java/Python/C#/Objective-C等项目的源代码并生成流程图和函数调用关系图。生成的流程图可以和源代码互相定位,有助于分析源代码,是阅读其他人写的代码或者自己很久前写的...
canvas 移动端画板批注pdf预览 用了get请求pdf文件,服务器下运行才会生效 画板移动端下才生效
C# 使用 Spire 获取word批注和批注人 导出到excel 包含工程和所需全部dll 需要类似功能得 超值 别的地方插件都不止这点分
通过html5canvas实现批注功能,可以在线批注,批注完成后保存成图片,或者通过网页截图的方式保存
1.云线批注为专有图层2.云线校审的意见可填在云线旁边,也可以提取以列表形式存储3.设置批注样式:可更改批注字高,模型空间默认1:100出图500mm,布局中字高10mm4.生成CAD中快捷使用工具条5.需要属性设置,专用弹窗...
最近在做一个学校的XXX系统项目,因项目有个需求就是要像在word里面的添加批注功能一样,就是选中一段文字,然后为这些页面添加一些额外的信息;刚开始我们的方案是记录选中内容的下标,然后保存到数据库中,当要...
转正材料审阅批注
因项目有个需求就是要像在word里面的添加批注功能一样,就是选中一段文字,然后为这些页面添加一些额外的信息,在选中的文字两端加上自定义标记,批注的内容就是保存到自定义标签的属性里面去。
Excel2021 批注添加、删除、打印批注.docx
Python实现的一个将Word中的批注转换成脚注的小脚本。 1、删除Word中原有的脚注 2、将Word中的批注转成脚注 3、删除所有批注 三个功能分在三个脚本中,可以分别使用,一个auto.py对三个脚本集成。
PDF.js在线批注实现(附源码) JS+HTML5实现
CHM格式文档批注工具,支持win7,能够将批注导出保存。
指定单元格的内容,根据自定义函数,变成批注。