【问题标题】:How do I resolve jstl errors when upgrading Spring Boot升级Spring Boot时如何解决jstl错误
【发布时间】:2020-11-19 15:08:04
【问题描述】:

我正在尝试将 Spring Boot 从版本 2.1.x 升级到 2.2.x,但在我的 jsp 文件中包含 jstl 时不断遇到问题。

org.apache.jasper.JasperException: The absolute uri: [http://java.sun.com/jsp/jstl/core] cannot be resolved in either web.xml or the jar files deployed with this application

我的 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'
    implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.40'

在我的 jsp 文件中,我有这些包含

<!DOCTYPE html>

<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" %>
<%@ page trimDirectiveWhitespaces="true" session="false" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>

在使用 Spring Boot 2.1.x 版本时一切正常,但一旦我使用 2.2.x,它就会因上述错误而中断。

当我启动应用程序时,我在 IntelliJ 设置中使用此 VM 选项

-Dtomcat.util.scan.StandardJarScanFilter.jarsToScan=jstl*.jar,spring-webmvc*.jar

我没有 web.xml 文件,但我有一个 web.config 文件,我们在 Azure 中部署时使用该文件。但这在本地测试时不应该是相关的......

关于如何解决此问题的任何想法?当我在发行说明中找不到任何与 jsp 或 jstl 相关的重大更改时,为什么 Spring Boot 2.2.x 会破坏这一点?

【问题讨论】:

    标签: java spring-boot jstl


    【解决方案1】:

    您要将应用程序部署到哪台服务器?如果您实际将其部署到 Azure 中的 Tomcat 服务器中,则应将 tomcat-embedded-jasper 依赖项标记为已提供

    providedRuntime 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.40'
    

    【讨论】:

    • 到目前为止,我已将其设置为: implementation 'org.apache.tomcat.embed:tomcat-embed-jasper:9.0.40',我提供的运行时唯一依赖项是:providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    • 将第一个设置为providedRuntime。然后你应该将它实际部署到 Tomcat 服务器。
    • 当更改为该依赖项的 providedRuntime 时,我收到一个错误:error: package javax.servlet.jsp does not exist import javax.servlet.jsp.JspException; 当我添加该依赖项 (javax.servlet.jsp:jsp-api:2.2) 时它可以工作(使用 Spring Boot 2.1.18 )。但是当我更新到版本 2.2.0 然后构建我得到这个错误:Caused by: org.springframework.context.ApplicationContextException at ServletWebServerApplicationContext.java:156,所以基本上我的测试开始失败。知道需要更新什么来解决这个问题,我需要在与测试相关的依赖项列表中添加什么吗?
    • Caused by: org.springframework.context.ApplicationContextException at ServletWebServerApplicationContext.java:156 : org.springframework.boot.web.server.WebServerException at TomcatWebServer.java:126 : org.apache.catalina.LifecycleException at ContainerBase.java:928 : java.util.concurrent.ExecutionException at FutureTask.java:122 : org.apache.catalina.LifecycleException at ContainerBase.java:928 : java.util.concurrent.ExecutionException at FutureTask.java:122 : org.apache.catalina.LifecycleException at LifecycleBase.java:440 : java.lang.NoSuchMethodError at TldRuleSet.java:54
    猜你喜欢
    • 2022-12-04
    • 2022-06-24
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 2019-07-30
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多