【问题标题】:Can tld files be accessed from WEB-INF\lib\{*.jar}\META-INF\resources\WEB-INF directory?可以从 WEB-INF\lib\{*.jar}\META-INF\resources\WEB-INF 目录访问 tld 文件吗?
【发布时间】:2014-09-09 08:16:47
【问题描述】:

我有一个 jsp 文件,其中包含如下标签:

<%@ taglib prefix="abc" uri="/WEB-INF/tlds/xyz.tld" %>

在我的应用中,部署结构是:

WEB-INF
  |-lib
      |-some.jar
          |-META-INF
              |-resources
                  |-WEB-INF
                      |-tlds
                          |-xyz.tld

这在 Tomcat 7 中运行良好,但是当我将我的应用程序部署到 JBoss 作为 7 时,它找不到 tld 文件。

那么,是 JBoss 的问题(不支持 Servlet3.0?)还是无法从 jar 中的 META-INF\resources\WEB-INF 目录访问 tld 文件?

【问题讨论】:

  • 你能把错误堆栈贴在这里吗?

标签: java jboss taglib servlet-3.0


【解决方案1】:

这不是 Servlet 3.0 的问题,而是 JSP 2.2 的问题。 (它们是不同的规格)。

taglib 声明的uri 部分不是位置。它是一个key,必须与

的内容对应
<uri>your/tld/uri</uri>

tld 文件中的元素。

如果缺少此元素,则必须在 web.xml 的 taglib 映射中声明它,并在此处提供 uri:

<jsp-config>
     <taglib>
         <taglib-uri>/WEB-INF/tlds/xyz.tld</taglib-uri>
         <taglib-location>/WEB-INF/lib/some.jar/META-INF/resources/WEB-INF/tlds/xyz.tld</taglib-location>
     </taglib>
</jsp-config>

【讨论】:

  • 也可以使用的替代解决方案:在 TLD 文件中声明元素 your/tld/uri 而不是在 web.xml 中的地图中