【问题标题】:Advantages and Disadvantages of Java EE vs. ServletsJava EE 与 Servlet 的优缺点
【发布时间】:2009-08-11 20:59:28
【问题描述】:

使用 Java EE (EJB) 而不是简单的 Servlet 实现的主要原因是什么?

我正在开发一个新项目,该项目主要是一个必须非常快速和可扩展的 Web 服务。

抱歉有任何困惑,虽然我在 Java 方面经验丰富,但我对 Java Web 世界还是很陌生,可能不会很好地问这个问题。

【问题讨论】:

  • 看到 servlet 和 Web 服务如何成为 J2EE 规范的一部分,我不能 100% 确定您在这里问的是什么......整个事情听起来有点像“额外的开销会不会的 HTML" 导致我的网站性能明显下降?
  • 相比什么??有什么要求?这不是一个经过深思熟虑的问题。 Servlet 是 J2EE 的一部分...
  • 这句话的措辞可能不太好,但实际上是在问一个好问题。至少有两种实现 Web 服务的 JEE 方式,一种是通过有效的 servlet 公开的 POJO,另一种是可以公开 Web 服务接口的 EJB。两者各有优势。

标签: java servlets jakarta-ee


【解决方案1】:

Servlet 是 HTTP 请求监听器;他们无法回应其他任何事情。

如果您在 servlet 中嵌入了大量逻辑,则其他任何客户端都无法使用它。

在 POJO 中编写您的应用程序。在不涉及应用服务器的情况下对其进行彻底测试。然后担心你想如何打包和部署它。小服务程序? EJB?网络服务?还有什么?没问题 - 这些只是打包和部署问题。首先获取您希望在 POJO 中正常工作的行为。

Spring 在这里可以为您提供很多选择。我会推荐它。

【讨论】:

  • 如今的 EJB 几乎都是 POJO、POJO + 一些注释,它们可以同时具有 RMI 和 Web 服务接口。使用诸如 Spring(或 EJB 3 ;-) 之类的东西是个好建议。
  • 关于 EJB3 是正确的。开放式 EJB 可以在没有 WebLogic 或 WebSphere 的情况下运行它们,但我仍然更喜欢 Spring。
  • 谢谢,我喜欢你关于刚开始使用 POJO 的建议,然后担心 Web 服务器包。这听起来像是一个很棒的计划,很高兴听到将它打包到不同的容器中并不会太痛苦。
  • Servlet 是 HTTP 请求监听器;他们无法响应其他任何事情。 这是不正确的 - Servlet 作为一种技术绑定到任何特定协议。尽管在实践中大多数 Servlet 都用于服务 HTTP。
【解决方案2】:

EJB 的规范 1.x 和 2.x 增加了大多数 webapps 不需要的复杂性。

由于这种复杂性,新框架似乎简化了开发和运行时架构(Hibernate/Spring/其他微容器/其他 ORM 框架)。

EJB 的 3.x 与这些变化相匹配(通过 JDO 和 JPA),现在,使用带有这些增强框架的 Servlet 或带有 EJB 3 + 的 Java EE 可以得到基本相同的结果。

使用 Java EE 应用服务器会给您带来许多管理优势(用于管理池、日志、监控、事务等的 GUI)。没有它们,您可能会得到相同的结果,但您必须手动完成(编辑配置文件)这可能看起来不太成问题,但如果您计划为您的 webapp 设置管理员,最好使用该服务器开箱即用的管理工具。

【讨论】:

  • 谢谢 Oscar,关于管理优势的建议非常好。
【解决方案3】:

Web 服务是无状态的吗?如果是这样,我认为使用完整的 Java EE 服务器与 Tomcat 或 Jetty 等轻量级服务器相比没有任何真正的优势。您可以使用其中任何一个部署 jax-ws 实现,并轻松完成您需要的工作。如果涉及某种状态,并且您最终希望在多台机器上共享它,那么 Java EE 就可以派上用场。

话虽如此,我认为 Java EE 不会降低性能。应用服务器通常需要更长的时间来启动,并且需要花费更多的精力来管理,但是一旦它们启动并运行,性能应该是相似的。

【讨论】:

  • 我同意 JEE 应用服务器可以很好地集群解决方案,但这不是使用它们的唯一原因。通常,Web 服务应该是无状态的(或非会话的),因此有状态不是使用 JEE 的常见驱动程序。我认为我们将方法级别的安全性和重要的事务要求视为实现完整 JEE EJB 解决方案的更强大驱动力
  • >The app servers generally take longer to boot - 快进 3 年,现在应用服务器的启动时间大致相同。 JBoss AS 7、GlassFish V3、TomEE 和 Resin 都是一两秒。甚至 WebLogic 现在也只有几秒钟 ;)
【解决方案4】:

如果您的 Web 服务可能需要任何程度的“企业”功能,例如每个方法的安全性或事务,请使用 EJB。

使用 EJB 3,这实际上一点也不难,只需添加几个注释即可。

否则 servlet 后面的简单 POJO 就足够了。

【讨论】:

  • "...如果您的 Web 服务可能需要任何程度的“企业”功能,例如每个方法的安全性或事务使用 EJB..." - 如果您是使用弹簧。您可以在没有 EJB 的情况下同时完成这些事情以及更多事情。
  • 是的,你对 Spring 的看法是正确的。您是否同意从技术上讲,我们可以使用开箱即用的 JEE、POJO、servlet 来提供 Web 服务——但是对于某些要求,我们会从 Spring 中受益吗?诸如每个方法的安全性和事务之类的东西会是两个这样的要求吗?
猜你喜欢
  • 1970-01-01
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多