阅读更多

27顶
4踩

编程语言

原创新闻 struts2新特性预览

2006-08-21 18:41 by 见习记者 tianxinet 评论(8) 有20788人浏览
看到关于框架选择的帖子,贡献一点东西,如果你有选择struts的意向,还是直接等struts2好了。

Struts2与Struts1的对比

来源:struts2开发组  翻译:tianxinet(胖猴)


Action 类:
• Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
• Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

线程模式:
• Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
• Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

Servlet 依赖:
• Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。
• Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。

可测性:
• 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。
• Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

捕获输入:
• Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。
• Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。

表达式语言:
• Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
• Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL). 

绑定值到页面(view):
• Struts 1使用标准JSP机制把对象绑定到页面中来访问。
• Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。
 
类型转换:
• Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。
• Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。

校验: 
• Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。
• Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性 

Action执行的控制:
• Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
• Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
27
4
评论 共 8 条 请登录后发表评论
8 楼 潇洒人生 2011-01-10 11:42
     
7 楼 realflyman 2010-12-01 14:20
类型转换:这里s2好像做的也有问题 ,我一个int 的list在页面上处理就报错了,
6 楼 iuf6853 2010-10-30 15:10
看看吧,仔细地读一读但愿有收获,谢谢。
5 楼 wsgpfmmy 2010-08-12 14:31
总结太JB泛滥了
4 楼 新入职 2010-07-31 16:46
骂人不好,善哉
3 楼 zhangpurple 2010-03-22 10:57
细节不是很好 垃圾
2 楼 guji528 2010-02-08 17:47
对Struts的介绍对比都很详细
1 楼 ly860710 2009-07-10 11:20
读了这篇文章,我很有收获啊!

发表评论

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

相关推荐

  • 18comic

    18漫画

  • cimoc 最新版_cimoc1.6.1版本下载-cimoc1.6.1最新版_5577安卓网

    cimoc1.6.1版本下载,这是一款资源超级丰富的漫画软件,平台上的漫画全部支持免费观看,且更新速度极快,使用这款软件,用户永远不会出现漫荒的尴尬情况,喜欢的用户快来下载试试吧!【软件详情】Cimoc怎么更新?Cimoc官方最新版是一款非常不错的漫画阅读软件,Cimoc官方版里具有海量的优质小说资源,用户可一键搜索查询自己喜爱的漫画阅读,同时支持离线下载阅读,线上阅读等功能,让你随时免费阅读漫画...

  • 因提供18禁动漫,毒害未成年人,国内最大动漫网站被重罚

    作为二次元 动漫迷们必备的在线观看漫画工具,那么“动漫之家”肯定是每个人必入坑之一,毕竟它的上线时间也是于2005年的时候。 最早一批的动漫网站,很早二次元喜欢的人,就在里面进行打卡分享番在这网站里的,也有业余大佬汉化组为网站发电提供内容! 主要吧之前市场的管理制度不算严格,所有漫画没有按照进行审核删减,都是各种类型的漫画因有尽有,然而随后人们版权意识提高,所以各种盗版以及内容是否符合核心价值观也是人们所聊到的话题! 网上能依稀看到2013年央视点名批评进击巨人,除了点名批评外,在2015年6月8日。

  • CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pk

    问题描述: 在使用conda安装软件包时,遇到报错: Collecting package metadata (repodata.json): failed CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/repodata.json> Elapsed: - An HTTP error occurred whe

  • 简单的安卓app小程序代码_【不看追悔莫及】绝对是史上最全免费看漫画APP软件总结,吐血整理,无论小众大众,绝对良心好用!!...

    绝对是史上最全免费看漫画APP总结(iOS+安卓),欢迎收藏,持续更新首先介绍安卓的,好用的APP真的非常多,各位慢慢看~第一款:看漫画(安卓)酷安评分4.6(满分5)民间艺术版 所有土豪漫画免费看 无任何使用限制所有土豪漫画都可以免费看~获取方式:应知乎管理员要求,到个人介绍处查看第二款:漫客栈(安卓)知名漫画APP,但是个人原因不是很喜欢,所以不做详细介绍同样民间艺术版 所有土豪漫画免费看 无...

  • 网站收藏1

    无名博客:http://savvy1995.cc/?cat=1 zd:https://www.423down.com 老殁:https://www.laomoit.com 爱吾:https://www.25game.com 路由器:https://www.acwifi.net/category/wifi 小米工具箱作者网页:https://blog.coderstory.cn 迅雷电影天堂:https://www.xl720.com/ 乐魂:http://blog.tsyinpin.com/

  • 一个动漫下载网站

    一、好东西分析 一个动漫下载网站: https://mikanani.me/ 回味童年的时候可以看看陪娃的时候可以看看 二、今日感悟 1、女神的错觉女神本质上是女人,她和你一样要吃喝拉撒睡,一样会打喷嚏、打嗝,所以不要因为对方肤白貌美大长腿就有女神的错觉,从而给自己的心里戴上枷锁。2、我从未爱过这个世界,它对我也一样。人还是要多分享。3、出书我们在接受培训的时候,如果讲师只拿PPT给大家,大家都会觉得不值,或者有被骗的感觉这源于远古基因深处对实物的迷恋。书,就是一种实物,目前出版管控,书籍要过审,要版号.

  • 安装天堂遇到的问题及解决方法

    1,解压过程中非正常退出。 在解压过程中,无任何提示进程就退出了。 分析问题,发现C 盘可用空间变小了,原来是3G多将近4G,最后只有1.32G可用空间。 查看环境变量,temp 指向 %user...%\AppData\Local\Temp, 经验证,解压的临时文件是存放在上述目录中的。 于是修改临时变量,指向可用空间最大的D 盘。 再运行,解压过程可到100%。 出现对话框,但是

  • 跨域策略文件crossdomain.xml的配置方法

    一、crossdomain.xml文件的作用    跨域,顾名思义就是需要的资源不在自己的域服务器上,需要访问其他域服务器。跨域策略文件是一个xml文档文件,主要是为web客户端(如Adobe Flash Player等)设置跨域处理数据的权限。打个比方说,公司A部门有一台公共的电脑,里面存放着一些资料文件,专门供A部门内成员自己使用,这样,A部门内的员工就可以访问该电脑,其他部门人员则不允许访问。

  • 跨域策略文件--crossdomain.xml

    为什么需要采用 crossdomain.xml 文件? 如何提供crossdomain.xml文件? 如何获取crossdomain.xml文件? 跨域策略文件 跨域策略文件是一种 XML 文档,旨在为 Web 客户端,比如 Adobe Flash Player 或 Adobe Acrobat(但不限于这两类客户端)授予跨域处理数据的权限。当客户端请求获取特定源域上托管的内容、且该内容将请求定向至除自身域以外的其他域时,远程域需要托管跨域策略文件,从而授予源域的访问

  • Win11 操作(五) parsec 6023 错误

    只要你的网络是ipv6 使用parsec就没有太多毛病,如果实在不行你就用手机开热点,因为手机的网络都是默认开启ipv6的。

  • 如何利用Parsec+Zerotier+moon实现远程电脑云电脑、云办公、云游戏

    ​ RD Client 没法串流,向日葵带宽受限,同时也没办法打游戏。那么可不可以自己实现一台云电脑来实现云游戏呢?答案当然是可以的了,下面文章将进行介绍Parsec​ 这是我目前使用的终极远程桌面方式了,我之前写过通过,以及利用,感兴趣的朋友可以看一看。​ 使用Parsec 的话,个人所知主要有以下几种方式,这里主要介绍的是第五种方式,但每一种方式如何设置,通过这篇博客,都进行说明了。写这篇博客的目的也是为了日后自己更换环境可以快速进行配置。用记号说明以下,这样看的比较清晰。

  • 文件服务器策略,的Adobe套接字策略文件服务器问题(Adobe Socket Policy File Server

    任何人都已经能够成功地实现服务,服务需要套接字策略文件,flash播放?我正在由Adobe在提供的服务的Python实现http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html并使用以下策略文件:和接收从Flash此消息:[SecurityErrorEvent type="securityError" bub...

  • 在浏览器中运行的Parsec客户端

    Parsec Web客户端允许您通过Chrome 69 连接到Parsec主机

  • crossdomain 如何实现http访问https资源

    [code="xml"] [/code]

  • 安装parsec提示出现的一些错误

    解决方案https://blog.csdn.net/ai297313/article/details/46731131

  • 关于跨域策略文件crossdomain.xml文件

    下载flexpaper源码修改后做成swf阅读器,要加入待阅读的swf文件,可以在flex里调用js的方法来获取swf文件的路径的方法,在js只专注获取路径就行,等着flex来调用:但这里会遇到一个问题那就是出现安全问题,如下的提示: Error #2044: 未处理的 onDocumentLoadedError:。 text=Error #2048: 安全沙箱冲突:http://loca...

  • PARSEC-3.0编译错误

    OS: Ubuntu 14.04 LTS (x86_64) ***error 1OpenSSL 1.0.1e 与perl5.18 不兼容 POD document had syntax errors at /usr/bin/pod2man line 71. make[1]: *** [install_docs] Error 255 修改 1降低perl 版本,perl-5.1...

Global site tag (gtag.js) - Google Analytics