首页 > 解决方案 > 为什么 JSTL 有两个 JAR 文件?

问题描述

为了使用 JSTL 库,我们需要下载两个jar文件。例如javax.servlet.jsp.jstl-api-1.2.1.jarjavax.servlet.jsp.jstl-1.2.1.jar。我敢打赌,他们有一些允许我们使用这些标签的接口和类。但是不管他们有什么,为什么他们不把它们都放在一个jar文件中呢?

标签: javajarjstl

解决方案


正如安德烈亚斯指出的那样:

“一个是API,主要是接口,另一个是实现。编译需要API,运行需要API。”


你的问题的核心是这样的:

但是不管他们有什么,为什么他们不把它们都放在一个 jar 文件中呢?

文件中类的功能javax.servlet.jsp.jstl-xxx.jar通常由您的 Web 容器提供。您将在 Web 容器自己的 JAR 文件之一中找到这些类。它们可能与您在 Maven Central(或任何地方)中找到的参考实现版本不同。

因此,javax.servlet.jsp.jstl-1.2.1.jar以某种方式将类合并到您的 WAR 文件中要么是多余的(因为已经提供了这些类),要么是有害的,因为参考实现类与 Web 容器的其他方面冲突/不起作用执行。

无论如何,拥有单独的 JAR 文件的根本原因是因为分离 API 和实现对于正确运行和减少 WAR 文件膨胀是必要的。当然,无论如何,您都可以自由地将这两个 JAR 显式包含在您的 webapp 的 WAR 文件中......


推荐阅读