Struts1的执行流程及其主要包和组件类的介绍

这是很久前的东西了,拿过来再结合自己的做过项目,琢磨琢磨。

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的详细介绍

相关推荐