使用 JSP,taglib URI 是不是意味着我的站点依赖于 URI 解析?
Posted
技术标签:
【中文标题】使用 JSP,taglib URI 是不是意味着我的站点依赖于 URI 解析?【英文标题】:With JSP, does the taglib URI mean that my site is reliant on the URI resolving?使用 JSP,taglib URI 是否意味着我的站点依赖于 URI 解析? 【发布时间】:2010-12-20 20:13:53 【问题描述】:我正在尝试在我的网站中实现一个站点网格装饰器。他们网站上的示例有一个完整的 URI 链接到他们的网站,用于装饰器文件的 taglib 部分:
<%@ taglib uri="http://www.opensymphony.com/sitemesh/decorator" prefix="decorator" %>
这是否意味着我的网站依赖于能够访问该网站?因为我想部署在一个无法访问外部世界的内部网中。
谢谢
【问题讨论】:
【参考方案1】:不,它没有。 taglib
中声明的 URI 将在本地解析,只要它与标记库描述符中声明的 URI 匹配(或在您的 web.xml
中,取决于您的容器实现的 JSP 版本)。
更多详情请见Java EE tutorial。
【讨论】:
当您说“本地解决”时,您的意思是如果我的 LIB 文件夹中有 TLD 文件就可以了吗? TLD 不属于lib
,它应该在提供标签的jar 的/WEB-INF
或/META-INF
中。但是,是的,你会没事的。
太棒了,我用 7-zip 打开了 JAR,它确实在 meta-inf 文件夹中有这些文件。你让我安心了。谢谢
PS:我查看的 jar 是 'sitemesh-2.4.2.jar'
@ChssPly76 我终于解决了一个类似的问题。在我的一生中找不到正确的 Java SE 7 文档...有人能指点我一个更官方的来源吗? di.unipi.it/~ghelli/didattica/bdldoc/A97329_03/web.902/a95882/…?找到正确文档的正确过程是什么?【参考方案2】:
没有。 URI 是一个通用资源标识符,它不是一个定位器 (URL)。这意味着 URI 用于唯一标识内部标记库注册表中的每个标记库,就像在 Java 中使用键从 HashMap
或 Hashtable
设置/获取值一样。
根据 Sun 的 Web 应用程序规范,将 URI 解析为可由应用程序加载/调用的实际标记库按以下顺序进行:
-
检查
web.xml
文件以匹配具有给定URI 的taglib
标记,然后按照taglib-location
标记实际加载TLD。
如果未找到与 #1 的匹配项,请递归检查应用程序中所有 JAR 的 META-INF
目录中是否包含包含指定 URI 的 TLD。
【讨论】:
但在这种情况下它 是一个 URL :-) 根据您的 JSP 的标记/处理方式,它甚至可以像一个一样使用(用于解析 XML 表单,例如示例)。 我觉得回答这个问题不会让事情变得更清楚:)【参考方案3】:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" >
uri
属性值解析为容器可以理解的位置,prefix
属性通知容器哪些标记位是自定义操作。
【讨论】:
以上是关于使用 JSP,taglib URI 是不是意味着我的站点依赖于 URI 解析?的主要内容,如果未能解决你的问题,请参考以下文章
Spring使用c标签时缺失jstl uri="http://java.sun.com/jsp/jstl/core" prefix="c"