Struts 1.x与Struts 2.x的区别

8
我已经在SO上查看了一些关于Struts 1与2的问题,但没有一个能够回答我所关心的问题。我即将开始架构一个新系统,对一个非常老的桌面应用程序进行全面的重新设计。目标是使其基于Web,增加更多功能,使其更易用等(通常的重新设计原因)。将开发该系统的团队主要是Java开发人员,并且在过去的5年中广泛使用了Struts 1.x。该系统预计将持续很多年,因此在未来3-5年内再次进行重新设计并不是一个选择。它不打算大量使用AJAX。我的问题是,既然我的团队对Struts 1.x如此熟练,为什么要转向Struts 2?我知道有一些改进,但我担心团队需要花费的时间和由于错误使用而需要重新工作等会远远超过我们从Struts 2中获得的任何好处。我们喜欢Struts 1,它可以做我们需要它做的事情,并且所有的设计模式、标准、最佳实践等都已经形成。是否有任何Struts 2的杀手级特性或者Struts 1的严重问题,这些会影响到决定是否继续使用Struts 1呢?

3
使用这样一个老框架开始新项目我会有所疑虑。 - Steven Benitez
7个回答

9
如果您正在从头开始构建系统,我一定会选择使用Struts 2.x版本。对于Struts 1.x团队来说,学习曲线不会太大,但是您将能够利用最新的MVC框架。
对我而言,Struts 2.x的两个主要功能将提高生产力:
- 内置AJAX支持 - 不再需要ActionForms - 如果您想要,可以直接绑定到域对象中,因此这个中间步骤已经被省略了。
如果您正在开发一个大型项目,您可能需要考虑使用组件框架,例如JSF 2或Wicket。如果您决定使用基于Action的框架,则我个人认为Stripes是一个更具生产力的框架。

4

Struts 1.x 是一个2000年的老技术。为什么在全新的应用程序中还要考虑使用它?

我认为最大的缺点是 Struts 将你限制在基于 JSP 的浏览器用户界面上。Struts Actions 只能在框架内重复使用。如果你需要将移动设备无缝集成到该系统中,你将会遇到麻烦。

我会开始考虑 Web 服务,最好是基于 REST 的,以及 AJAX。这个世界已经变了。我会寻找 Struts 的替代方案,比如 Spring 或 Play。学习新的 Web 框架不是什么大问题,但好处可能是值得的。

那些过去五年都在使用过时框架的员工也会感谢你。是时候学习新技能了。

更新:如果你已经尝试过,并且不能拖延时间,受到太多限制,那么我认为你已经知道了答案。你来这里希望得到什么?我没有看到你有什么你没有认真思考的争论。


我完全理解你的观点。但我的担忧是,我曾参与过一些项目,在这些项目中选择了新技术(因为它更加先进,并具有x、y等优点),但由于对框架的理解不足,做出了糟糕的设计决策,导致项目严重延误。我不能允许这种情况在这个项目上发生,所以我倾向于保守!至于Spring/Play,我很想使用Play(我是Play书籍的作者),但管理层不太可能接受这个相对年轻的框架(我已经尝试过了)。 - Codemwnci
1
+1 对于Struts 1的评论。Struts 2是一个不错的选择,Play也是如此。我认为除非你使用Spring DI/AOP,否则使用Spring MVC没有什么意义。 - Steven Benitez
使用 Spring MVC 不比使用 Struts 1.x 差。而且你不必使用所有的 Spring 组件来受益于其中的部分。它也可以很好地单独使用。 - duffymo
我前来的原因是我有 Struts1 的经验,但没有 Struts2 的经验。如果要从团队熟悉的东西转移开来,我需要一个充分的理由,因此我想看看是否有足够强大的理由来抵消学习曲线的困难。 - Codemwnci

2

1
我认为,与其问“坚持使用Struts1还是转向Struts2?”,不如问“坚持使用Struts1还是转向现代的基于动作的MVC Web框架?”为什么要转移?因为Struts1已经老旧(坦白说)很糟糕。为什么不转移?因为我们必须学习一个新的框架。当然,你知道你的资源,你必须进行评估。但请记住,现代的基于动作的框架(如Struts2、SpringMVC、Stripes)非常容易学习,如果你的团队已经了解了Struts1,那就更容易了。
就我个人而言,我已经从Struts迁移到了Struts2,现在我不想回到Struts1编程(那些笨拙的ActionForms!)。我认为Struts2要好得多。但是,人们也必须考虑到Struts2也有其弱点,该项目似乎并不是很健康,社区也似乎不是很活跃。从Struts1到Struts2的跳跃并不大,但也不像版本更改那样小(“Struts2”是一个错误的名称),可能比跳跃到SpringMVC还要大,所以我建议考虑它(或者Stripes)。

0
更一般地说,Struts 2.x分层框架相对于Struts 1.x更加先进。例如,在数据层中,Struts 2.x在VO和DAO之间有DO层。同样的,其他功能在下面的链接中提到。 http://struts.fromdev.com/2008/08/struts-1-vs-struts-2.html ..
由于您的团队更有经验的是使用Struts 1.x,我认为将代码迁移到Struts 2.x不会花费太多时间。
请具体说明您期望的差异是什么。

0

在Struts2.0中有更多的功能和优势,但是没有表单bean,在Struts2.0中有一个好的、强大的验证框架,最重要的是,在Struts2.0中,每个请求都有一个Action实例,而在Struts1.x中,整个应用程序只有一个Action实例。

所以选择权在你手中。 :)


0

主要原因是将struts 1.x替换为struts 2.x,是因为struts 1.x现在处于维护阶段,没有太多的活跃开发。

现在,当一个团队开始使用struts 1.x时,他们会很快了解到底层系统。但在此之前,让我明确一点:struts1.x与struts2.x没有相似之处,唯一的相似之处是从父级继承的名称。struts2有以下优点:

  1. 基于Action的框架
  2. 强大的Ajax支持
  3. 拦截器方法(框架的核心)
  4. 与Servelet API分离,这意味着纯POJO,因此单元测试将更加容易

但我的观点很简单,即struts2和struts1只在名称上相似,但在底层架构方面却有很大的不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接