【问题标题】:Enabling JavaServerPages Standard Tag Library (JSTL) in JSP在 JSP 中启用 JavaServerPages 标准标记库 (JSTL)
【发布时间】:2024-01-10 04:41:01
【问题描述】:

我觉得我遗漏了一些东西——从它看来,JSP 开箱即用,支持标签,正如this question's answer 所示(这家伙问的是一个纯 jsp 问题并得到了一个涉及标签的答案)。 但是如果我尝试运行给定的代码

<c:out value="${myString}"/>

(当然之前定义了myString),jsp只是将上面的行写入html。

我需要做一些额外的事情来启用它吗?

【问题讨论】:

    标签: jsp jstl


    【解决方案1】:

    你需要在JSP的顶部声明taglib:

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

    【讨论】:

    • 谢谢!这看起来是朝着正确方向迈出的一步,但仍然不是一个确切的答案,因为我得到了异常 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 如果我需要安装一些东西,那很好 - 但我认为这个 taglib 是“开箱即用”的 jsp。您可以考虑将答案添加到您的答案中吗?
    • @Noam:它仅在某些 JSP 版本(在本例中为 2.0 和更早版本)上开箱即用。但是您没有告诉我们有关您的设置的任何信息,所以我无法给您更好的答案。
    • skaffman,这实际上不是真的。这取决于使用的服务器。
    【解决方案2】:

    JSTL 支持取决于所使用的服务器/servlet 容器。有些附带 JSTL,有些则没有。这与 JSP/Servlet 版本无关。通常,WildFly/Payara/TomEE 之类的普通 JEE 服务器已经自带 JSTL,但 Tomcat/Jetty/Undertow 之类的准系统 servlet 容器却没有。对于他们,您需要自己安装 JSTL。

    实际上非常简单(假设您使用的是 Servlet 2.5 或更高版本):

    1. 按照此答案中的说明安装 JSTL:How to install JSTL? The absolute uri: http://java.sun.com/jstl/core cannot be resolved

    2. 按照this JSTL documentation 在JSP 顶部声明标签(单击任何标签库查看声明示例)。对于JSTL core,如下:

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

    就是这样。如果您(仍然)使用 Servlet 2.4,那么您需要下载 jstl.jar and standard.jar(它是 JSTL 1.1 的一部分)。其余步骤相同(只需放入classpath并在JSP顶部声明即可)。

    您可能会注意到一些糟糕的在线教程会建议提取 JAR 文件并将 web 应用的 web.xml 与 TLD 声明混为一谈。你不应该这样做,这是一个错误的建议,它是由 JSTL 1.0 -> JSTL 1.1 步骤期间 taglib URI 的变化引起的。与更新 JSP 中的 taglib URI 不同,人们决定重新定义 web.xml 中的旧 taglib URI,这成为了一个神话。

    JSP 本身只附带了开箱即用的&lt;jsp:xxx&gt; 标签。这些不是 JSTL 的一部分。

    另见:

    【讨论】:

      【解决方案3】:
      1. 在 POM XML 文件中添加 JSTL 依赖文件(如果使用 Maven 项目),否则添加 JSTL jar 文件到项目中

      2. 在想要使用 JSTL 标记的 JSP 中添加以下行 -

      3. 在您的代码中,您使用的是 JSTL 标记和表达式语言,它被编写为 ${myString}。要支持表达式语言,您必须在 Page 指令中设置 isELIgnored="false" 属性

        isELIgnored="false" %>

      【讨论】: