Apache Tomcat 10.0.0-M1 с использованием JSP Абсолютный URI http://java.sun.com/jsp/jstl/core не может быть разрешен - PullRequest
0 голосов
/ 02 марта 2020

Я пробовал все в нескольких потоках на этом сайте (ни один из них не был для Tomcat 10 и не решенной проблемы. Я использую Apache NetBeans 11.1 с Apache Tomcat 10.0.0-M1. Ниже моя конфигурация - если я удалю строку taglib из моего jsp файла, ошибка исчезнет.

web. 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)

1 Ответ

0 голосов
/ 03 марта 2020

Команда Apache Tomcat предоставила мне решение по электронной почте (спасибо):

Из объявления о выпуске Tomcat 10.0.0-M1:

Пользователи Tomcat 10 и далее должен знать, что в результате перехода от Java EE к Jakarta EE в рамках передачи Java EE в Eclipse Foundation основной пакет для всех реализованных API-интерфейсов изменился с javax. * в Джакарту. *. Это почти наверняка потребует изменения кода, чтобы приложения могли мигрировать с Tomcat 9 и более ранних версий на Tomcat 10 и более поздних.

        <dependency>

            <groupId>javax</groupId>

            <artifactId>javaee-web-api</artifactId>

            <version>8.0.1</version>

            <scope>provided</scope>

        </dependency>

Это никогда не сработает в Tomact 10. Вы не можете использовать библиотеки Java EE 8 с сервером Jakarta EE 9.

        <dependency>

            <groupId>javax.mail</groupId>

            <artifactId>mail</artifactId>

            <version>1.4.7</version>

            <type>jar</type>

        </dependency>

Это необходимо заменить на Джакартскую почту (для Maven Central это может быть R C)

        <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 2.0 или позже. Я думаю, что это один из проектов Джакарты, борющихся за активных коммиттеров.

Tomcat 10 поставляется с API и реализацией для стандартной библиотеки тегов 2.0 Джакарты в веб-приложении примеров. Он был создан с помощью JAR-файлов JSTL 1.2 и запуска их через инструмент преобразования / миграции Tomcat Java EE 8 в Jakarta EE 9.

test. jsp

Может быть лучше придерживаться Tomcat 9 для вас сейчас?

Mark

...