В JSP необходимо ли повторно объявлять библиотеки тегов во включенных файлах?
Вопрос
Я не очень знаком с тем, как это работает в JSP
но в
шаблон main.jsp есть такой:
<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
<jsp:include page="/jsp/common_head.jsp"/>
затем в common_head.jsp мы снова получаем это:
<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>
необходимо ли это?
или другими словами
Распространяются ли объявления taglib для включения файлов?
Решение
Да, это необходимо.Перед первым запуском каждый файл JSP будет индивидуально преобразован / переведен / скомпилирован в автономный Servlet
класс.Все теги будут переведены в "реальный" Java-код / методы.Если вы не объявляете taglib, то компилятор JSP не знает, какой Java-код / методы ему нужно сгенерировать / вызвать для конкретных тегов.
В случае, например, Tomcat, загляните в /work
папка для всех этих скомпилированных JSP.Посмотрите на их источник, и все станет ясно.
Другие советы
В
<jsp:include page="/jsp/common_head.jsp"/>
...тег является динамическим включаемым, что означает, что он динамически вызывает страницу common_head.jsp, которая компилируется независимо от включающей страницы.Таким образом, директива taglib должна быть необходима.
Если, с другой стороны, вы должны были выполнить статическое включение, используя include директива
<%@ include file="/jsp/common_head.jsp" %>
...файл был бы скопировано-вставлено и и скомпилирован со страницы, с которой он включен.Тогда директива taglib не должна быть нужна.
В любом случае вы можете захотеть включить taglib просто для того, чтобы получить поддержку редактора тегов, которые вы используете во время разработки.
Обратите внимание, что статические файлы включаются статически, даже с тегом jsp:include
включить директиву: http://java.sun.com/products/jsp/syntax/1.2/syntaxref129.html#997991
jsp включает в себя: http://java.sun.com/products/jsp/syntax/1.2/syntaxref1214.html
Поскольку вы включаете динамический ресурс, этот ресурс является "автономным", поэтому он должен включать любую библиотеку тегов, которую вы используете.Другой вопрос, используете ли вы эти теги...
Да , это требуется для компиляции JSP .Вы также можете использовать приведенный ниже taglib вместо c.tld.
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
надеюсь, это поможет
В других системах шаблонов определения обычно переносятся.Я не понимаю, почему вы должны использовать его снова