Spring Boot 2.2.x升级后JSTL引用报错的解决方法咨询
解决Spring Boot 2.2.x升级后JSTL URI无法解析的问题
我来帮你搞定这个问题,之前升级Spring Boot时我也碰到过类似的坑,下面是具体的排查和解决步骤:
一、快速修复:调整依赖与Tomcat扫描配置
1. 统一Tomcat依赖版本,避免手动指定冲突
你手动给tomcat-embed-jasper指定了9.0.40版本,但Spring Boot 2.2.x有自己适配的默认Tomcat版本,硬写版本号容易引发兼容性问题。修改Gradle依赖,去掉手动指定的版本号:
dependencies { // Spring Boot implementation 'org.springframework.boot:spring-boot-starter-web' providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' implementation 'org.springframework.boot:spring-boot-starter-actuator' testImplementation 'org.springframework.boot:spring-boot-starter-test' // Web implementation 'javax.servlet:jstl:1.2' // 去掉手动版本,让Spring Boot自动管理适配的Tomcat Jasper版本 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' }
2. 用配置文件替代VM参数,优化TLD扫描规则
你之前靠VM参数指定扫描Jar,但Spring Boot 2.2.x支持通过配置文件更优雅地设置,避免每次启动都加参数。在application.properties中添加:
# 指定需要扫描标签库定义(TLD)的Jar包 server.tomcat.jar-scan-filter.jars-to-scan=jstl*.jar,tomcat-embed-jasper*.jar,spring-webmvc*.jar # 清空额外的TLD跳过规则,确保核心Web依赖不会被遗漏 server.tomcat.additional-tld-skip-patterns=
如果用YAML配置则是:
server: tomcat: jar-scan-filter: jars-to-scan: jstl*.jar,tomcat-embed-jasper*.jar,spring-webmvc*.jar additional-tld-skip-patterns: ""
3. 本地开发时临时调整Tomcat依赖范围(可选)
如果你本地用内嵌Tomcat运行项目,providedRuntime类型的spring-boot-starter-tomcat可能偶尔出现依赖加载不及时的情况,可以临时改成implementation,部署到外部Tomcat时再改回providedRuntime:
// 本地开发时使用 implementation 'org.springframework.boot:spring-boot-starter-tomcat' // 部署到外部Tomcat时切换回 // providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
二、为什么Spring Boot 2.2.x会出现这个问题?
你没在发布说明里找到相关变更很正常,因为这是Tomcat自动配置的细微调整,不属于核心JSP/JSTL的破坏性变更:
- Spring Boot 2.2.x升级了内嵌Tomcat版本,同时为了提升启动速度,收紧了默认的Jar扫描过滤规则,默认会跳过大部分非必要Jar的TLD(标签库定义文件)扫描。
- 这个规则导致JSTL的
META-INF/c.tld、fn.tld等核心文件所在的Jar没被Tomcat扫描到,因此无法解析对应的URI。 - 而Spring Boot 2.1.x的Tomcat扫描规则更宽松,会自动扫描这些Web核心依赖的TLD文件,所以之前能正常运行。
三、验证解决方案
修改完成后重启应用,访问包含JSTL标签的JSP页面,应该就能正常加载了。如果还是有问题,可以:
- 检查
jstl-1.2.jar是否在项目的classpath中(可在IntelliJ的External Libraries里查看) - 清理Gradle缓存后重新构建:运行
./gradlew clean build --refresh-dependencies
内容的提问来源于stack exchange,提问作者KungWaz
相关产品推荐
相关产品推荐

