java - 为什么 JSTL 有两个 JAR 文件?
问题描述
为了使用 JSTL 库,我们需要下载两个jar文件。例如javax.servlet.jsp.jstl-api-1.2.1.jar
和javax.servlet.jsp.jstl-1.2.1.jar
。我敢打赌,他们有一些允许我们使用这些标签的接口和类。但是不管他们有什么,为什么他们不把它们都放在一个jar文件中呢?
解决方案
正如安德烈亚斯指出的那样:
“一个是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 文件中......
推荐阅读
- python-2.7 - 没有任何按钮的 Tkinter 消息框
- scala - 将整数转换为日期以计算天数
- java - 在 kotlin 中删除包装类的样板
- c++ - GProf:__cosl_internal 和 __sinl_internal 函数是什么?
- processing - 如何将音频频谱展开成网格
- geometry - 我怎样才能反转?坐标空间?
- python - 字符串索引必须是整数 Giphy
- javascript - 发送文件 - 移除参数
- android - 如何从 Android Oreo 及以上版本的下载文件夹上传文件?
- macos - 使用 NGinx 将找不到的图像文件重定向到 Uri