Java EE 规范与实施

Java EE Specification vs Implementation

我最近开始使用 Java EE 并且很难理解它。我在这里阅读了一些关于 SO 的答案,但我仍然觉得我的理解存在一些差距。基本上,Java EE 是一个规范,TOMCAT、Glassfish 等应用服务器都有具体的实现。此外,任何人都可以提供 EE 的实现。

所以,我从 Maven 仓库下载了 javax.sevlet-api-4.0.1-sources.jar,我可以看到它们只是接口,我假设我们只是使用它们构建项目?

在tomcat lib 文件夹中有一个servlet-api.jar。这是 Servlet 的 tomcat 实现吗?如果是,那么是否可以用另一个 servlet 版本实现替换它?

现在,Hibernate 是 Persistence API 的实现。如果我想在 Tomcat 中使用 Hibernate。我只需要将与 Hibernate 相关的 jar 添加到我的应用程序中,就可以将它们用于构建和 运行?没有真正得到合同 类.

您在编译代码时需要 servlet-api jar 文件,因为那是例如HttpServletRequest 是。您不需要将该 jar 包含在您的应用程序中,因为它已经由您将 war 文件部署到的 Servlet 容器提供,例如Tomcat.

使用 Tomcat,各种 servlet class 的 实现 catalina.jar 中,至少 Tomcat 9,例如ApplicationHttpRequest 是 class 实现 HttpServletRequest。你不需要这个来编译你的代码。

准确地说,Tomcat 不是一个完全成熟的 JavaEE 容器,它只处理部分 JavaEE 规范(主要是 servlet、jsp、jndi 和其他一些)。

正如 Andreas 所写,您需要 serlvet-api.jar 来编译您的代码(否则 HttpSerlvetRequest 将丢失),但是 tomcat 已经提供了它(作为接口)以及实际实现,您应该将其作为 "provided" 依赖项添加到您的 Maven 文件中。