原创作者: 饕尽天下   阅读:5918次   评论:15条   更新时间:2011-06-01    

本章我们会比较这两个框架的不同特性.Struts1相比,Struts2是非常简单的,下面是Struts2的一些优秀特性 :

 

5.1 Servlet依赖性

由于Action在被调用时,HttpServletRequestHttpServletResponse被传递到execute()方法中,Struts1中的ActionServletAPI是有依赖性的.但如果在Struts2,Action就不会对容器有依赖了,因为Action是由简单的POJO组成的.Struts2,servlet上下文以简单的Map的形式表现出来,这使得Action可以得到独立的测试.如果需要,Struts2也可以访问原始的请求与响应.不过,其他的框架元素减少或排除直接访问HttpServetRequestHttpServletResponse的必要.

 

5.2 Action

使用抽象类而不是接口设计是Struts1设计上的问题,这已经在Struts2中得到了解决.Struts1中的Action类需要继承框架中依赖的抽象基础类.但在Struts2,Action类可能会也可能不会实现接口来启用可选的或者自定义的服务.Struts2,Action是不会依赖于容器的,因为它是由简单的POJO组成的.Struts2提供了一个基础的ActionSupport类来实现一些常用的接口.尽管这样,Action接口仍然不是必须要继承的,任何含有execute方法的POJO对象都可以当作Action对象来用.

 

5.3 验证

Struts1Struts2都支持通过validate方法的手动验证.Struts1使用ActionForm中的validate方法或者通过扩展Commons Validator来进行校验.然而,Struts2支持通过Validate方法与Xwork校验框架的手动验证. Xwork框架支持验证链到子属性----使用为属性类文件和校验上下文定义的验证.

 

5.4 线程模型

Struts1,Action资源一定是线程安全或者同步的.所以Actionsingletons并且线程安全的,一定只有一个Action类的实例处理该Action 的所有请求,singleton策略限制了Struts1Action所能完成的,并且需要更加谨慎的开发.但是在Struts2,Action对象对每一个请求都生成实例,所以在Struts2中不存在线程安全的问题.实际上,servlet容器对每个请求产生了很多浪费的对象,一个或多个对象不会使性能变得糟糕或者唤起垃圾回收器.

 

5.5 易测性

测试Struts1的程序会有些复杂.测试Struts1 Action的主要障碍就是因为它暴露了servletAPI.一个叫Struts TestCase 的第三方扩展,提供了一组Struts1测试用的模拟对象.但是在Struts2,Action可以经由创建Action的实例,设置属性,和调用方法来得到测试.依赖注入同样使测试变得更容易.Struts2中的Action是简单的POJO并且独立于框架,从此,Struts2中的测试是很简单的.

 

5.6 获取输入

Struts1使用ActionForm来捕获输入.而且所有的ActionForm需要继承一个框架依赖的基类.由于JavaBean不能当作ActionForm来用,开发人员不得不创建冗繁的类来获取输入.不过Struts2使用Action属性(例如输入属性不依赖于底层框架)这避免了需要创建第二个输入对象,从此冗繁减少了.此外在Struts2,Action的属性可以通过标签在web页面中得到访问.Struts2同样支持ActionForm模式,POJO表单对象和POJO Action.甚至富对象类型,包括业务或域对象,都可以被当作输入/输出对象来使用.

 

5.7 表达式语言

Struts1JSTL整合,所以它使用JSTL表达式语言.Struts1的表达式语言含有遍历图表的基础对象,但是在集合和索引属性的支持上表现不好.Struts2同样支持JSTL,但是它也支持一种更强大且灵活的表达式语言----“对象图标记语言”(OGNL)

 

5.8 将绑定值到视图中

在视图层,Struts1使用标准的JSP来绑定对象(在模型层被处理的)到页面上下文来进行访问.然而Struts2使用一种叫做值栈的技术,这使得标签可以访问值而不需将视图与正在呈递的对象类型连接起来.值栈允许重用一些属性名相同但类型不同的视图类型.

 

5.9 类型转换

通常Struts1ActionForm属性都是String型的.Struts1使用Commons-Beanutils进行类型转换.这些针对每一个类的类型转换无法为每一个实例配置.然而Struts2使用OGNL来进行类型转换.框架包含了针对基础类型,常见对象类型与原始类型的转换器.

 

5.10 Action执行的控制

Struts1支持对每一个模块的请求处理器的分离(生命周期),但是同一模块下的所有Action必须共享相同的生命周期.Struts2支持通过拦截器栈为每一个Action创建不同的生命周期.自定义栈可以视需要对不同的Action使用.

评论 共 15 条 请登录后发表评论
15 楼 pyylove520 2011-05-06 20:30
正在学习struts1.x中........呵呵!暂不了解Struts2.X!!不过谢博主了哦!!
14 楼 t李辉 2011-03-29 14:42
学习的是struts 2结果工作中用的是struts 1,真的挺悲剧的,struts 1看的纠结。
13 楼 pleilove 2009-11-05 14:45
目前正在学习struts2感谢呀!
12 楼 丁丁豆 2009-10-09 10:01
这样只能是了解点理论
11 楼 yangqianyu222 2009-06-05 17:08
Checkmate 写道

yangqianyu222 写道
翻译的蛮好的,Struts2我会用一点,看了你的文章,对struts2有更系统的认识了。 请博主顺便介绍一下你学英语的方法吧。 其实原文挺简单的...英语...可别闹了,至今本人还没考过4级呢....

四级只是个证书而已,不代表英语水平,关键还是在会应用。博主谦虚了,我过了四级也没有你用的好。
10 楼 Checkmate 2009-06-05 15:20
yangqianyu222 写道

翻译的蛮好的,Struts2我会用一点,看了你的文章,对struts2有更系统的认识了。 请博主顺便介绍一下你学英语的方法吧。

其实原文挺简单的...英语...可别闹了,至今本人还没考过4级呢....
9 楼 yangqianyu222 2009-06-05 10:07
翻译的蛮好的,Struts2我会用一点,看了你的文章,对struts2有更系统的认识了。
请博主顺便介绍一下你学英语的方法吧。
8 楼 Checkmate 2009-06-01 16:11
lucky16 写道

看了你的几页文章对struts2了解确实多了些!!谢谢

这些是我翻译的,原文请看http://www.roseindia.net/.
文章都挺浅显易懂的.
7 楼 lucky16 2009-05-30 11:14
看了你的几页文章
对struts2了解确实多了些!!
谢谢
6 楼 库拉皮卡 2009-04-15 14:35
struts2的值栈的技术,能不能多解释一下,它的实现原理什么的?
5 楼 Checkmate 2009-03-30 20:00
jackeycqu 写道

pojo 现在还只知道个概念,具体很不懂,能简单解释一下么?谢谢

抱歉我在Java领域也涉世不深,只能尝试着帮你解释下.
在我的印象里,POJO就是一个简单的Java对象,由一些属性和这些属性的getter和setter方法组成,它不实现任何其它java框架的接口或类.我觉得,POJO就是一个简单的传值的对象.
还请大家指正
4 楼 jackeycqu 2009-03-30 00:15
pojo 现在还只知道个概念,具体很不懂,能简单解释一下么?谢谢
3 楼 Durian 2009-03-24 19:28


确实不错,一下子就对struct2熟悉起来了
2 楼 Checkmate 2009-03-23 17:06
mic010 写道

学到咯。。。

哪怕是几个人学习到了一点有用的东西,也不枉我每天加班留下翻译这些东西
1 楼 mic010 2009-03-21 18:03
学到咯。。。

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics