[英]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.