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

问题描述 投票:5回答:2

[我感觉好像丢失了一些东西-从表面上看,JSP带有对标签的支持,如this question's answer所示(那个家伙在问一个纯jsp问题,并得到一个涉及标签的答案)。但是,如果我尝试运行给定的代码

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

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

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

jsp jstl
2个回答
8
投票

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

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

  1. 下载jstl-1.2.jar并将其复制/复制到webapp的/WEB-INF/lib文件夹(这是webapp的默认类路径的一部分)。使用Maven时,请使用以下坐标:

    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
  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文件,并用TLD声明使Webapp的jstl.jar变得混乱。您永远不要这样做,这是一个错误的建议,这是由JSTL 1.0-> JSTL 1.1步骤期间taglib URI的更改引起的。他们决定不重新定义JSP中的taglib URI,而是决定在standard.jar中重新定义旧的taglib URI,这成为了一个神话。

JSP本身出厂时仅带web.xml标签。这些是JSTL的not部分。

另请参见:

  • web.xml
  • <jsp:xxx>

1
投票

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

What exactly is Java EE?
© www.soinside.com 2019 - 2024. All rights reserved.