【发布时间】:2024-01-10 04:41:01
【问题描述】:
我觉得我遗漏了一些东西——从它看来,JSP 开箱即用,支持标签,正如this question's answer 所示(这家伙问的是一个纯 jsp 问题并得到了一个涉及标签的答案)。 但是如果我尝试运行给定的代码
<c:out value="${myString}"/>
(当然之前定义了myString),jsp只是将上面的行写入html。
我需要做一些额外的事情来启用它吗?
【问题讨论】:
我觉得我遗漏了一些东西——从它看来,JSP 开箱即用,支持标签,正如this question's answer 所示(这家伙问的是一个纯 jsp 问题并得到了一个涉及标签的答案)。 但是如果我尝试运行给定的代码
<c:out value="${myString}"/>
(当然之前定义了myString),jsp只是将上面的行写入html。
我需要做一些额外的事情来启用它吗?
【问题讨论】:
你需要在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。您可以考虑将答案添加到您的答案中吗?
JSTL 支持取决于所使用的服务器/servlet 容器。有些附带 JSTL,有些则没有。这与 JSP/Servlet 版本无关。通常,WildFly/Payara/TomEE 之类的普通 JEE 服务器已经自带 JSTL,但 Tomcat/Jetty/Undertow 之类的准系统 servlet 容器却没有。对于他们,您需要自己安装 JSTL。
实际上非常简单(假设您使用的是 Servlet 2.5 或更高版本):
按照此答案中的说明安装 JSTL:How to install JSTL? The absolute uri: http://java.sun.com/jstl/core cannot be resolved。
按照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 本身只附带了开箱即用的<jsp:xxx> 标签。这些不是 JSTL 的一部分。
【讨论】:
在 POM XML 文件中添加 JSTL 依赖文件(如果使用 Maven 项目),否则添加 JSTL jar 文件到项目中
在想要使用 JSTL 标记的 JSP 中添加以下行 -
在您的代码中,您使用的是 JSTL 标记和表达式语言,它被编写为 ${myString}。要支持表达式语言,您必须在 Page 指令中设置 isELIgnored="false" 属性
isELIgnored="false" %>
【讨论】: