在 web.xml 中声明 JSP taglib 指令

Posted

技术标签:

【中文标题】在 web.xml 中声明 JSP taglib 指令【英文标题】:declare JSP taglib directives in web.xml 【发布时间】:2010-09-18 14:20:29 【问题描述】:

我似乎记得读过可以声明 taglib 指令,例如:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

在 web.xml 中。这消除了在每个使用 taglib 的 JSP 文件中复制该指令的需要。有人可以告诉我如何将这些指令添加到 web.xml 中吗?

【问题讨论】:

遗憾,因为有一个解决方案:前奏。使用 jsp-config 部分的 jsp-property-group 元素及其 include-prelude 子元素,您可以根据自己的正则表达式指定要包含在任何 JSP 中的片段。你可以把任何你想要的标签库指令放在那里。 这个问题绝对不应该作为题外话来结束。 【参考方案1】:

web.xml 中的 taglib 元素与上面的 taglib 指令的用途不同。

正如大卫所说,每个页面都需要taglib 指令。

如果你有很多页面使用通用的标签库,你可以通过将标签库指令放入一个包含文件中,并在每个页面中包含这个文件来简化它。但不管你怎么做,taglib 指令必须以某种方式出现在页面上。

您需要在每个页面上包含的标签如下所示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

如果您在自定义位置有自定义 taglib,您还可以指定相对于 webapp 根目录的位置:

 <%@ taglib prefix="ex" uri="/taglib.tld" %>

Further reading on the taglib directive

来自 web.xml 的 taglib 指令将标签 uris 映射到标签库的物理位置。从 JSP 2.0 开始它是可选的,因为兼容的容器将在一组标准位置中查找以尝试自动发现标记库:/WEB-INF 及其子目录,/META-INF 以及 JAR 文件。

看起来像这样,在 web.xml 中:

<taglib>
  <taglib-uri>
    http://www.example.com/taglib
  </taglib-uri>
  <taglib-location>
    /taglib.tld
  </taglib-location>
</taglib>

而taglib在JSP页面中是这样引用的(每个页面上的taglib指令都免不了!):

<%@ taglib prefix="ex" uri="http://www.example.com/taglib" %>

这相当于我为上面的 taglib 指令给出的第二个示例。最大的区别在于您指向 taglib 位置的方式。

This page 包含更多信息。

【讨论】:

我认为它不正确的例子它仍然给出错误 java.lang.ClassNotFoundException: org.apache.taglibs.standard.tei.ImportTEI 很好的解释。我应该在这里补充一下,您可以在标签库描述文件(tld 文件)中添加一个 uri 标签,例如 &lt;uri&gt;/ELFunctionTagLibrary&lt;/uri&gt; 并在您的 jsp 页面中使用此 uri。【参考方案2】:

对不起,你有点误会了。如果页面使用 taglib,则必须在页面上有一个 taglib 指令。您可以将常用的 taglib 指令放在一个包含文件中,您的所有页面都使用 include 指令包含该文件,但在编译时 taglib 指令必须存在。

我更喜欢不在 web.xml 中包含 taglib 元素,而是让 taglib 指令指定在 WEB-taglib jar 文件中的 TLD 中的“uri”元素中使用的 URI 值- INF/库。

【讨论】:

如果我使用 Apache 磁贴,方法是什么。我是否需要遵循相同的方法来包含 taglib 指令。我尝试在基本模板 jsp 中定义 taglib 指令。但是,我无法在 jsp 中获取它们的引用,例如使用基本模板 jsp 配置的页眉、页脚和其他 jsp。 得到了上面我的问题链接的答案:***.com/questions/8687873/…

以上是关于在 web.xml 中声明 JSP taglib 指令的主要内容,如果未能解决你的问题,请参考以下文章

JSP自定义标签

jstl标签在xml中声明

java中jstl标签使用问题求助

web.xml中taglib的问题

自定义标签tld的使用

为啥 <taglib> 在我的 web.xml 中给我一个问题?