【问题标题】:Java EE 6 and alternatives [closed]Java EE 6 和替代品 [关闭]
【发布时间】:2011-06-09 12:34:42
【问题描述】:

我是一名 Java SE 开发人员,但我拥有丰富的网络背景(PHP、Perl/CGI 等),现在我正在开始新项目。它将具有 Web 界面、意大利面条式业务逻辑、作为存储的关系数据库以及与其他服务的连接。我从头开始做。

我的同事告诉我要使用 spring、spring security 和 struts。 我简要查看了 Java EE 6 规范,发现它几乎涵盖了企业应用程序的所有方面。我问我的同事为什么需要 spring 和 struts,但看起来他们使用技术只是因为他们熟悉它们而不熟悉经典的 Java EE 6 堆栈。

所以,我的问题是:Java EE 6 有什么不好? 如果有 JNDI 查找,为什么我需要 spring?为单元测试创​​建假 InitialContext 需要一两天时间。仅此而已:我不使用 spring 等外部工具。 如果 Servlets 规范中内置了安全性,为什么我需要 spring-security? 我可以使用 web.xml 将任何请求映射到任何 servlet,不需要 struts.xml。我可以使用 servlet-filters 而不是 struts 拦截器。 有RMI,所以我不需要spring-remote。 等等……

如果有 Java EE 6,我为什么还要用那些花哨的东西来打扰自己?

我真的很想找到 Java EE 6 不够用的情况。 你有吗?

谢谢!

【问题讨论】:

  • 当时的老式 J2EE 和现在的现代 Java EE 6 之间有很大的不同。你在说什么?然后,Spring 和 Struts 是 J2EE 之上的优秀附加组件。但是现在,Java EE 6 已经提供了几乎相同的功能。你的同事可能还悬在远古时代。
  • 抱歉)Java EE 6。我不会使用 Java 1.2 )))
  • 请修改/重新标记您的问题。你不妨重新考虑一下:)类似的问题herehere
  • Done) 但我的问题还是一样:为什么每个人都使用替代技术而不是 Java 企业?
  • 你还在谈论“J2EE”。至于为什么,他们仍然需要满足相对较新的 Java EE 6。

标签: java spring struts java-ee-6


【解决方案1】:

人们为什么使用 Spring 以及为什么它如此受欢迎需要一点历史。

过去,Spring 比 Java EE 应用程序更简单。我指的是 EJB2.x 规范。我觉得有一种反抗该规范的复杂性质的感觉。开发人员想要一个更简单的架构,Spring 为他们提供了这一点,允许他们编写 POJO(普通旧 Java 对象)而不是必须实现特定接口才能获得所需功能的类。

Spring 还使 2 个原则更受欢迎:控制反转 (IoC) 和依赖注入。结合起来,这两个原则提供了一种不同的方式来连接应用程序的各个组件,并在应用程序运行时将这些组件放入应用程序中。再加上只写 POJO 的想法对许多人来说非常有吸引力,因为代码更简单,并且更容易连接所有组件。

较新的 EJB3 规范取消了 Spring 必须提供的一些功能,但 Spring 不仅仅是一个 IoC 容器。它为 JDBC 访问数据库提供了很好的模板、处理事务的多种简单方法、测试实用程序、MVC 堆栈等等。它很受欢迎并且仍然很受欢迎。我听过的一个笑话是

“EJB3,没人问的问题的答案……”

EJB3 是一个不错的选择。春天是个不错的选择。 Grails 也是一个不错的选择(使用 Spring、Hibernate)。

【讨论】:

  • 我是 Grails 的忠实粉丝!令人惊讶的是,您启动和运行的速度有多快。
  • 我没有。 Grails 很好,但是从我们使用的版本——1.3.3 开始——仍然相当不稳定。我们必须自己修复一些错误(当然是在报告之后)。而且它们不是一些极端情况下的错误。
  • @bozho,是的,我同意有问题;它还不完美。但最终,它让我在很多项目上都走得更快。
  • 我不得不对“没人问的问题”部分提出异议。每个人都讨厌 EJB2 并且想要更好的东西……显而易见的问题是我们能从通用规范中得到它吗?但我赞成这是一个好的、简洁的答案。
【解决方案2】:

“那么,我为什么需要弹簧?”

伊利亚!最后你说服了我(希望你自己)你不需要 Spring。实际上,这堆东西并没有什么特别的好处……除非你已经习惯了。他们写了一本关于网络技术的书,然后将计算机科学的其余部分加入其中,并称之为 RESTfull。

“但是,想象一下有很多处理表单输入的代码和很多模型。每个控制器都可能有一个视图”。

阿米尔! - 很好的考虑。我所知道的 Web 框架之间的真正区别在于组件的定义是什么。 Struts 具有三种类型的组件——View、Controler 和 Model 组件。乍一看看起来不错(肯定比其他一些更好)。但是你可以用这些组件构建什么? - 一页视图、一页控制器和一页模型。天知道从这三行组件中绑定物品的成本是多少——如果可能的话,可能是一个巨大的配置。

真正的解决方案是(正如您在上面引用的实际所述)是一个组件概念,每个组件都有其视图、控制器和模型。到目前为止,只有一个框架能做到这一点——HybridJava。 Spring 中的网页构建块是什么?

【讨论】:

    【解决方案3】:

    听起来您需要先使用 Spring 和 Java EE 6 对特定功能进行 POC,这样您就可以将两者与实际工作原型进行比较。

    然而,我使用 spring 的原因是:

    • 能够将我的应用程序从应用程序服务器中抽象出来。因此,我可以在任何应用服务器上运行,也可以在 AS 之外运行以进行单元测试
    • 为了改进我的设计,我必须编写大量样板代码
    • IOC/DI - 需要依赖的对象不知道如何获取它们 - 它只知道它需要什么接口。一些第三方提供它们。是的,您可以在 Java EE 6 中推出您自己的第三方版本,但它已经在 Spring 中可用。
    • Bean Managed Transactions - Spring 提供了对事务进行完全低级别控制所需的所有工具。我总是建议使用 BMT,因为它可以为您提供可能需要的灵活性。

    【讨论】:

      【解决方案4】:

      Java EE 不需要 Spring。 Spring 只是让复杂的 Java EE 组件易于使用。

      【讨论】:

      • 我知道)但是我可以使用 JNDI 而不是 spring DI。那么,我为什么需要弹簧呢?
      • JNDI 无法与 Spring DI 相提并论。 CDI 是。
      【解决方案5】:

      Spring 是一个模型-视图-控制器,它使 Java EE 更简洁、更有条理。分离模型、视图和控制器在结构上更正确。

      我同意你的看法。如果它是一个简单的网站,那么我认为您只需使用 Java EE 就可以完成所有工作。然而,想象一下有很多处理表单输入的代码和很多模型。每个控制器可能有一个视图。您可以创建一个 servlet,然后转发到正确的 jsp 页面,或者您可以使用 spring,因为它已经完成了所有这些。

      决定您需要使用多少弹簧。一个好的框架可以让您挑选和选择要使用的部分。我认为 spring 做得很好,因为你可以只使用 mvc 模型或者更进一步,用它做更多的事情。

      最后,spring 有依赖注入,这使得配置更容易。

      【讨论】:

      • 谢谢。我可以自己实现 MVC 模式:每个 servlet 都是一个控制器,而 JSP 页面只是一个视图。我不会在 JSP 中使用任何逻辑(因为无法测试)。我可以使用 JNDI(服务查找)而不使用 spring。它和依赖注入一样好,不是吗?
      • 我认为您正在尝试重新发明轮子。这很酷,但是当 Spring 已经经过数百万用户的测试时,你为什么要这样做。如果您说学习经历,那么我完全支持您。否则,您只是重复使用已创建和测试的库。
      • @BalusC 你能详细说明一下吗?假设我有一个购物应用程序。我不想要一个用于项目查找的 servlet、一个用于创建订单的 servlet、一个用于客户历史记录的 servlet 等等吗?
      • @glowcoder,看看现有的 MVC 框架,如 JSF、Spring MVC、Struts、Vaadin、Echo 等。它们都使用单个 servlet 作为 MVC 入口点(控制器)。要了解基本概念,您可能会发现此答案很有用:stackoverflow.com/questions/3541077/…
      • 如果你真的“获得”了面向对象编程并认为基于 java 的 Web UI 框架应该完全支持它(就像 20 年前的 C++ 桌面 UI 框架所做的那样),那么你会非常欣赏“组件”面向'Wicket UI 框架优于传统的'面向动作'风格的 JSP/Struts/Spring MVC UI 框架。
      猜你喜欢
      • 2012-09-06
      • 2011-01-24
      • 2010-11-26
      • 1970-01-01
      • 2011-02-26
      • 2011-08-18
      • 2014-08-26
      • 2011-02-19
      相关资源
      最近更新 更多