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

JDK1.7升17与Tomcat9升10.1.7部署WAR包报错求助

问题

将应用的JDK版本从1.7升级至17,同时将Tomcat从9.0.20升级到10.1.7。已完成Servlet依赖升级至6.0.0(使用jakarta.servlet包)、将web.xml的XSD从web-app_2_5.xsd更新为web-app_4_0.xsd,且已解决所有编译错误,但部署WAR包时出现以下错误:

24-Apr-2023 21:01:50.458 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [C:\Users\absharma\Desktop\TASK\tomcat\webapps\WebApp_demo_version3.war]
24-Apr-2023 21:02:01.488 INFO [Catalina-utility-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
24-Apr-2023 21:02:01.488 SEVERE [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [C:\Users\absharma\Desktop\TASK\tomcat\webapps\WebApp_demo_version3.war]
    java.lang.IllegalStateException: Error starting child
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:686)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:713)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:975)
        at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1949)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
        at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
        at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:776)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:426)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1705)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:305)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
        at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1102)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1301)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1305)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1283)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.base/java.lang.Thread.run(Thread.java:833)
    Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/WebApp_demo_version3]]
        at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)
        ... 24 more
    Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletRequestListener
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2487)
        at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:865)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
        at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:490)
        at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:472)
        at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:142)
        at org.apache.catalina.core.ApplicationContext.addListener(ApplicationContext.java:1010)
        at org.apache.catalina.core.ApplicationContextFacade.addListener(ApplicationContextFacade.java:549)
        at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:90)
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4875)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
        ... 25 more
    Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletRequestListener
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1437)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1245)
        ... 40 more
24-Apr-2023 21:02:01.496 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [C:\Users\absharma\Desktop\TASK\tomcat\webapps\WebApp_demo_version3.war] has finished in [11,038] ms

已尝试的操作:

  • 将Servlet Jar从2.5版本升级至6.0.0
  • 将XML文件从web-app_2_5.xsd更新为web-app_4_0.xsd

目标是成功将应用升级至JDK17和Tomcat10.1.7。

解决建议

这个错误的核心是应用中仍存在对javax.servlet包的依赖引用,Tomcat 10+ 完全使用jakarta.servlet包,不再支持旧的javax命名空间,以下是具体排查和修复步骤:

  1. 全面替换代码中的javax.servlet引用

    • 检查所有Java类,确保所有导入语句从javax.servlet.*替换为jakarta.servlet.*,包括ServletRequestListener、Servlet、Filter等所有相关类。
    • 检查JSP文件中的<%@ page import %>指令,同样替换命名空间。
  2. 检查依赖树,移除残留的javax.servlet依赖

    • 使用构建工具(如Maven的mvn dependency:tree或Gradle的./gradlew dependencies)生成依赖树,找出所有包含javax.servlet的依赖。
    • 对于引入javax.servlet的第三方库,优先升级到支持Jakarta EE的版本;如果无法升级,排除该依赖中的javax.servlet模块,避免与Tomcat 10+的jakarta.servlet冲突。
  3. 更新web.xml的命名空间和版本

    • Tomcat 10.1对应Servlet 6.0,web.xml应使用web-app_6_0.xsd,而非web-app_4_0.xsd,修改web.xml的根元素:
      <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
               version="6.0">
      
    • 同时检查web.xml中配置的监听器、过滤器等类名,确保对应的类已经完成javax到jakarta的替换。
  4. 清理构建产物和Tomcat缓存

    • 删除项目的target或build目录,重新构建WAR包,避免旧的编译文件残留。
    • 删除Tomcat的work目录和webapps下的解压后的应用文件夹,再重新部署新的WAR包。
  5. 检查第三方库的兼容性

    • 确保所有使用的框架(如Spring、Hibernate等)都升级到支持Jakarta EE 9+的版本,比如Spring要使用5.3.x以上或Spring Boot 2.7+版本,这些版本才会使用jakarta.servlet命名空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 02:07:09