java - Tomcat API 与其他 API

标签 java oracle api tomcat servlets

最近在学习Tomcat和servlets。现在我开始意识到 Oracle APITomcat API至少有些不同。我知道 Oracle API 应该更广泛,但即使在 Tomcat 操作的限制下,它们似乎具有完全不同的包等。

这似乎很愚蠢,但我找不到任何答案。有人可以解释一下差异吗?实际上,如果我构建一个在 Tomcat 下运行的服务,它是否也可以在 Glassfish 中运行,而不对导入进行任何重构?

--- 编辑 ---

所以,显然我将 Tomcat API 误认为是 Servlet API 等。

enter image description here

解决方案不是查看上图中的 Tomcat Javadoc,而是查看 Servlet Javadoc 或任何有问题的内容。图片中的列表可以在Apache Tomcat 8 Documentation Index找到。 ,在左边,稍微向下。

谢谢,Andreas 和 EJP。

最佳答案

Java 企业版

您所说的“Oracle API”实际上是 Java Enterprise Edition (Jave EE)规范。我建议您避免使用用词不当。

Java EE 是在 Java Standard Edition (Java SE) 之上分层的数十种不同技术的庞大集合。 Java EE 的各种实现支持不同的部分,不一定支持所有部分。

技术子集

Apache Tomcat项目,以及类似的Eclipse Jetty项目和others , 有意仅实现这些技术:

这几个 API 只是 Java EE 的一个小但重要的子集。

Tomcat API您链接的是特定于 Tomcat 的实现。开发人员很少会使用该 API。相反,我们坚持在 Servlet、JSP、EL 和 WebSocket 规范中发布的接口(interface),所有这些都是作为 JSR 发布的。遵守规范意味着您的 Web 应用程序可以部署在其他实现上,作为 Tomcat 的替代方案,以备不时之需。

diagram showing nested subsets of Java EE, Web Profile, Web containers, and distinct from that is the Tomcat-specific API

网站简介

Java EE Web Profile是一个包括 Servlet 和 JSP API 的规范 along with several more , 但仍然是 all the possible Java EE technologies 的一个子集. Apache TomEE是 Web 配置文件的一种实现,它从 Tomcat 开始并添加了更多库。另一个例子是 Glassfish,它在 either a complete Java EE edition or a stripped-down Web Profile edition 中可用。 .查看问题,What is different about the Java EE packages? (SDK/normal vs Web Profile) .

“完整”实现

Some products实现所有(或几乎)Java EE 规范。

有时这被描述为“完整”实现。我认为该标签具有误导性,因为它暗示子集实现丢失或缺少所需的东西。恰恰相反。您应该始终使用只包含您需要的部分的最精简的实现。负载越重的服务器占用的内存越多,启动和停止的速度越慢,并且可能会花费更多的钱。例如,我仅使用带有 Vaadin 的 Apache Tomcat 8 来构建和部署高度交互的桌面式 Web 应用程序7 在 Mac OS X 上的 Java 8 标准版 (SE) 之上。

另请记住,许多 Java EE 技术可以独立于完整的 Java EE 实现。因此,您可以从更精简的实现开始,然后为您需要的少数个别技术添加库。例如,Bean Validation添加an implementation的JAR文件即可在Tomcat上使用.

关于java - Tomcat API 与其他 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38320214/

相关文章:

java - 循环 ArrayList(扩展 ArrayList)

java - Hibernate 翻译功能

mysql - Oracle 数据转储和数据恢复

python - 从 YouTube API 响应中选择特定键

java - hibernate 中的异常 "org.hibernate.PersistentObjectException"

java - 通过 javax mail 在文件夹之间原子移动邮件消息

Oracle:如何使用 DBMS_REDEFINITION 包对列重新排序?

python - Github 的 API key 加密?

iphone - UISearchBar 在每次输入字母时调用 API,而不是在单击搜索按钮时调用 API

java - 使用 Java Server Faces 将多个输入字段绑定(bind)到支持 bean 属性?