Обзор элементов синтаксиса JSP
Во-первых, чтобы прояснить ситуацию, вот краткий обзор элементов синтаксиса JSP :
- Директивы : Они передают информацию о странице JSP в целом.
- Элементы сценариев : это элементы кодирования Java, такие как объявления, выражения, скриптлеты и комментарии.
- Объекты и области : объекты JSP могут создаваться явно или неявно и доступны в пределах определенной области, например, из любой точки на странице JSP или в сеансе.
- Действия : они создают объекты или влияют на выходной поток в ответе JSP (или оба).
Как контент включен в JSP
Существует несколько механизмов для повторного использования содержимого в файле JSP.
Следующие 4 механизма для включения контента в JSP могут быть классифицированы как прямое повторное использование :
(для первых трех механизмов цитирование из "Head First Servlets and JSP" )
1) Директива включения :
<%@ include file="header.html" %>
Статический : добавляет содержимое из значения атрибута файла на текущую страницу во время перевода . Директива изначально предназначалась для шаблонов статического макета, таких как заголовки HTML.
2) <jsp:include>
Стандартное действие :
<jsp:include page="header.jsp" />
Динамический : добавляет содержимое из значения атрибута страницы на текущую страницу во время запроса . Предназначен скорее для динамического контента из JSP.
3) <c:import>
тег JSTL:
<c:import url=”http://www.example.com/foo/bar.html” />
Динамический : добавляет содержимое из значения атрибута URL на текущую страницу во время запроса . Он работает примерно так же
<jsp:include>
, но он более мощный и гибкий: в отличие от двух других, <c:import>
URL может быть за пределами веб-контейнера !
4) Прелюдии и коды:
Статические : прелюдии и коды могут быть применены только к началу и концу страниц .
Вы можете неявно включать прелюдии (также называемые заголовками) и коды
(также называемые нижними колонтитулами) для группы страниц JSP, добавляя
<include-prelude>
и <include-coda>
элементы соответственно в <jsp-property-group>
элемент в дескрипторе развертывания веб-приложения web.xml . Подробнее читайте здесь:
• Настройка неявных включений в начале и конце JSP
• Определение неявных включений
Файл тегов - это косвенный метод повторного использования контента, способ инкапсуляции контента многократного использования . Файл тегов является исходный файл, содержащий фрагмент JSP - кода , который можно повторно использовать в качестве пользовательского тега .
ЦЕЛЬ включает в себя и файлы тегов отличается.
Файл тегов (концепция, представленная в JSP 2.0) является одним из вариантов создания пользовательских тегов . Это более быстрый и простой способ создания пользовательских тегов .
Пользовательские теги , также известные как расширения тегов, являются элементами JSP, которые позволяют вставлять пользовательскую логику и выходные данные, предоставляемые другими компонентами Java, в страницы JSP. Логика, предоставляемая через пользовательский тег, реализуется объектом Java, известным как обработчик тега .
Некоторые примеры задач, которые могут быть выполнены с помощью пользовательских тегов, включают работу с неявными объектами, обработку форм, доступ к базам данных и другим корпоративным службам, таким как электронная почта и каталоги, а также реализация управления потоком.
Относительно вашего редактирования
Возможно, в вашем примере (в вашем Edit ) нет разницы между использованием прямого включения и файла тегов. Но пользовательские теги имеют богатый набор функций . Они могут
Быть настроенным с помощью атрибутов, передаваемых с вызывающей страницы.
Передайте переменные обратно на страницу вызова.
Доступ ко всем объектам, доступным для страниц JSP.
Общайтесь друг с другом. Вы можете создать и инициализировать компонент JavaBeans, создать общедоступную переменную EL, которая ссылается на этот компонент в одном теге, а затем использовать компонент в другом теге.
Будьте вложены друг в друга и общайтесь посредством частных переменных.
Также прочитайте это из "Pro JSP 2": Понимание пользовательских тегов JSP .
Полезное чтение.
Вывод
Используйте правильные инструменты для каждой задачи.
Используйте файлы тегов как быстрый и простой способ создания пользовательских тегов, которые помогут вам инкапсулировать повторно используемый контент .
Что касается включения контента в JSP (цитата отсюда ):
- Используйте директиву include, если файл изменяется редко . Это самый быстрый механизм. Если ваш контейнер не обнаруживает автоматически изменения, вы можете заставить изменения вступить в силу, удалив файл класса главной страницы.
- Используйте действие включения только для содержимого, которое часто меняется , и если не удается решить, какую страницу включить, пока не будет запрошена главная страница.
*
в директиве include есть опечатка (звездочка ).<jsp:include>
является стандартным действием включения ,<%@ include file="" %>
является директивой включения . Прочитайте самый последний раздел (в сером поле), в котором изложены преимущества (т.е. рекомендации, когда выбирать тот или иной). Также проверьте эту статью для подробного описания. Надеюсь это поможет.Возможный дубликат вопроса
<@include>
- Тег директивы указывает компилятору JSP объединить содержимое включенного файла в JSP перед созданием сгенерированного кода сервлета. Это эквивалентно вырезанию и вставке текста со страницы включения прямо в JSP.<jsp:include>
- С другой стороны, тег действия JSP указывает контейнеру приостановить выполнение этой страницы, запустить включенную страницу и объединить выходные данные этой страницы с выходными данными этой страницы.источник
<t:mytag><h1>Hello World</h1></t:mytag>
? Это не включение, это обычное использование тега (например,<jsp:useBean>
или<c:if>
).Основным преимуществом
<jsp:include />
перед<%@ include >
является:<jsp:include />
позволяет передавать параметрычто невозможно в
<%@include file="somefile.jsp" %>
источник
<%@include file="somefile.jsp?menu=value" %>
? Это тоже ограничено?Все три варианта шаблона -
<%@include>
,<jsp:include>
и<%@tag>
справедливы, и все три охватывают различные варианты использования.С
<@include>
помощью JSP-анализатора вставляет содержимое включенного файла в JSP перед компиляцией (аналогично C#include
). Вы бы использовали эту опцию с простым статическим контентом: например, если вы хотите включить элементы заголовка, нижнего колонтитула или навигации на каждую страницу в вашем веб-приложении. Включенный контент становится частью скомпилированной JSP, и во время выполнения нет никаких дополнительных затрат.<jsp:include>
(и JSTL<c:import>
, похожие и даже более мощные) лучше всего подходят для динамического контента. Используйте их, когда вам нужно включить контент с другого URL, локального или удаленного; когда включаемый вами ресурс сам по себе является динамическим; или когда включенный контент использует переменные или определения bean-компонентов, которые конфликтуют с включаемой страницей.<c:import>
также позволяет хранить включенный текст в переменной, которой вы можете в дальнейшем манипулировать или использовать повторно. Оба этих варианта требуют дополнительных затрат времени выполнения для отправки: это минимально, но вы должны знать, что динамическое включение не является «бесплатным».Используйте файлы тегов, когда вы хотите создать повторно используемые компоненты пользовательского интерфейса. Скажем, если у вас есть список виджетов, и вы хотите перебирать виджеты и отображать свойства каждого (в таблице или в форме), вы должны создать тег. Теги могут принимать аргументы, используя,
<%@tag attribute>
и эти аргументы могут быть обязательными или необязательными - что-то вроде параметров метода.Файлы тегов - это более простой, основанный на JSP механизм написания библиотек тегов, который (до JSP 2.0) вам приходилось писать с использованием кода Java. Писать файлы тегов JSP намного проще, когда в теге много рендеринга: вам не нужно смешивать код Java и HTML, как если бы вы писали свои теги в Java.
источник
По словам: Java Revisited
Ресурсы, включенные в директиву include, загружаются во время трансляции jsp, а ресурсы, включаемые в действие include, загружаются во время запроса.
Любые изменения во включенных ресурсах не будут видны в случае директивы include, пока файл jsp не скомпилируется снова. Хотя в случае действия включения любое изменение во включенном ресурсе будет видно в следующем запросе.
Директива include - это статический импорт, а действие include - динамический импорт.
Директива include использует атрибут файла для указания ресурсов, которые должны быть включены, в то время как действие include использует атрибут страницы для той же цели.
источник