“INFO:TLD 已跳过。URI 已定义”是啥意思?

Posted

技术标签:

【中文标题】“INFO:TLD 已跳过。URI 已定义”是啥意思?【英文标题】:What does "INFO: TLD skipped. URI is already defined" mean?“INFO:TLD 已跳过。URI 已定义”是什么意思? 【发布时间】:2012-02-02 05:01:13 【问题描述】:

在 Eclipse 中运行我的 JSF 2 应用程序时 我收到了几个 TLD 被跳过的信息日志,因为它已经定义如下:

Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags/form is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://www.springframework.org/tags is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/core is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/core is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/fmt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/fmt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/functions is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/permittedTaglibs is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://jakarta.apache.org/taglibs/standard/scriptfree is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/sql is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/sql is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml_rt is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jstl/xml is already defined
Jan 3, 2012 7:24:45 PM org.apache.catalina.startup.TaglibUriRule body
INFO: TLD skipped. URI: http://java.sun.com/jsp/jstl/xml is already defined

我很想知道,这个日志是什么意思?

【问题讨论】:

请不要转发您的问题。 链接的重复帖子已被删除 【参考方案1】:

这意味着您的 Web 应用的运行时类路径中有重复的 TLD 文件。由于 TLD 通常包含在库 JAR 文件中,这反过来意味着您的 Web 应用的运行时类路径中有重复的 JAR 文件。

假设您没有触及 appserver 的 /lib 文件夹或 JDK 的 /lib 文件夹,那么这些重复项位于 WAR 构建的 /WEB-INF/lib 文件夹中。清理它。

【讨论】:

【参考方案2】:

规范要求的 URI 的优先级顺序是:

J2EE platform taglibs - Tomcat doesn't provide these

web.xml entries

JARS in WEB-INF/lib & TLDs under WEB-INF (equal priority)

Additional entries from the container

Tomcat 加载 tld 两次。

1、Tomcat启动时会加载tld,在tld文件中寻找监听器。

2,当第一个jsp文件被编译时,它会建立一个tld对的缓存。

1、加载tld查找tld文件中的监听器

当从 web.xml 加载时,它将 web.xml 中的 taglib-uri 和 tld 文件中的 uri 放入一个集合中。 从 WEB-INF 或 jar 加载时,uri 来自 tld 文件。

Tomcat 需要避免重复添加 tld 监听器,因此它会检查 uri 是否存在于集合中。如果 uri 已经存在,它会记录您发布的消息并跳过添加 tld 侦听器。

2、构建缓存

1) web.xml 条目,标签 uri 取自 web.xml

2) 扫描WEB-INF下的tld文件,标签uri取自tld文件

3) 扫描jar,标签uri取自tld文件。

如果存在uri aready,该条目将被忽略。

【讨论】:

【参考方案3】:

这意味着例如,如果您使用 Tomcat 和 Maven(或其他服务器),则您发布了一个已经在服务器上找到的 JSTL 库,并且服务器确实会抱怨。

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

在部署应用程序时(在 Tomcat 上),您会收到错误消息:

INFO: TLD skipped. URI: http://java.sun.com/jstl/core_rt is already defined
Mar 02, 2017 2:19:32 PM org.apache.catalina.startup.TaglibUriRule body

解决方案是使用标签 'scope' 和值 'provided',因为 Tomcat 已经附带了 JSTL(它仅适用于您的 IDE):

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>provided</scope>
    </dependency>

然后错误就会消失。

【讨论】:

以上是关于“INFO:TLD 已跳过。URI 已定义”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

the hash for the file is not present in the specified catalog file,是啥意

java+p+=+new+JPanel(new+GridLayout(5,3,0,15));啥意?

JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表啥意

带式输送机td75型,矩形头尾架,b1000mm,v=1.6m/h,q=500t/h,l=18.5m,h=1.95m,啥意

重新捡起flask

怎么根据用户ip地址转换成相应的省会地址