Java 21+Spring 6+Tomcat 10项目部署404,求根源及非重建解决办法
问题根源分析
- Git拉取后的文件结构异常:仓库文件可能存在大小写不一致(Windows不区分但Tomcat/Linux严格区分)、隐藏文件干扰或目录权限问题,导致Tomcat无法扫描到Spring配置类、JSP或静态资源。
- IDE元数据缓存冲突:拉取项目后,IDE生成的旧元数据(如
.idea、.settings)和新配置不兼容,即使重新制作工件或facet,缓存的旧配置仍会影响部署。 - Maven依赖解析问题:本地仓库的依赖损坏,或pom.xml依赖版本与本地仓库不一致,导致Spring容器初始化失败,但因日志配置缺失未输出报错信息。
- Tomcat部署残留冲突:Tomcat的
webapps目录残留旧项目的war包或解压文件,与新拉取项目的上下文路径冲突,引发404。
无需重建项目的解决步骤
- 彻底清理缓存与构建产物
- 执行Maven命令:
mvn clean install -U,强制清理target目录并更新依赖。 - 删除IDE生成的元数据目录(IDEA删
.idea,Eclipse删.settings和.project),然后重新导入项目。
- 执行Maven命令:
- 修复文件目录结构
- 确认
mainPage.jsp所在的pages目录位于src/main/webapp下,检查目录、文件名大小写是否与Spring视图解析器的配置一致(比如视图解析器前缀为/pages/,实际目录不能写成/Pages/)。 - 检查
.gitignore规则,确保IDE临时文件、target目录被正确忽略,避免拉取冗余文件干扰项目。
- 确认
- 重置Tomcat部署配置
- 删除Tomcat
webapps目录下的项目相关文件(war包及解压文件夹)。 - 在IDE中删除旧的Tomcat运行配置,重新创建新配置,选择最新的
war exploded或war工件,确保上下文路径唯一且正确。
- 删除Tomcat
- 验证Spring配置与日志
- 检查Spring MVC配置类的视图解析器,确保前缀和后缀匹配JSP路径:
@Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/pages/"); resolver.setSuffix(".jsp"); return resolver; } - 确认
web.xml中DispatcherServlet的映射路径正确(通常设为/),且Spring配置文件路径无误:<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> - 添加日志依赖(如logback)并配置日志输出级别为DEBUG,查看Spring容器初始化过程,定位是否有静默失败的情况。
- 检查Spring MVC配置类的视图解析器,确保前缀和后缀匹配JSP路径:
- 确认版本兼容性
- 检查IDE的项目SDK、模块SDK均设置为Java 21,Tomcat运行环境也配置为Java 21,确保三者版本匹配。
内容的提问来源于stack exchange,提问作者anxidy
相关产品推荐
相关产品推荐

