yixiaoqi00 2010-04-07
这是很久前的东西了,拿过来再结合自己的做过项目,琢磨琢磨。
1Struts1的执行流程
1)客户端发起.do结尾的请求,由ActionSerlvet接收;
2)ActionServlet接收请求,交给RequestProcessor处理(实际上就是调用RequestProcessor的process方法);
3)RequestProccessor根据请求路径查找对应的ActionMapping,如果找不到,报404错误;
4)RequestProccessor查找或者创建一个ActionForm对象(ActionForm可以被重用,存在于两个范围,Session或者Request);
5)RequestProccessor调用ActionForm的reset方法,重置状态信息;
6)RequestProccessor调用ActionForm的setXXX方法,将客户端提交的参数封装到ActionForm中;
7)RequestProccessor调用ActionForm的validate方法,如果此方法返回一个ActionErrors对象,并且这个对象中包含错误信息,那么认为验证失败,如果验证失败,那么将请求转发到Action元素的input属性指定的路径上去,反之验证成功;
8)RequestProccessor查找或者创建一个Action(Action对象是单例的);
9)RequestProccessor调用Action对象的execute方法执行Action,并且传入ActionMapping,ActionForm,HttpServletRequest,HttpServletResponse这四个对象;
10)在Action的execute方法中可以通过调用ActionForm的getter方法来获得客户端提交的数据,可以调用模型的方法来处理业务;
11)通过ActionMapping的findForward方法返回一个ActionForward对象或者直接new一个ActionForward对象;
12)主控器获得Action返回的ActionForward对象,然后根据这个对象中封装的信息,将请求转发(重定向或者内部跳转)到具体页面;
13)jsp页面向客户端作出响应;
四个主要类的请求顺序是:ActionMapping--ActionForm---Action---ActionForward.2sturts1框架基本组件包
整个struts1大约由15个包,300个java类组成
核心包如下
org.apache.struts.Action:控制整个struts1框架运行的核心类;如ActionServlet,RequestProcessor,Action,ActionMapping,ActionForm,ActionForward等
org.apache.struts.Actions:特定适配器转换功能;如DispatchAction
org.apache.struts.Config:提供对配置文件struts-config.xml元素的映射
org.apache.struts.Taglib:标签类的集合
org.apache.struts.Util:支持webApplication的一些常用服务功能
org.apache.struts.Validator:用于动态的配置form表单验证(struts1.1以上)
3、Struts1.2中组件的功能:
1)控制层的分类
1.ActionServlet:(公司的老总)
由Struts框架提供的一个类,用来接受所有客户端的*.do请求,但是他本身不会去处理请求,而是将请求委托给RequestProcessor全权处理;
2.RequestProcessor:(项目总监)
由Struts框架提供的一个类,用来接受ActionServlet转发过来的请求并处理请求,它会根据struts.xml中的配置调用不同的Action去全权处理客户端不同的请求;
3.Action:(程序员)
由Struts框架提供的一个类,它的功能和Servlet一样作为控制器来控制和转发请求,由它去调用模型层中的业务接口方法,并根据不同的结果选择不同的jsp视图显示;注:我们用户需要自己写一个类继承Action(跟写Servlet一样)。
struts1应用的生命周期中RequestProcessor只保证一个Action实例,所有的客户请求都共享这个实例.所有请求可以同时执行它的excute()方法。RequestProcessor类包含一个HashMap,作为存放所有Action实例的缓存。每个Action实例在缓存中存放的key为Action类名。在RequestProcessor类的processActionCreate()方法中,首先检查在HashMap中是否存在Action实例,如果有直接使用,否则创建一个新的。创建Action实例的代码位于同步代码块中,以保证只有一个线程创建Action实例,然后放在HashMap中。供其他线程使用。
2)模型层中的ActionForm:由struts框架提供的一个类
作用:
a.封装提交表单中的字段信息
b.对提交表单中的字段信息进行验证(服务器端验证)
c.可以对表单中的字段信息重新赋值
3)ActionMapping
继承自ActionConfig。ActionMapping的作用
4)ActionForward
ActionForword继承自ForwardConfig,它实际上是用来封装视图路径和转发请求方式的一个对象,目的是控制器将Action类的处理结果转发至目的地。这个对象可以有两种创建方式:
//第一种返回页面的方法
returnnewActionForward("/basic/error.jsp");
//第二种返回页面的方法--一般采用此方法
returnmapping.findForward("error");
5)ActionMessages和ActionErrors
ActionMessages和ActionErrors的详细介绍
class Singleton: def __new__: # 关键在于这,每一次实例化的时候,我们都只会返回这同一个instance对象 if not hasattr: cls.instance =