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

Maven+SpringMVC项目部署Tomcat10报DispatcherServlet实例化500错误如何解决

问题核心原因

你遇到的报错是Tomcat 10和旧版本Spring的包命名不兼容导致的:
Tomcat 10及以上版本将Java EE规范全部迁移到了Eclipse基金会,所有原javax.servlet开头的包全部重命名为jakarta.servlet开头。而你当前使用的Spring 4.1.8是多年前的旧版本,仅支持javax.servlet包,无法识别Tomcat 10提供的jakarta.servlet类,因此DispatcherServlet实例化失败。


修复步骤

方案1:降级Tomcat(成本最低,适配现有教程代码)

直接将当前的Tomcat 10替换为Tomcat 9.x版本,Tomcat 9仍然使用javax.servlet包,和你现有所有依赖完全兼容,仅需额外修改1处代码:
将AddController.java中的导入语句替换为javax版本:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

修改完成后重新部署项目即可正常运行。

方案2:升级依赖适配Tomcat 10(使用新版环境)

如果要保留Tomcat 10,需要升级所有相关依赖到支持jakarta规范的版本:

  1. 修改pom.xml的依赖如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.telusko</groupId>
  <artifactId>DemoMVC</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>DemoMVC Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
    <!-- Spring 6+ 支持jakarta规范 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.0.11</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.0.11</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.33</version>
    </dependency>
    <!-- jakarta版本jstl -->
    <dependency>
      <groupId>jakarta.servlet.jsp.jstl</groupId>
      <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
      <version>3.0.0</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>DemoMVC</finalName>
  </build>
</project>
  1. 更新telusko-servlet.xml的schema版本和Spring 6对齐,避免解析错误:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:annotation-config/>
    <context:component-scan base-package="com.telusko"/>
    <mvc:annotation-driven/>
</beans>
  1. 给web.xml的DispatcherServlet添加启动加载配置,优化启动体验:
<servlet>
    <servlet-name>telusko</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>telusko</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

修改完成后清空Maven缓存重新构建部署即可。


额外注意点

如果使用方案2,需要确保你的JDK版本在17及以上,Spring 6最低要求JDK 17运行环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:27:00