以前看过 strtus1的源代码,最近看了webwork,因为webwork的关系,下了strtus2看。

我个人判断是,如果要在实际项目上用的话struts2不好。

因为他把mvc的结构复杂化了。

controller层和model容易混合。

你不得不在Controller层用Model(在这里用的意思是 Action类中你要 setModel(mode:Model));

很不喜欢这样的用法。

虽然有DrivenModel接口,本人试图把model和controller相分离,结果发现代码量很多.虽然他的

interceptor很诱人,但是还是放弃了。

测试中发现,要扩展代码也比较麻烦,要写一些interceptor而且这个interceptor又不能持有状态。

Controller不是Controller,Model不是Model的,让本人郁闷了好一阵子。

初学者最好别用,会让你的mvc思维发生混乱,如果想学点他的思想的话,那倒是无所谓,看了

webwork的源代码,学了很多。 这个是不能否认的

如果结构层次分明这一点来看我觉得Spring的 mvc框架最好。

(呵呵! bang:很赞同你所说的,struts2是被webwork强奸的产品,呵呵 佩服)

to suzhj:
>>我觉得发展方向应该是UI逻辑和数据分离,browser端使用RIA实现UI,而Server端只提供数据和业务逻辑
这个观点我在本论坛也曾看到过,来自s79和leebai的帖子,UI和后端彻底分离,只保持单一的数据传输,想法是如此的奇特啊!jdon框架不是要消灭action吗?好,基于这个种架构就完全不需要action了,负责后台业务逻辑的人专搞你的DDD,负责UI的人专心雕琢你的界面,要什么数据相互传递就是了,方法有ajax,脚本回调等等,这就有一个问题,界面人员必须精通js编程.
看了那么多用js渲染出来的酷酷效果,我都心动了,转去搞js似乎比学习java要有趣一些,呵呵,OO呢?不能丢啊,js不也可以OO吗?banq老师,对不起,我又偏离主题了,关于用easyjweb来抽象crud我已经开始尝试。

webwork
strtus2
Action的线程安全,加上Ioc,本来就导致Action成为了Model。大部分情况下,也不会有什么问题。而且我觉得,不把它当Model用,也就太浪费了。
s79和leebai提的东西,我也很喜欢,不过真的实践还是有问题的。搞得不好,你会发现结构比MVC还混乱。有的是暴露Service,有的又是直接Action成为Model,有的可能还直接上SQL,来个控件绑定。
Ajax不像桌面程序,有好的界面设计器。前端工程师和美工的配合也是问题。

不好意思,上面我有点跑题了,人家帖子主题是struts1 vs struts2。
总的来说,struts2和struts1只是名字有点关系,struts2直接来源于webwork2,比struts1好多了。
目前来说,适合我的口味。
[该贴被suzhj于2008-06-01 02:02修改过]

Java始终是好东西,可惜总是瞎折腾太多。

当初全天下的人都在用JSP+JavaBean+Servlet做Web,简单高效。就嫌“缺乏技术含量”,非要动不动就搞EJB和Framework。EJB是好东西,可是真正用得着EJB的地方有多少,不过5%;Framework也是好东西,可是真正用得着Framework的地方也不过是30%-40%。
于是50%以上的地盘,也就是纯Web领域,慢慢地被“缺乏技术含量”的PHP和ASP给占去了,可惜可叹。

现在本来SSH用得好好的,Struts2又跳出来了,复杂多了,慢多了,用得着多少?
再这么瞎折腾下去,早晚还得被.NET干下去。

banq没有用过struts2,不要乱评论。
struts2.1.2 release了,已经将dojo等垃圾从核心包中踢了出去。新的struts2更加清爽和干净了。
struts2 COC配置是很好用的:
<package name="admin.security" extends="default"
namespace="/security">
<action name="*/*" class="{1}Action" method="{2}">
<result name="index">/pages/admin/security/{1}/index.jsp</result>
<result name="input">/pages/admin/security/{1}/edit.jsp</result>
<result name="success" type="redirect">{1}/index.do</result>
</action>
</package>
这个配置我在实际的项目中匹配了security模块下的所有actions,非常好用。如果按照CoC的原则,一个配置就可以搞定所有actions了,当然,如果真的这样做有点夸张。
->但是由于可以有message这样的字段属性,其实增加性能风险...
不知道banq说的性能风险指的是什么,struts2的action不是singleton的,所以可以在action加属性(我还是推荐用清晰的ModelDriven模式)。这样,用java1.4以前的老眼光看确实有点性能问题,因为会频繁的产生大量的短期对象,但是,新的jvm优化了GC,短期对象的创建和回收是非常快的,不会对性能产生任何影响。据说,java7还要优化reflection,到时候,反射的性能将直追正向调用。不知道banq所说“没有任何设计考虑”从何而来?难道是因为strut2的设计者没有征求banq的意见?
->相反,JSF则比较简洁
JSF简洁?banq没有开发过它的UI吧?找现成的UI?反正我用过myfaces,icefaces等好几个UI lib,没有一个符合要求。自己开发UI简直是恶魔。倒是struts2让我可以随便使用RIA或者Ext之类的Widgets框架,少了许多约束,多了很多自由。

->群众的眼睛是雪亮,作为消费者和使用者...
消费者?有谁为struts付费吗?“强买强卖”?struts2用枪顶着你啦?“被他们这么忽悠”?struts2从来也没说兼容strut1呀,而且人家开始就说,不建议将struts1的应用升级为struts2,你没有看文档就乱说,居心何在?

->Webwork2的精髓在于TypeConverter、Ognl、极具扩展性的插件机制、UI模板这些精髓有几个是拿得上桌面的呢?
插件机制确实没什么用,struts2将jsf之类的都做成插件实在是多此一举。但是人家并没有强迫你用这些插件吧?Ognl也是,它可以象jstl一样简单,也可以象sql似的复杂,关键看你怎么用。

->再看看Struts2复杂的引入拦截器Inteceptor这样AOP...我看是诚心鼓动用户把开发重点放在表现层,而不是业务层。
貌似banq根本不知道Inteceptor是干什么用的,谁说Inteceptor是AOP了?照这麽说,ServletFilter也是AOP了。简单的说,Inteceptor是strut2的filter,它的应用场景和filter是类似的,不同的是Inteceptor可以访问XWork的值栈,可以和其他Intercepter交互。banq先看看文档在下结论吧。至于“鼓动”,我看简直是污蔑,就算struts2有什么不可告人的目的,也不会鼓动用户将业务放在表现层呀,因为就算是初学者也知道这是不对的。

->如果我们的界面不实现事件驱动,我们的Browser就不可能完全替代专有语言开发的胖客户端.
谁说的?Banq不会不知道Ajax吧?struts2完全可以和Ajax结合,实现与胖客户端媲美的界面效果。客户端的展现应该和服务器端分开,看看Ext吧(虽然性能有问题)。将复杂之极的客户端技术封装成taglib绝对是一个错误。
我认为,MVC框架用struts1/2、SpringMVC,随便哪个都可以,客户端根据不同的应用场景选择HTML、Ajax或者Ext/DOJO,这样的组合最为灵活。

BTW:我个人很喜欢JSF的MVC部分,可就是它的UI太难开发和扩展了...
BTW:Banq的JdonFramework应该是很不错的,但是不要在没有调查研究的情况下贬低struts2吧...
BTW:“struts2是被webwork强奸的产品”,很难想象这么尖酸刻薄的话会出自banq前辈之口。你怎么知道struts2不是自愿的?

[该贴被cats_tiger于2008-06-02 12:22修改过]
[该贴被cats_tiger于2008-06-02 12:26修改过]

cats_tiger 说得有理。

我主要是认为:Struts2确实比Struts1.X开阔了,有余地了,同时带来了复杂性,而大家在向简化方向努力,约定优于配置,别人在收束,而Struts2还在扩展,这显然有悖天下大势。如果这种扩张有很深的设计思想在后面,那倒是可以谅解,可是拦截器 插件这些都不是什么新玩意,所以只能判断为旧酒装新瓶,Apache组织他们是一丘之貉,当然愿意,可是我们用户不答应,所以,他们是在强奸民意。

这么说就比较容易让人接受了。struts2.1.2正在向banq所说的收束努力,不过我认为希望不大。要说简洁,以Guice为基础的Warp-servlet倒是在向这个方向迈进。可惜无论Guice还是Warp目前还远远无法撼动SSH的江山。struts2的plugin机制不能认为是一种“扩张”,它只是提供了扩展的可能罢了。综合来看,struts2还是各种MVC框架中比较好的一个,和Jsf\Tapestry持平吧。

看来学有很大的讨论空间啊..

新的项目用了struts2,越用越来气,感觉这个东西不伦不类的!真的搞不懂公司为什么连这个风险都不去评估一下就开用了!

用不好当然不伦不类,越灵活容易让人发挥的框架越容易被滥用。其实风险是使用不当。

之前几个struts2工程有的维护人员反映复杂,改点东西很麻烦,其实遇到的几乎是和我学习时遇到的问题一样,几个月不弄早就忘光了,面对一堆exception实在头疼。节后的新工程要回归jsp了。让jsf折腾了一段时间,工程还剩点尾巴没处理,在windows上表现也不算良好,但是部署进*nix之后似乎好多了。另外据说springmvc最近大有长进啊,有工夫看一看合不合用。
用得好不好当然有个水平问题,但是好东西是能让零基础的人也运用自如的,就像自动豆浆机一样按个钮就哗啦哗啦的流出来能喝了,如果好东西都像发明火箭一样在实验室级别里,也就没几个人能玩了。

google 出的 warp-persist 看起来势头很猛啊
banq能否评价一下

标准才是王道,Jsf是标准,是各大It厂商制定的标准,相信她是没有错的,至于struts2,本人不是非常的喜欢,感觉有点复杂,脱离了MVC的本质,没有做好view层的本质工作,struts1挺好的,也许是一致在用的缘故吧,很有感情,但是如果说以后哪个走的更远,我相信应该是struts2,毕竟,相比1.x而言,还是有很多可取之处的