Apache Tomcat 10.x配置JavaMelody遇启动异常求助
Tomcat 10.0.21配置JavaMelody启动失败问题
问题背景
尝试在Apache Tomcat 10.0.21的全局配置(而非应用内)中部署JavaMelody,使用的依赖包为jrobin-1.5.9.jar和javamelody-core-1.91.0.jar,该配置在Tomcat 9.x中可正常运行,但启动Tomcat 10时出现报错。
全局web.xml配置
<filter> <filter-name>javamelody</filter-name> <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> <async-supported>true</async-supported> </filter> <filter-mapping> <filter-name>javamelody</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>net.bull.javamelody.SessionListener</listener-class> </listener> <login-config> <auth-method>BASIC</auth-method> <realm-name>Monitoring</realm-name> </login-config> <security-role> <role-name>monitoring</role-name> </security-role> <security-constraint> <web-resource-collection> <web-resource-name>Monitoring</web-resource-name> <url-pattern>/monitoring</url-pattern> </web-resource-collection> <auth-constraint> <role-name>monitoring</role-name> </auth-constraint> </security-constraint>
启动错误日志
catalina.out日志
SEVERE [main] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file SEVERE [main] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
localhost.log日志
SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Skipped installing application listeners due to previous error(s) SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Error configuring application listener of class [net.bull.javamelody.SessionListener] java.lang.NoClassDefFoundError: javax/servlet/http/HttpSessionListener at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:757) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) at java.net.URLClassLoader.access$100(URLClassLoader.java:74) at java.net.URLClassLoader$1.run(URLClassLoader.java:369) at java.net.URLClassLoader$1.run(URLClassLoader.java:363) at java.security.AccessController.doPrivileged(Native Method) . . . at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476) Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionListener at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:419) at java.lang.ClassLoader.loadClass(ClassLoader.java:352) ... 59 more SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Skipped installing application listeners due to previous error(s)
环境信息
openjdk version "1.8.0_252" OpenJDK Runtime Environment (Zulu 8.46.0.52-SA-linux64)
问题疑问
jrobin-1.5.9.jar和javamelody-core-1.91.0.jar是否与当前Java及Tomcat版本存在兼容性问题?如何解决?
问题原因
Tomcat 10.x 基于 Jakarta EE 9 规范,核心变更为Servlet API包名从javax.servlet迁移至jakarta.servlet。你使用的javamelody-core-1.91.0.jar依赖旧版javax.servlet API,因此加载SessionListener时无法找到javax.servlet.http.HttpSessionListener类,触发类加载失败。
解决方案
- 升级JavaMelody版本:选择支持Jakarta Servlet API的JavaMelody版本,官方从
1.100.0版本开始适配Tomcat 10+(Jakarta EE 9+)。 - 替换依赖包:
- 移除旧的
jrobin-1.5.9.jar和javamelody-core-1.91.0.jar - 下载最新稳定版
javamelody-core-x.x.x.jar,注意从1.100.0版本起,JavaMelody已整合jrobin功能,无需单独引入jrobin包。
- 移除旧的
- 保留原有配置:你在
web.xml中的配置无需修改,新版本兼容原有配置格式。
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

