![](/img/trans.png)
[英]How do I import packages from a jar-file, into a servlet, which is running on tomcat 8?
[英]How does Tomcat know which jar to choose for running a servlet?
在我的项目中, Apache Tomcat 8.5 context.xml配置如下。
<Context path="/helloWorld" docBase="C:\projects\helloWorld\app" crossContext="false" debug="0" reloadable="false"/>
C:\projects\helloWorld\app 有一个 web-inf\lib 文件夹,其中包含一个servlet.jar以及应用程序需要的 jars 的 rest。
此应用程序部署到 Tomcat 8.5 web 服务器,%TOMCAT_HOME%\lib 文件夹还包含一个servlet-api.jar 。
该应用程序按预期工作。
我检查了两个 jars 和 servlet.jar 包含常规 servlet api 类,而 tomcat 的 servlet-api.jar 包含这些常规 servlet api 类以及许多其他 servlet 功能相关类。
查询:因为有两个 jars 用于运行 servlet,即 servlet.jar 和 servlet-api.jar,Tomcat 如何知道在运行 servlet 时选择哪个 jar?
Tomcat 将加载自己版本的 servlet API,因为这是 JavaEE 规范所要求的。
JavaEE 定义了如何加载和解析类。
通常类加载器是父级优先的——即尝试从父类加载器加载类,只有在失败时,它们才会尝试自己加载 class。
但是 web 应用程序有一个自优先类加载器,它从自身加载类,只有当它失败时,它们才会尝试从父类加载。 但也有一些例外:
您可以在Apache Tomcat 的文档中阅读更多详细信息
只要 servlet api 版本匹配就不会有任何问题。 但是,如果您的 servlets 是针对不同的 api 版本编译的,例如它们是使用 Servlet v4 编译的,但您尝试在 Servlet v3 环境中使用它们,则会出现运行时错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.