Java 为什么JSTL有两个JAR文件?

Java 为什么JSTL有两个JAR文件?,java,jar,jstl,Java,Jar,Jstl,为了使用JSTL库,我们需要下载两个jar文件。例如javax.servlet.jsp.jstl-api-1.2.1.jar和javax.servlet.jsp.jstl-1.2.1.jar。我打赌他们有一些接口和类,允许我们使用这些标记。但是,不管他们有什么,为什么他们不把它们全部放在一个jar文件中?正如Andreas指出的: 一个是API,主要是接口,另一个是实现。编译时需要API,运行时需要两者 你问题的核心是: 但不管他们有什么,为什么他们不把它们都放在一个jar文件中呢 javax

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

正如Andreas指出的:

一个是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文件膨胀是必要的。当然,您可以在Web应用程序的WAR文件中明确包含这两个JAR….

正如Andreas指出的:

一个是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文件膨胀是必要的。当然,您可以在webapp的WAR文件中明确包含这两个JAR….

一个是API,主要是接口,另一个是实现。编译需要API,运行需要两者。一个是API,主要是接口,另一个是实现。编译时需要API,运行时需要两者。