使用Java EE和Java SE可以更好地实现哪些应用程序?

时间:2010-12-29 18:55:01

标签: java java-ee

如果以下问题有点模糊或幼稚,请原谅我。它受到另一个线程中的一些讨论的启发,这再次引起了我对Java EE的兴趣。

多年来,我听到了一些关于它的点点滴滴,甚至还参加了一个涵盖EJB的软件工程课程。但是,我意识到我对它及其用途几乎一无所知。

所以,我真的有两个问题:首先,如果我正在设计一个Web应用程序服务器,那么哪些要求会导致我选择Java EE而不是Java SE?它在很大程度上取决于我想要部署的应用程序,还是Java EE的基本方面使得任何应用程序服务器更好?

我的第二个问题:部署中有哪些着名的Java EE应用程序?有没有开源的?

非常感谢。

3 个答案:

答案 0 :(得分:8)

如果您只使用servlet,JSP和JDBC实现应用程序,那么您不需要完整的Java EE堆栈。这三个包含完整堆栈的子集。

除了servlet,JSP和JDBC之外,完整的Java EE堆栈还包括EJB(分布式,事务性,生命周期管理组件),持久性JPA,消息传递JMS,命名和目录服务JNDI等。如果你需要这些项目,一定要使用Java EE和成熟的应用服务器。

应用服务器规范是Sun采用的方向,因为他们想要创建一个市场,其中有几个竞争对手,包括他们自己。他们取得了很好的成功:我们现在拥有WebLogic,WebSphere,JBOSS,Glassfish,OpenEJB,Geronimo和其他可用的应用服务器。

但这不是100%必要的。例如,Microsoft的.NET除了IIS Web服务器和底层操作系统之外没有任何其他功能。他们假设您在Windows和.NET上运行,因此他们不会尝试抽象Java EE所做的事情。

如果您更喜欢Spring到Java EE,那么您可以编写企业应用程序,而无需使用Spring + Tomcat或其他servlet / JSP引擎。在这种情况下,不需要完整的Java EE应用服务器。

答案 1 :(得分:2)

在实践中,您几乎不会在纯Java SE之上开发Web应用程序。 Java SE本身适用于图形桌面应用程序或基于文本的命令行实用程序。

如果您想开发一个类似于您创建的Web应用程序,例如PHP或RoR,您使用的最少的是所谓的Servlet container。这些都运行在Java SE之上,并为您提供Java EE中的Servlet和JSP页面。众所周知的例子是Tomcat和Jetty。

然而,大多数Web应用程序需要的内容比Servlet containers提供的内容更多。几乎总是需要一些Web框架(例如JSF,Struts,Wicket,Tapestry,Spring MVC),一些ORM框架(通常是Hibernate,但有一些替代方案,如EclipseLink)和一个事务管理器(JoTM,JBossTS,Atomikos)。最后,大多数人还喜欢使用容器进行依赖注入和更高级别的事务管理(例如核心Spring容器,OpenEJB,Weld)。

然而,所有这些都需要开发人员构建和维护自己的软件堆栈。我提到的所有这些不同的东西必须单独下载,由于不同版本中的共享依赖性,它们可能相互兼容,也可能不兼容。

这是Java EE发挥作用的地方。

Java EE为您提供了一站式框架,可以在一个软件包中提供上述所有功能。您可以将其下载到一个软件包中,然后在一个软件包中进行升级。通常,与自己构建堆栈相比,这些部件可以更好地协同工作。

您可以将此与下载像Ubuntu这样的完整Linux发行版进行比较,或者从头开始构建您自己的Linux系统,仅从内核开始。

在早期,Java EE(当时称为J2EE)是重量级,昂贵,封闭源和象牙塔和供应商驱动的。如今,Java EE非常轻量级,免费,开源,主要基于已经证明在实践中工作的内容。

虽然对于许多Java EE实现而言,它认为您没有为不使用的内容付费(在内存或启动时间方面),但当前的Java EE规范已经定义了一个较小的Java EE“概要”典型的Web应用程序不需要的东西。这称为web profile。对于最终用户而言,没有明确的理由明确选择Web配置文件,但对于创建Java EE实现的人来说,这是一个巨大的胜利,因为它更容易实现。

最后,几乎所有Java EE部分都是单独提供的,因此您也可以构建自己的堆栈,完全由Java EE元素组成。然而,这并不常见,因为仅仅采用现有的Java EE实现几乎没有什么好处。

答案 2 :(得分:1)

Java EE实际上只是建立在SE之上,所以当你有一个需要EE中存在的库或功能的Web应用程序时,你会选择EE。如果你需要额外的东西,EE会更好。 (EE是一把吉他和一个盒子.SE只是一把吉他。)