在JSP中启用JavaServerPages标准标记库(JSTL)

在JSP中启用JavaServerPages标准标记库(JSTL),jsp,jstl,Jsp,Jstl,我觉得我遗漏了一些东西——从表面上看,JSP是开箱即用的,支持标记,如图所示(这家伙问了一个纯JSP问题,得到了一个涉及标记的答案)。 但是如果我尝试运行给定的代码 <c:out value="${myString}"/> (当然,对于前面定义的myString),jsp只是将上述行写入html 我需要做一些额外的事情来启用它吗?您需要在JSP的顶部声明标记库: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefi

我觉得我遗漏了一些东西——从表面上看,JSP是开箱即用的,支持标记,如图所示(这家伙问了一个纯JSP问题,得到了一个涉及标记的答案)。 但是如果我尝试运行给定的代码

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

(当然,对于前面定义的
myString
),jsp只是将上述行写入html


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

您需要在JSP的顶部声明标记库:

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

JSTL支持取决于所使用的服务器/servletcontainer。有些船有JSTL,有些船没有。这与JSP/Servlet版本无关。通常,普通的JEE服务器(如WildFly/Payara/TomEE)已经附带了JSTL,但是像Tomcat/Jetty/Undertow这样的简陋的servletcontainers却没有。对于它们,您需要自己安装JSTL

它实际上非常简单(假设您使用的是Servlet2.5或更高版本):

  • 按照此答案中的说明安装JSTL:

  • 按照在JSP顶部声明标记(单击任何标记库以查看声明示例)。原因如下:

     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    
    
  • 就这些。如果您(仍然)使用Servlet2.4,那么您需要下载(这是JSTL1.1的一部分)。剩下的步骤是相同的(只需放入classpath并在JSP顶部声明)

    您可能会注意到,一些糟糕的在线教程建议提取JAR文件,并将webapp的
    web.xml
    与TLD声明混在一起。您永远不应该这样做,这是一个错误的建议,它是由JSTL 1.0->JSTL 1.1步骤中taglib URI的更改引起的。人们没有更新JSP中的标记库URI,而是决定在
    web.xml
    中重新定义旧的标记库URI,这成了一个神话

    JSP本身只附带了开箱即用的
    标记。这些都不是JSTL的一部分

    另见:
  • 在POM XML文件中添加JSTL依赖项文件(如果使用Maven项目),否则添加JSTL jar 归档到项目中

  • 在JSP中添加要使用JSTL标记的下面一行-

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


  • 谢谢这看起来是朝着正确的方向迈出的一步,但仍然不是一个确切的答案,因为我得到了异常
    org.apache.jasper.jaspereException:the absolute uri:http://java.sun.com/jsp/jstl/core 无法在web.xml或与此应用程序一起部署的jar文件中解析
    ,如果我需要安装某些东西,这很好,但我认为这个标记库是用jsp“开箱即用”的。“你能考虑把这个答案添加到你的答案吗?”诺姆:它只在某些版本的JSP(2和更大,在这种情况下)出来。但是你没有告诉我们你的设置,所以我不能给你一个更好的答案。斯卡夫曼,这实际上不是真的。这取决于所使用的服务器。