Недопустимый файл tld, но его имя файла

#jsp #jsp-tags #taglib #tag-library-descriptor

Вопрос:

Я создаю пользовательский taglib под SpringBoot. Мой тег taglib-это:

 <%@taglib prefix="ttl" uri="/WEB-INF/tags/resourceBundle.tld" %>
 

Я создал файл TLD в соответствии со многими доступными источниками и поместил его в /WEB-INF/теги/ResourceBundle.tld, вот часть с тегом uri

 <taglib>
    <uri>/WEB-INF/tags/resourceBundle.tld</uri>
    ...
 

но я получаю это сообщение об ошибке, когда ссылаюсь на библиотеку тегов:

 org.apache.jasper.JasperException: Invalid tld file: [/WEB-INF/tags/resourceBundle.tld], see JSP specification section 7.3.1 for more details
 

тем не менее, я не верю, что он когда-либо будет прочитан, поскольку он признан недействительным в TagLibraryInfoImpl::generateTldResourcePath()@281:

     if (uri.endsWith(".jar")) {
       // snip
    } else if (uri.startsWith("/WEB-INF/lib/") || uri.startsWith("/WEB-INF/classes/") ||
            (uri.startsWith("/WEB-INF/tags/") amp;amp; uri.endsWith(".tld")amp;amp; !uri.endsWith("implicit.tld"))) {
        err.jspError("jsp.error.tld.invalid_tld_file", uri);
    }
 

Код заканчивается в последней строке err.jspError:

         err.jspError("jsp.error.tld.invalid_tld_file", uri);
 

В принципе, если URI начинается с «/WEB-INF/теги» (как говорят многие источники, является обязательным) и заканчивается «.tld», но не «неявный.tld», то файл tld является «недопустимым» — этот вывод делается даже без открытия файла.

Я изменил uri <%@taglib%>, чтобы ссылаться на несуществующий файл, и получаю то же сообщение об ошибке по тому же пути через код (выше).

Я прочитал множество статей на эту тему и рассмотрел старый проект, в котором я использовал пользовательский taglib (но в нем использовались ANT и Spring, я использую Maven и SpringBoot), я не могу понять, как распознать мою библиотеку тегов.

Может кто-нибудь сказать мне, что я делаю не так?

Ответ №1:

В спецификации JSP 2.1 говорится, что:

Файлы TLD не должны размещаться в /WEB-INF/классах или /WEB-INF/lib и не должны размещаться внутри /WEB-INF/тегов или его подкаталога, если только он не назван неявным.tld.

Я предлагаю использовать другой каталог.

Комментарии:

1. Очевидно, я не игрок в гольф… Клянусь, я читал в чьем-то блоге, что они ДОЛЖНЫ быть в тегах/…

2. Подтверждаю, спасибо. Теперь я буду просматривать историю своего браузера и находить странствующие блоги. Было бы полезно, если бы сообщение было «invalid_tld_filepath», а не просто «invalid_tld_file».