簡體   English   中英

Apache Tomcat 10.0.0-M1 使用 JSP Absolute uri http://java.sun.com/jsp/jstl/core 無法解析

[英]Apache Tomcat 10.0.0-M1 using JSP Absolute uri http://java.sun.com/jsp/jstl/core cannot be resolved

我已經嘗試了該站點上多個線程中的所有內容(它們都不是用於 Tomcat 10,也不是已解決的問題。我將 Apache NetBeans 11.1 與 Apache Tomcat 10.0.0-M1 一起使用。以下是我的配置——如果我刪除我的 jsp 文件中的 taglib 行,錯誤消失了。

網頁.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">

    <!-- Config here. -->

</web-app>

pom.xml 依賴項:

<dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>8.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20190722</version>
        </dependency>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
            <type>jar</type>
        </dependency>
        <dependency>
           <groupId>com.zaxxer</groupId>
           <artifactId>HikariCP</artifactId>
           <version>3.3.1</version>
           <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <!--scope>provided</scope-->
        </dependency>
    </dependencies>

測試.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>

    </head>
    <body>
        <h1>Test Results</h1>
        <testResults></testResults>
    </body>
</html>

顯示錯誤:

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
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:55)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:294)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:81)
    org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(TagLibraryInfoImpl.java:251)
    org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:122)
    org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:431)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:489)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1445)
    org.apache.jasper.compiler.Parser.parse(Parser.java:144)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:206)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:386)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:955)
    org.apache.jsp.index_jsp._jspService(index_jsp.java:128)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:477)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

我發現在 Tomcat 10 上,您可以使用通過 jakarta-jstl-api 2.0 的 tomcat 遷移工具遷移的 apache-taglibs 1.2.5,或者使用 glassfish jstl 實現,效果很好。

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

Apache Tomcat 團隊通過電子郵件給了我解決方案(感謝 Mark):

來自 Tomcat 10.0.0-M1 發布公告:

Tomcat 10 以后的用戶應該知道,作為 Java EE 向 Eclipse Foundation 轉移的一部分,從 Java EE 轉移到 Jakarta EE,所有已實現的 API 的主要包已從 javax.* 更改為 jakarta .*. 這幾乎肯定需要更改代碼才能使應用程序從 Tomcat 9 及更早版本遷移到 Tomcat 10 及更高版本。

 <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>8.0.1</version> <scope>provided</scope> </dependency>

這在 Tomact 10 上永遠行不通。您不能在 Jakarta EE 9 服務器上使用 Java EE 8 庫。

 <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> <type>jar</type> </dependency>

這需要用 Jakarta Mail 替換(Maven Central 上可能有一個 RC)

 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.1.10.RELEASE</version> </dependency>

那是行不通的,據我所知,目前還沒有可用的 Jakarta EE 9 版本(甚至正在開發中)。

 <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> <!--scope>provided</scope--> </dependency>

您需要 Jakarta Standard Tag Library 2.0 或更高版本。 我認為這是為積極提交者而奮斗的雅加達項目之一。

Tomcat 10 在示例 Web 應用程序中附帶了 Jakarta 標准標簽庫 2.0 的 API 和實現。 它是通過采用 JSTL 1.2 JAR 並通過 Tomcat 的 Java EE 8 到 Jakarta EE 9 轉換/遷移工具運行它們而創建的。

測試.jsp

現在堅持使用 Tomcat 9 對你來說可能是一個更好的選擇嗎?

標記

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM