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

Spring MVC传递集合至JSP时出现ClassNotFoundException问题求助

Spring MVC传递集合到JSP报ClassNotFoundException的解决方法

核心问题分析

出现java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.pages.films_jsp的核心原因是Jakarta EE与Java EE命名空间不兼容,以及依赖、容器版本不匹配:

  • Spring 6.x 基于Jakarta EE 9+(使用jakarta.*包),但你引入了javax.servlet:jstl(Java EE时代的依赖),导致JSP编译时出现类加载冲突。
  • Tomcat版本若低于10.x,不支持Jakarta EE命名空间,无法正确编译使用Jakarta API的JSP。

具体修复步骤

1. 替换JSTL依赖为Jakarta版本

修改pom.xml中的JSTL依赖,替换为Jakarta兼容版本:

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>2.0.0</version>
</dependency>

保留现有正确的Jakarta依赖:jakarta.servlet-api、jakarta.servlet.jsp-api。

2. 升级Tomcat到10.x及以上版本

Spring 6.x要求Servlet容器支持Jakarta EE 9+,只有Tomcat 10.x及以上版本符合该要求,直接升级到Tomcat 10.1.x等稳定版即可。

3. 对齐视图名与JSP文件

你的Controller中设置的视图名是newFilms,但提供的JSP文件名为films.jsp。若视图解析器配置了前缀(如/WEB-INF/pages/)和后缀(.jsp),视图名newFilms会对应/WEB-INF/pages/newFilms.jsp,与实际文件不匹配会引发编译异常。需将视图名改为films,或把JSP文件名改为newFilms.jsp。

4. 清理重构项目

  • 执行mvn clean install清理旧编译文件与依赖,重新构建项目。
  • 删除Tomcatwork目录下的旧JSP编译类,避免残留冲突类干扰运行。

验证修复

重启Tomcat后访问根路径,集合数据应能正常渲染到JSP页面,不会再出现ClassNotFoundException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:46:01