NetBeans中Tomcat 10部署Spring MVC项目访问/Demo路径返回404错误如何解决
问题根因
- 最核心问题是*Tomcat 10不兼容javax.命名空间:Tomcat 10及以上版本全面迁移到Jakarta EE,所有Java EE相关包名从
javax.*改为jakarta.*。你当前使用的Spring 5.3.9版本、javax相关依赖都基于旧的javax.*命名空间,在Tomcat 10上无法正常加载Servlet组件,导致DispatcherServlet根本没有启动,访问自然返回404。 - JSP路径不匹配:你配置的视图解析器前缀是
/WEB-INF/jsp/,但你的index.jsp直接放在项目根目录,没有放到WEB-INF/jsp文件夹下,就算DispatcherServlet正常启动,也找不到index视图对应的文件。 - 配置冗余错误:applicationContext.xml中的
<context:annocation-config />拼写错误,正确应为<context:annotation-config />,不过你用的是全注解配置,该xml实际未生效,不会直接导致404。 - 代码存在无效导入:DispatcherSelvetIntializer.java导入了无关的
javax.swing.AbstractAction,WebApplicationContextConfig导入了无关的com.sun.org.apache.bcel.internal.generic.AALOAD,属于冗余代码,不直接影响运行。
修复方案
方案一(推荐,适配Tomcat 10):升级依赖到支持Jakarta EE的版本
- 升级Spring版本到6.0及以上,Spring 6开始原生支持
jakarta.*命名空间,同时需要将JDK版本升级到17及以上(Spring 6最低要求JDK 17)。 - 替换pom.xml中所有javax相关依赖为jakarta版本:
<dependencies> <dependency> <groupId>jakarta.platform</groupId> <artifactId>jakarta.jakartaee-web-api</artifactId> <version>9.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.0.11</version> </dependency> <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>3.0.1</version> </dependency> </dependencies>
- 替换所有代码中
javax.servlet相关导入为jakarta.servlet。 - 在
src/main/webapp下创建WEB-INF/jsp目录,将index.jsp移动到该目录下。 - 修改maven-compiler-plugin的编译版本为17:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>17</source> <target>17</target> </configuration> </plugin>
方案二(零代码修改,快速兼容):降级Tomcat版本
直接将Tomcat 10替换为Tomcat 9.x版本,Tomcat 9仍基于javax.*命名空间,和你当前所有依赖完全兼容,不需要修改代码和配置,只需要额外将index.jsp移动到WEB-INF/jsp目录下即可正常运行。
内容的提问来源于stack exchange,提问作者Minh Khôi
相关产品推荐
相关产品推荐

