web.xml 如何知道特定 jar 中存在的 servlet
how does web.xml knows a servlet present in a specific jar
我正在使用 lib 文件夹中有 jar 文件的 Web 应用程序。在 web.xml 中,servlet class 是 provided.how web.xml 是否知道特定 class 在哪个 jar 文件中???
这是由类加载器机制处理的:
A JAR file usually contains a "manifest" -- a file which lists the
contents of the JAR. The manifest can define a JAR-class-path, which
further extends the class path (but only while loading classes from
that JAR). Classes accessed by a JAR-class-path are found in the
following order:
In general, classes referenced by a JAR-class-path entry are found as
though they were part of the JAR file. The JAR files that appear in
the JAR-class-path are searched after any earlier class path entries,
and before any entries that appear later in the class path. However,
if the JAR-class-path points to a JAR file that was already searched
(for example, an extension, or a JAR file that was listed earlier in
the class path) then that JAR file will not be searched again. (This
optimization improves efficiency and prevents circular searches.) Such
a JAR file is searched at the point that it appears, earlier in the
class path. If a JAR file is installed as an extension, then any
JAR-class-path it defines is ignored. All the classes required by an
extension are presumed to be part of the SDK or to have themselves
been installed as extensions.
这种情况下的魔法词是 class 路径 .
"Learning in Java" 一书对此进行了很好的描述。
https://www.safaribooksonline.com/library/view/learning-java/1565927184/ch03s03.html
Java CLASSPATH 变量,包含可以搜索包含 Java class 文件的包的位置列表。 Java 解释器和 Java 编译器在本地主机上搜索包和 classes 时使用 CLASSPATH。
就像我们在 dos/linux 中将目录位置添加到路径变量一样,我们可以在 class 路径变量中指定 jars 的位置。
Java 还提供了一些它将查找的默认位置。例如 ext 目录。 java windows 上的 ext 文件夹的路径安装可能看起来像 "C:\Program Files\Java\jdk1.6.0\jre\lib\ext" 。
您可以将您的 jars 放在 ext 文件夹中,其中的 class 文件将自动定位..
class 路径上的位置可以是目录名称或 class 存档文件的名称。 Java 支持 class 文件以其自己的 Java 存档 (JAR) 格式存档。这允许将大量 classes 分布在一个文件中; Java 解释器在需要时自动从存档中提取单个 class 文件。
Java 解释器知道如何找到核心 classes,它们是包含在每个 Java 安装中的 classes。例如,java.lang、java.io等中的classes。它们的位置不需要放在class路径中,Java解释器可以找到它们本身。
为了找到其他 classes,Java 解释器按顺序搜索 class 路径上的位置。
例如,考虑搜索 class vehicle.cars.Porche。搜索 class 路径目录 /usr/lib/java 意味着解释器在 /usr/lib/java/vehicle/cars/Porche.class 寻找一个单独的 class 文件。如果 class 存在于 jar 文件中,比如 CompanyVehicle.jar,那么编译器将在 CompanyVehicle.jar.
中查找 vehicle.cars.Porche.class
总而言之,Java 有一个它知道应该查看的位置列表。除此之外,它将查看您在 classpath 变量中提供的位置。
如果您想了解更多关于 classpath 的信息,classloader 在幕后工作请查看下面的链接
How JVM starts looking for classes?
我正在使用 lib 文件夹中有 jar 文件的 Web 应用程序。在 web.xml 中,servlet class 是 provided.how web.xml 是否知道特定 class 在哪个 jar 文件中???
这是由类加载器机制处理的:
A JAR file usually contains a "manifest" -- a file which lists the contents of the JAR. The manifest can define a JAR-class-path, which further extends the class path (but only while loading classes from that JAR). Classes accessed by a JAR-class-path are found in the following order:
In general, classes referenced by a JAR-class-path entry are found as though they were part of the JAR file. The JAR files that appear in the JAR-class-path are searched after any earlier class path entries, and before any entries that appear later in the class path. However, if the JAR-class-path points to a JAR file that was already searched (for example, an extension, or a JAR file that was listed earlier in the class path) then that JAR file will not be searched again. (This optimization improves efficiency and prevents circular searches.) Such a JAR file is searched at the point that it appears, earlier in the class path. If a JAR file is installed as an extension, then any JAR-class-path it defines is ignored. All the classes required by an extension are presumed to be part of the SDK or to have themselves been installed as extensions.
这种情况下的魔法词是 class 路径 .
"Learning in Java" 一书对此进行了很好的描述。
https://www.safaribooksonline.com/library/view/learning-java/1565927184/ch03s03.html
Java CLASSPATH 变量,包含可以搜索包含 Java class 文件的包的位置列表。 Java 解释器和 Java 编译器在本地主机上搜索包和 classes 时使用 CLASSPATH。
就像我们在 dos/linux 中将目录位置添加到路径变量一样,我们可以在 class 路径变量中指定 jars 的位置。 Java 还提供了一些它将查找的默认位置。例如 ext 目录。 java windows 上的 ext 文件夹的路径安装可能看起来像 "C:\Program Files\Java\jdk1.6.0\jre\lib\ext" 。 您可以将您的 jars 放在 ext 文件夹中,其中的 class 文件将自动定位..
class 路径上的位置可以是目录名称或 class 存档文件的名称。 Java 支持 class 文件以其自己的 Java 存档 (JAR) 格式存档。这允许将大量 classes 分布在一个文件中; Java 解释器在需要时自动从存档中提取单个 class 文件。
Java 解释器知道如何找到核心 classes,它们是包含在每个 Java 安装中的 classes。例如,java.lang、java.io等中的classes。它们的位置不需要放在class路径中,Java解释器可以找到它们本身。 为了找到其他 classes,Java 解释器按顺序搜索 class 路径上的位置。
例如,考虑搜索 class vehicle.cars.Porche。搜索 class 路径目录 /usr/lib/java 意味着解释器在 /usr/lib/java/vehicle/cars/Porche.class 寻找一个单独的 class 文件。如果 class 存在于 jar 文件中,比如 CompanyVehicle.jar,那么编译器将在 CompanyVehicle.jar.
中查找 vehicle.cars.Porche.class总而言之,Java 有一个它知道应该查看的位置列表。除此之外,它将查看您在 classpath 变量中提供的位置。
如果您想了解更多关于 classpath 的信息,classloader 在幕后工作请查看下面的链接
How JVM starts looking for classes?