You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确定Tomcat运行时使用的servlet-api.jar版本及类加载覆盖情况

Tomcat类加载优先级与版本确认方法

一、Common类加载器不会覆盖WEB-INF/lib中的jar

根据Tomcat的类加载规则,Web应用类加载器(负责加载/WEB-INF/classes和/WEB-INF/lib下的资源)会优先于Common类加载器加载类。你看到的加载顺序已明确:

Bootstrap classes of your JVM
/WEB-INF/classes of your web application
/WEB-INF/lib/*.jar of your web application
System class loader classes
Common class loader classes

这意味着,当Tomcat需要加载javax.servlet.Servlet这类Servlet API相关类时,会先从你的应用/WEB-INF/lib下的servlet-api 3.1.0.jar中查找,找到后直接使用该版本,不会再去Common类加载器管理的tomcat/lib目录下查找对应类。Common类加载器的资源只有在Web应用类加载器找不到对应类时才会被加载。

二、如何确认运行时实际使用的jar版本

有两种实用方法可以验证:

  • 打印类加载路径:在你的Servlet或业务类中加入以下代码,运行后查看输出即可定位实际使用的jar:
ClassLoader classLoader = javax.servlet.Servlet.class.getClassLoader();
URL resource = classLoader.getResource("javax/servlet/Servlet.class");
System.out.println(resource);

输出结果类似jar:file:/path/to/your/webapp/WEB-INF/lib/servlet-api-3.1.0.jar!/javax/servlet/Servlet.class,直接显示类所在的jar路径和版本。

  • 开启类加载调试日志:在Tomcat的conf/logging.properties中添加配置:
org.apache.catalina.loader.WebappClassLoader.level = FINE

启动Tomcat后,日志会详细记录每个类的加载来源,从中可找到Servlet API类的加载路径。

内容的提问来源于stack exchange,提问作者vrreddy1234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:52:38