Что означает "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>

Тогда ошибка исчезнет.