再读Struts1.3.5 User Guide 1 Building Model Components

第一部分 Building Model Components 
1. Model是架构在javabean上的,本节也主要是讲解各种各样的javabean(按功能分),但不论是什么javabean,都有四种scope(所谓scope就是指javabean的lifetime和visibility): 

page -- beans只在一个jsp page中可见,lifetime是当前的request(底层一点来说,这个bean的实例是service方法中的local变量) 

request -- beans在一个jsp page中可见,而且在该jsp page所include的,或forward过去的所有jsp、servlet中都可见。底层一点来说,这个bean是request对象的一个Attribute,该request所涉及到的所有jsp、servlet中,该bean都可见。lifetime也是该request 

session -- 不说了 
application -- 不说了 

2. ActionForm Beans, 简称form bean. 一个继承自ActionForm类的class,用于存放网页中form的数据。严格来说,应该为每个form都准备一个bean,当然也可以多个form共享一个bean,但这不是推荐的做法。Form Bean就是一个javabean,也有scope(如上)。在一个request请求开始时,会首先在Form bean这里做一些事情,然后再转交给Action class的execute方法来处理,Struts在这个过程中做如下的事情: 

(1). Struts检查在Form bean指定的scope中有没有该form的formbean实例存在。 
(2). 如果没有,创建一个。 
(3). 针对request中每个parameter,调用相应formbean的set方法,把parameter的值赋给formbean对应的成员变量。 
(4). 把formbean的实例传递给Action类的execute方法 

我们可以在多个form之间共享一个Formbean,比如,一个wizard类型的界面,wizard有很多step,每个step都有form,此时我们可以创建一个formbean用来容纳所有form元素,没必要为每个step中的form都去设计一个formbean。当然,如何设计formbean完全是开发者的意思,struts不care这些。 

3. System state beans. 这种javabean用来存放一些系统和用户信息。比如,用户登陆后,我们会把用户信息放到一个bean中,然后把这个bean放到session中(scope是session),因为很多地方会用到用户信息,这样做可以方便的随时取到这些信息。这也是经常会碰到的javabean的一种。文档中还提到说,可以将这种bean做持久化,比如存到数据库中,这样,可以根据需要,在服务器的内存中随时加载/卸载这些bean的实例--这样就很像EJB中的State Bean了。 

4. Business Logic Beans. 这不用多说了,存放操作逻辑的bean。一般良好的设计都要求这些bean要完全和HTTP的东西隔离开,比如,这些bean的代码中就不应该看到 import javax.servlet.* 这样的代码。一般都是通过Action类将HTTP的东西都剥离干净,然后把信息传给logic bean来处理。 

5. DynaBeans. 动态生成的bean,通过配置一些xml,从而让我们不用写代码,就可以在服务器中生成bean的实例,这可以在很多程度上减少代码量,而且将来要修改也容易。这个东西基本上就是来自于apache的beanutil这个项目。 

6. Commons Chain, 这个是以前没有的东西。这个东西可以让我们把一个处理过程以chain的方式串连起来。这也是设计模式中提出的概念和做法,对于一个request,有很多object在一个chain做处理。这样做的好处是,首先,对于chain的调用者,他不需要知道chain上有哪些object,这些object都干嘛;其次,可以把逻辑以松散的方式放到chain上,chain上的object都是松散连接的;最后,我们可以轻松的调整chain上的处理逻辑而无需修改chain invoker的调用逻辑。 

Struts中,针对一个HTTP request的处理逻辑就是一个chain,有很多object组成,各自处理各自的一部分。Struts的处理request的这个chain基于apache jakarta的项目-chain。有兴趣可以去看一下这个项目: 

http://jakarta.apache.org/commons/chain/
原文地址:https://www.cnblogs.com/super119/p/1935006.html