本文介绍了在Tomcat Maven项目中出错&找不到"https://java.sun.com/jsp/jstl/core"的标记库描述符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用Eclipse版本2021-03创建了一个简单的Maven Web项目,部署到Tomcat 9上,包含以下pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.gillopez.web.jstl</groupId>
    <artifactId>jstl-webapp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>jakarta.platform</groupId>
            <artifactId>jakarta.jakartaee-web-api</artifactId>
            <version>8.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>jstl-webapp</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
        </plugins>
    </build>
</project>

我创建了一个简单的JSP,其中包含核心JSTL标记的taglib指令:

<%@page import="java.time.LocalDateTime"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<body>

<c:set var="stuff" value="<%= LocalDateTime.now() %>" />

Time on server is ${stuff}
</body>
</html>

但是,我在JSP编辑器中看到以下错误消息:

Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
如果我在服务器上运行它,我会收到以下错误:绝对URI:[无法在与此应用程序一起部署的Web.xml或JAR文件中解析http://java.sun.com/jsp/jstl/core]&q;

JSTL包包含在jakarta.jakartaee-web-api-8.0.0.jar:

为什么我收到此错误消息?

我可以通过在pom.xml中添加以下依赖项来使其正常工作。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

如果jakarta.jakartaee-web-API JAR文件中已经包含JSTL包,为什么需要执行此操作?

APIAPI

工件jakarta.jakartaee-web-api只包含Jakarta EE 8的推荐答案JAR,不包含实现。由于您使用了provided作用域,因此假定容器将提供实现。

但是,Tomcat不是一个完整的Jakarta EE8服务器(如WildFly),它只实现了五个规范(参见documentation):Servlet、JSP、EL、WebSocket和JASPIC。因此,对于Tomcat9,您应该将jakarta.jakartaee-web-api替换为:

    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>4.0.4</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.servlet.jsp</groupId>
      <artifactId>jakarta.servlet.jsp-api</artifactId>
      <version>2.3.6</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.el</groupId>
      <artifactId>jakarta.el-api</artifactId>
      <version>3.0.3</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.websocket</groupId>
      <artifactId>jakarta.websocket-api</artifactId>
      <version>1.1.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.security.auth.message</groupId>
      <artifactId>jakarta.security.auth.message-api</artifactId>
      <version>1.1.3</version>
      <scope>provided</scope>
    </dependency>

您要使用的所有其他API必须由您的应用程序及其实现提供。

这篇关于在Tomcat Maven项目中出错&找不到&quot;https://java.sun.com/jsp/jstl/core&quot;的标记库描述符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-20 19:33