【问题标题】:Which role plays URI in identifying JSTL tag libraries?URI 在识别 JSTL 标记库中扮演什么角色?
【发布时间】: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,但没有揭示检索标签库的机制。
  • 正确,不需要,因为它只是一个标识符,而不是一个定位器

标签: jsp jsf jstl uri


【解决方案1】:

URI 在 taglib 定义文件中定义。如果没有正确的 URI,则无法解析引用。它就像一个名字或钥匙。

例如 core.tld

<description>JSTL 1.2 core library</description>
  <display-name>JSTL core</display-name>
  <tlib-version>1.2</tlib-version>
  <short-name>c</short-name>
  <uri>http://java.sun.com/jsp/jstl/core</uri>

您还可以在 web.xml 中定义自定义标记库的 URI

<taglib>
  <taglib-uri>http://lelelu.org/mytag-io</taglib-uri>
  <taglib-location>/WEB-INF/mytags-io.tld</taglib-location>
</taglib>

【讨论】:

  • 感谢您的回答。还有一个问题:为什么有时会在 web.xml 中,有时在 .tld 文件中找到它?在哪里可以找到 core.tld?
  • 你可以从maven repo下载JSTL的源代码。 link 您可以在 web.xml 中为您自己的 TagLibs 使用定义。
猜你喜欢
  • 1970-01-01
  • 2020-01-25
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多