“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,啥意