【发布时间】:2015-09-26 06:22:59
【问题描述】:
在 .jsp 文件或 jsf facelets 中使用 JSTL 标签时,您必须声明要使用的标签库。
示例(jsp):
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
示例(jsf):
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://java.sun.com/jsp/jstl/core">
人们总是说 URI 除了使命名空间明确并提供额外的文档之外没有任何作用。我不相信这个。我知道 facelet/.jsp 不会通过 Internet 从 URI 加载任何信息。但是必须以某种方式使用正确的 URI 来识别正确的标签库。
有人能解释一下这是怎么做到的吗?
我检查了这一点:如果您只更改 URI 中的一个字母,则会出现异常:
org.apache.jasper.JasperException: /todolist.jsp(10,61) PWC6188:
The absolute uri: http://java.sux.com/jsp/jstl/core cannot be resolved
in either web.xml or the jar files deployed with this application
【问题讨论】:
-
你自己已经给出了答案(强调我的)。 “不会通过互联网从 URI 中加载任何信息。但是必须以某种方式使用正确的 URI 来识别正确的标签库” URL(L=定位符)和URI(I=标识符)的区别
-
是的,但这个 URI 实际上是一个 URL。让事情有点误导的是,它没有定位标签库,而只是定位标签库文档。我的问题是,如何使用 URI 来定位标签库(已在下面回答)。大多数人说,它只是用来给命名空间一个明确的名字,你也可以叫它“johnDoe”。这不后悔。 URI 严格链接到已明确提供给标记库的名称/标识符。
-
不,它具有您习惯于来自 URL stackoverflow.com/questions/176264/… 的格式。这里没有资源的“定位/加载”。它只是“识别”。它不能有任何名称,它必须符合定义(请参阅 uri 信息选项卡)。它用于给某物一个明确的命名空间。但如果以这种方式使用,它只需要引用其他东西(taglib、xsd 等)。
-
感谢您的链接。我的理解: URL 是一个特殊的 URI,它包含有关已识别资源的可用位置以及检索它的机制的信息。在我们的例子中,例如
http://www.w3.org/1999/xhtml是仅用于 XHTML 文档的 URL。它包含用于检索 (http://) 的机制,但未使用该机制。我的问题源于这样一个事实,即在 jsf 案例中,xmlns属性使用一个看起来像 URL 的 URI,但没有揭示检索标签库的机制。 -
正确,不需要,因为它只是一个标识符,而不是一个定位器