[我感觉好像丢失了一些东西-从表面上看,JSP带有对标签的支持,如this question's answer所示(那个家伙在问一个纯jsp问题,并得到一个涉及标签的答案)。但是,如果我尝试运行给定的代码
<c:out value="${myString}"/>
((当然,之前定义了myString
,jsp只是将上述行写入html。
我需要做一些额外的事情来启用它吗?
JSTL支持取决于所使用的服务器/ servlet容器。有些附带JSTL,有些则没有。这与JSP / Servlet版本无关。通常,普通的JEE服务器(例如WildFly / Payara / TomEE)已经随包装附带了JSTL,但准系统的servlet容器(例如Tomcat / Jetty / Undertow)却没有。对于他们,您需要自己安装JSTL。
实际上非常简单(假设您使用的是Servlet 2.5或更高版本):
下载jstl-1.2.jar并将其复制/复制到webapp的/WEB-INF/lib
文件夹(这是webapp的默认类路径的一部分)。使用Maven时,请使用以下坐标:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
根据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>
您需要在JSP的顶部声明taglib:
What exactly is Java EE?