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清理旧编译文件与依赖,重新构建项目。 - 删除Tomcat
work目录下的旧JSP编译类,避免残留冲突类干扰运行。
验证修复
重启Tomcat后访问根路径,集合数据应能正常渲染到JSP页面,不会再出现ClassNotFoundException。
内容的提问来源于stack exchange,提问作者extrasexq
相关产品推荐
相关产品推荐

