Что означает "INFO: TLD пропущен. URI уже определен" означает?
При запуске приложения JSF 2 в eclipse
Я получаю несколько информационных журналов, которые был пропущен 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
Это означает, что у вас есть дублированные файлы TLD в вашем пути к среде выполнения webapp. Поскольку TLD обычно содержатся в библиотечных JAR файлах, это, в свою очередь, означает, что у вас есть дубликаты JAR файлов в вашем пути к среде выполнения webapp.
Предполагая, что вы не коснулись папки appserver /lib
или JDK /lib
, то эти дубликаты находятся в папке /WEB-INF/lib
сборки WAR. Очистите его.
Ответ 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 он помещает taglib-uri из web.xml и uri из tld файла в набор.
При загрузке с WEB-INF или jar uri из tld файла.
Tomcat должен избегать дублирования добавления tld-слушателя, поэтому он проверяет, существует ли uri в наборе. Если uri уже существует, он регистрирует сообщения, отправленные, и пропускает добавление tld-прослушивателя.
2, создать кеш
1) Записи web.xml, тег uri получен из web.xml
2) сканировать tld файлы в WEB-INF, тег uri получен из tld файлов
3) сканирующие банки, тег 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', потому что JSTL уже отправлен с Tomcat (это только для вашей IDE):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
Тогда ошибка исчезнет.