Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1732277
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类:

2011-11-16 23:41:50

原文地址:struts1 执行流程2 作者:wjxcoder

1 Struts1的执行流程

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.

 


2 sturts1框架基本组件包

整个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:支持web Application的一些常用服务功能
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 类的处理结果转发至目的地。这个对象可以有两种创建方式:
//第一种返回页面的方法
return new ActionForward("/basic/error.jsp");
//第二种返回页面的方法--一般采用此方法
return mapping.findForward("error");

5)ActionMessages和ActionErrors
ActionMessages和ActionErrors的详细介绍

转载自: http://pengshao.iteye.com/blog/635724


阅读(618) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~