最近在学习Tomcat和servlets。现在我开始意识到 Oracle API和 Tomcat API至少有些不同。我知道 Oracle API 应该更广泛,但即使在 Tomcat 操作的限制下,它们似乎具有完全不同的包等。
这似乎很愚蠢,但我找不到任何答案。有人可以解释一下差异吗?实际上,如果我构建一个在 Tomcat 下运行的服务,它是否也可以在 Glassfish 中运行,而不对导入进行任何重构?
--- 编辑 ---
所以,显然我将 Tomcat API 误认为是 Servlet API 等。
解决方案不是查看上图中的 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 的替代方案,以备不时之需。
网站简介
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/