tirry_niit同行在
http://javaresearch.org/article/63242.htm引用的有一个Apache Struts 2的一个介绍.我作一些补充。补充内容均基于2007-3-3前从Apache网站上看到的所有
Struts 2.0.6 的文档.
Struts2的一个亮点是不再有ActionForm.即不在强制要求开发者实现MVC中的M,这点是很重要的,模型总是跟业务逻辑相关,任何一个Web开发框架都不可能处理好M部分。以前版本会出现的问题是:
1)大量的ActionForm,大量相似的业务逻辑对象。
2)让Web开发者感受不到OO编程的乐趣。因为他们首先要面对的是ActionForm,这是一个很无聊的对象。
Struts2很好的实现了V/O Mapping(即视图层到业务对象的映射,我这么理解的,其实所有的WebFramework都应该重视并发扬这个技术,就像O/R Mapping那样完善的理论和工具).页面表单数据可以直接跟你指定的任何对象进行绑定,绑定规则和类型转化同Struts1基本一样。通常,Struts2推荐把业务对象放在Action里。间接通过Action来绑定。
Struts2另外一个亮点是在Action配置和Validator配置更加灵活。Struts能将处理请求定位到Action的某个方法里。如下面的Action定义
如果你提交请求EmployeeActionUpdate,Struts2会自动调用EmployeeAction的Update方法.Struts提供在代码外的验证机制保证了Web应用的可维护性。然而,Struts1的验证机制只提供了对一个对象统一的验证机制。这并没有考虑的业务上的变化,比如。Struts1中可以对Employee的名字,性别,生日,EMail做验证。但实际情况是我们的操作有Add Employee,Update Employee等,这俩种操作就有可能需要不同的验证逻辑。Struts2允许为分别为这俩个操作定义不同的Validator配置文件。如分别定义EmployeeAction_save_validation.xml,以及EmployeeAction_update_validation.xml
Struts2从结构上来说还有个亮点是使用了Interceptors,即Pipeline(or Filter) Pattern。在Http请求到达Action前以及Action处理后,都会经过很多Interceptor类处理。如Validation Interceptor 用于在调用Action前进行验证。从原来Struts1版本来看,其实现也基本上是按照Pipeline来实现的.但这些是不可配置的。现在可以在Struts.xml或者Ation定义里加上<interceptors>配置,如为整个Web系统加上一个权限验证的
总的来说,Struts2改动地方很大,强化了Action的中心地位;用了更多的技术和标记库来实现View;弱化了对Model层控制。要理解起来并不容易,但它的所做的改动很多地方更加适合实际系统的开发,非常值得我们去试用的。
附:看Struts2文档推荐看Tutorials中的Bootstrap 和MailReader Tour俩个例子,MailReader Tour是一个非常好的例子。另外要看的是Guides部分,它详细描述了Struts2的各个部分.你看MailReader Tour不明白的地方都能在Guides中找到答案。这些文档都比较全,但因为Struts2架构和核心代码上都来自于WebWork,所以有些文档或者代码片断会搞成WebWork,需要在看文档的时候多注意一下
Struts2的一个亮点是不再有ActionForm.即不在强制要求开发者实现MVC中的M,这点是很重要的,模型总是跟业务逻辑相关,任何一个Web开发框架都不可能处理好M部分。以前版本会出现的问题是:
1)大量的ActionForm,大量相似的业务逻辑对象。
2)让Web开发者感受不到OO编程的乐趣。因为他们首先要面对的是ActionForm,这是一个很无聊的对象。
Struts2很好的实现了V/O Mapping(即视图层到业务对象的映射,我这么理解的,其实所有的WebFramework都应该重视并发扬这个技术,就像O/R Mapping那样完善的理论和工具).页面表单数据可以直接跟你指定的任何对象进行绑定,绑定规则和类型转化同Struts1基本一样。通常,Struts2推荐把业务对象放在Action里。间接通过Action来绑定。
Struts2另外一个亮点是在Action配置和Validator配置更加灵活。Struts能将处理请求定位到Action的某个方法里。如下面的Action定义
- <action name="EmployeeAction_*" method="{1}" class="com.EmployeeAction">
如果你提交请求EmployeeActionUpdate,Struts2会自动调用EmployeeAction的Update方法.Struts提供在代码外的验证机制保证了Web应用的可维护性。然而,Struts1的验证机制只提供了对一个对象统一的验证机制。这并没有考虑的业务上的变化,比如。Struts1中可以对Employee的名字,性别,生日,EMail做验证。但实际情况是我们的操作有Add Employee,Update Employee等,这俩种操作就有可能需要不同的验证逻辑。Struts2允许为分别为这俩个操作定义不同的Validator配置文件。如分别定义EmployeeAction_save_validation.xml,以及EmployeeAction_update_validation.xml
Struts2从结构上来说还有个亮点是使用了Interceptors,即Pipeline(or Filter) Pattern。在Http请求到达Action前以及Action处理后,都会经过很多Interceptor类处理。如Validation Interceptor 用于在调用Action前进行验证。从原来Struts1版本来看,其实现也基本上是按照Pipeline来实现的.但这些是不可配置的。现在可以在Struts.xml或者Ation定义里加上<interceptors>配置,如为整个Web系统加上一个权限验证的
- <interceptors>
- <interceptor name="authentication"
- class="myapp.AuthenticationInterceptor"/>
- </interceptors>
总的来说,Struts2改动地方很大,强化了Action的中心地位;用了更多的技术和标记库来实现View;弱化了对Model层控制。要理解起来并不容易,但它的所做的改动很多地方更加适合实际系统的开发,非常值得我们去试用的。
附:看Struts2文档推荐看Tutorials中的Bootstrap 和MailReader Tour俩个例子,MailReader Tour是一个非常好的例子。另外要看的是Guides部分,它详细描述了Struts2的各个部分.你看MailReader Tour不明白的地方都能在Guides中找到答案。这些文档都比较全,但因为Struts2架构和核心代码上都来自于WebWork,所以有些文档或者代码片断会搞成WebWork,需要在看文档的时候多注意一下