【发布时间】:2015-10-20 17:59:30
【问题描述】:
Servlet 规范 3.0:
Web 应用程序类加载器 容器用来在 WAR 中加载 servlet 的类加载器必须允许 开发人员在以下 WAR 中加载库 JAR 中包含的任何资源 使用 getResource 的普通 Java SE 语义。如 Java EE 许可证中所述 协议,不属于 Java EE 产品的 servlet 容器不应该允许 覆盖 Java SE 平台类的应用程序,例如 java.* 和 javax.* 命名空间,Java SE 不允许修改。容器 不应允许应用程序覆盖或访问容器的实现 类
因此,我不明白为什么 Jersey 2.22 在 Jersey 2.22 捆绑包中包含 javax.servlet-api-3.0.1 jar。有什么合理的解释为什么它在那里?默认情况下,我相信Glassfish、Tomcat等容器在lib目录下都有自己的servlet-api.jar。
【问题讨论】:
-
奇怪的是他们会添加一个
providedjar。当我们使用 Maven 时,它肯定不会被拉进来。我的猜测是因为 Jersey 支持 Servlet 组件的注入,HttpServletRequest/Response,ServletContext。这只是一个猜测。但是即使将 jar 包含到您的项目中,您也应该确保它没有内置到最终战争中。您应该始终使用提供的服务器。 -
我也是这么想的……很奇怪。