繁体   English   中英

web.xml如何知道特定jar中存在的servlet

[英]how does web.xml knows a servlet present in a specific jar

我正在使用lib文件夹中存在jar文件的Web应用程序。 在web.xml中,提供了servlet类。web.xml如何知道特定类在哪个jar文件中???

这由类加载器机制处理:

JAR文件通常包含“清单”-列出JAR内容的文件。 清单可以定义一个JAR-class-path,它进一步扩展了类路径(但仅在从该JAR加载类时)。 通过JAR-class-path访问的类按以下顺序找到:

通常,找到由JAR-class-path条目引用的类,就像它们是JAR文件的一部分一样。 在任何较早的类路径条目之后,以及在较晚的类路径中出现的任何条目之前,都会搜索出现在JAR-class-path中的JAR文件。 但是,如果JAR-class-path指向已经搜索过的JAR文件(例如,扩展名或在类路径中较早列出的JAR文件),则不会再次搜索该JAR文件。 (此优化提高了效率并防止了循环搜索。)在类路径的更早位置搜索这样的JAR文件。 如果将JAR文件作为扩展安装,则忽略它定义的任何JAR-class-path。 扩展所需的所有类都假定是SDK的一部分,或者自己已作为扩展安装。

资源

在这种情况下,魔术词是类路径。

《学习Java》这本书很好地描述了这一点。

https://www.safaribooksonline.com/library/view/learning-java/1565927184/ch03s03.html

Java CLASSPATH变量,包含可在其中搜索包含Java类文件的软件包的位置列表。 在本地主机上搜索包和类时,Java解释器和Java编译器使用CLASSPATH。

就像我们在dos / linux中将目录位置添加到path变量中一样,我们可以在classpath变量中指定jar的位置。 Java还提供了一些默认位置,例如ext目录。 Windows安装上的java中ext文件夹的路径可能类似于“ C:\\ Program Files \\ Java \\ jdk1.6.0 \\ jre \\ lib \\ ext”。 您可以将jars放在ext文件夹中,它们中的类文件将自动定位。

类路径上的位置可以是目录名称,也可以是类归档文件的名称。 Java支持以其自己的Java归档(JAR)格式归档类文件。 这允许将大类的组分布在一个文件中。 必要时,Java解释器会自动从档案中提取单个类文件。

Java解释器知道如何找到核心类,这些核心类是每个Java安装中包括的类。 例如,java.lang,java.io等中的类。它们的位置不需要放在类路径中,Java解释器可以自行找到它们。 要查找其他类,Java解释器将按顺序搜索类路径上的位置。

例如,考虑搜索类vehicle.cars.Porche。 搜索类路径目录/ usr / lib / java意味着解释器在/usr/lib/java/vehicle/cars/Porche.class中查找单个类文件。 如果该类存在于jar文件中,例如CompanyVehicle.jar,则编译器将在CompanyVehicle.jar中查找vehicle.cars.Porche.class。

概括地说,Java有一个清单,它知道应该查找的位置。 除此之外,它将查看您在classpath变量中提供的位置。

如果您想了解有关类路径的更多信息,则类加载器将在后台工作,请查看以下链接

JVM如何开始寻找类?

http://javapapers.com/core-java/java-class-loader/

https://en.wikipedia.org/wiki/Classpath_(Java)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM