我现在正在阅读J2EE 1.4规范,并且有很多我不明白的术语。 这是来自容器的规格:
Containers为J2EE应用程序组件提供运行时支持。 容器为应用程序提供底层J2EE API的联合视图 组件。 J2EE应用程序组件永远不会直接与其他J2EE交互 应用组件。他们使用容器的协议和方法 彼此之间以及与平台服务进行交互。插入一个容器 应用程序组件和J2EE服务之间允许容器 透明地注入组件部署定义的服务 描述符,例如声明式事务管理,安全性检查,资源 汇集和国家管理。
由于我来自Web开发世界,我无法理解,这究竟是做什么的,以及容器的用途是什么。提供运行时支持是什么意思?它如何使J2EE在术语或可伸缩性方面成为更好的系统?
答案 0 :(得分:62)
J2EE / Java EE应用程序不是自包含的。为了执行它们,需要在容器中部署。换句话说,容器在JVM之上提供执行环境。
此外,应用程序依赖于几个API,如JPA,EJB,servlet,JMS,JNDI等。符合EE的容器的作用是提供所有或部分API的标准实现。这意味着理论上,只要依赖于标准API,您就可以在任何容器上运行应用程序。
从技术角度来看,容器只是另一个带有main()
方法的Java SE应用程序。另一方面,EE应用程序是服务/ bean / servlets / etc的集合。容器找到这些组件并运行它们,提供API实现,监视,可伸缩性,可靠性等。
答案 1 :(得分:6)
JEE容器提供了源代码的包装。
典型的容器是经典的EJB数据bean,也是消息驱动的bean。在某种程度上,servlet和portlet也可以被视为容器。
容器提供了大量服务: -
答案 2 :(得分:3)
通常,一个Java应用程序使用一个JVM,每个应用程序都有一个操作系统级别的进程。容器允许多个Java应用程序在一个JVM下运行。
答案 3 :(得分:2)
提供运行时支持是什么意思?
您来自Web开发世界,这意味着您知道必须通过HTTP协议访问为Web制作的传统应用程序。 Java是一种在设计上在JVM上运行的编程语言。
那么如何将HTTP请求链接到Java代码?
必须要做的事情。像Apache这样的HTTP服务器可以做到这一点,并且使用旧式通用网关接口(CGI),当Apache服务器获取HTTP请求时,您可以调用Java代码。
这很好,但在某些时候,网络应用程序需要身份验证 - 可以为此编写代码,Web应用程序将需要一些数据库访问 - 也可以编写代码,Web应用程序将需要一些UI代码也可以用MVC等编写。
这个网络应用程序需要其他网络应用程序肯定会有,并且可以看到共同需求:身份验证,数据源(如数据库等)等。
Java已经将许多这些需求作为API提供,如前面的答案所述,为什么不将所有这些知识和重用的常见要求放在可以在运行时支持Web应用程序的东西上:JEE容器。
如何使JEE成为一个更好的系统或可扩展性,架构?
我认为问题是为什么JEE比使用CGI的简单HTTP服务器更具可扩展性?
其他人已经回答了这个问题,但是我之前的回答让我更清楚。
希望这有帮助。