Struts1.x处理请求的过程
来源:互联网 发布:校园网络 编辑:程序博客网 时间:2024/06/01 19:26
前些天跟踪了下Struts1.x的源代码,对Struts1.x框架处理请求的整个过程加深了一些理解,现将其简单整理一下。由于完整执行过程涉及的处理比较多,以下笔记只记录核心的处理步骤,忽略上传处理、缓存处理、权限控制、表单验证、异常处理、国际化等的环节。
核心类及其作用
ActionServlet:中央控制器
ActionMapping:映射配置文件
ActionForm:封装表单数据
Action:调用业务逻辑
ActionForward:封装转向信息
执行过程
1. 初始化:Web服务器启动时,从web.xml加载ActionServlet,读取struts-config.xml配置信 息,分别将每个action配置映射到ActionMapping对象,并将这些对象存放在Map结构的mapping中。
2. 拦截请求:服务器拦截客户端请求,请求URL若符合ActionServlet的匹配规则,将其转给ActionServlet处理。ActionServlet根据请求类别调用doGet或doPost方法,然后进入到RequestProcessor对象的process方法中。RequestProcessor是处理请求的核心类。
3. processPath->截取URL:根据规则截取请求的URL,以便跟struts-config.xml中Action配置的path属性匹配。
4. processMapping->获取ActionMapping对象:根据截取的URL,到初始化时生成的mapping中取得ActionMapping对象,此对象封装struts-config.xml中相应Action的配置信息。mapping的key为path,value为ActionMapping。
5. processActionForm->获取或创建ActionForm对象:根据ActionMapping对象中的name属性找到ActionForm的类名,然后先从request或session中查找相应的对象,找到可用的ActionForm对象则返回;否则,根据name属性查找FormBeanConfig对象,此对象封装struts-config.xml中相应的form-bean配置信息,然后采用反射创建ActionForm对象,并将其设置到request或session中。
6. processPopulate->ActionForm对象完成表单数据收集:首先调用ActionForm对象的reset方法,可覆盖此方法进行表单初始化工作;接着取到请求表单中所有的name名,然后分别根据name名取到相应的value值,并成对存放到Map中;最后调用BeanUtils的populate方法将Map中的数据设置到ActionForm对象中。
7. processActionCreate->获取或创建Action对象:根据ActionMapping对象中的type属性获取Action的类名,然后先到Map结构的actions中查找相应的对象,找到Action对象则返回;否则,根据类名采用反射创建Action对象,并将其保持在actions中。创建Action对象采用同步机制保证单实例。
8. processActionPerform->执行Action对象的execute方法:执行Action中的execute方法,并返回ActionForward对象。
9. processForwardConfig->完成转向:根据返回ActionForward对象中的redirect属性进行转发或重定向,转到对应的JSP完成页面渲染。
请求处理完成。
- Struts1.x处理请求的过程
- struts1.1中ActionServlet对http请求的处理过程
- struts1处理请求的流程
- spring3接管struts1.X的请求
- Struts1.x和Struts2在处理请求参数上区别
- Struts1.X异常处理
- Struts1.X异常处理
- IIS5.x处理请求过程详解
- struts1.2x异常处理
- Struts1.x处理Date类型数据的方法
- Struts1.x处理Date类型数据的方法
- Struts处理请求的过程
- HTML请求的处理过程
- HTML请求的处理过程
- tomcat处理请求的过程
- struts2处理请求的过程
- HTML请求的处理过程
- Apache的请求处理过程
- 欧拉回路与欧拉路
- POJ2777--Count Color
- Service与IntentService
- Service与Thread的区别
- Andriod 通过命令安装和卸载软件
- Struts1.x处理请求的过程
- 勿以业小而不创
- 文档生成工具有哪些?(总结)
- Y2K Accounting Bug
- Android 退出进程
- Leveldb源码分析--11
- android 中五个进程等级
- 防止表单重复提交的思路
- android查看应用查询所占内存