В чем разница между включением файлов с директивой JSP include, действием JSP include и использованием файлов тегов JSP?



кажется, что есть два метода для шаблонов с JSP. В том числе файлы с одним из этих утверждений



<%@ include file="foo.html" %>
<jsp:include page="foo.html" />


или с помощью файлов тегов JSP



// Save this as mytag.tag
<%@ tag description="Description" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<jsp:doBody/>
</body>
</html>


и на другой странице JSP назовите его с



<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:mytag>
<h1>Hello World</h1>
</t:mytag>


Итак, какой метод я должен использовать? Считается ли он теперь устаревшим или они оба действительны и охватывают разные варианты использования?



Edit



не использует этот файл тегов так же, как с помощью включить?



// Save this as product.tag
<%@ tag description="Product templage" pageEncoding="UTF-8"%>
<%@ tag import="com.myapp.Product" %>
<%@ attribute name="product" required="true" type="com.myapp.Product"%>

Product name: ${product.name} <br/>
Quantity: ${product.quantity} <br/>


и вызовите его на другой JSP с



<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:product>
<c:forEach items="${cart.products}" var="product">
<t:product product="${product}"/>
</c:forEach>
</t:product>


мне кажется, что это то же самое, что использовать include и передавать ему параметры. Итак, файлы тегов такие же, как и includes?

1603   5  

5 ответов:

существует несколько механизмов повторного использования содержимого в файле JSP.

следующее 4 механизма включения контента в JSP можно классифицировать как прямое повторное использование:
(для первых 3 механизмов цитирование из "Head First Servlets and JSP")

1) директива include:

<%@ include file="header.html" %>

статический: добавляет содержимое из значения атрибута file в текущая страница во время преобразования. Директива была первоначально предназначался для статических шаблонов макетов, таких как заголовки HTML.

2) The <jsp:include> стандартное действие:

<jsp:include page="header.jsp" />

динамический: добавляет содержимое из значения атрибута страницы на текущую страницу при запросе. Предназначался больше для динамических содержание страниц JSP.

3) The <c:import> Тег JSTL:

<c:import url=”http://www.example.com/foo/bar.html” />

динамический: добавляет содержимое из значения атрибута URL на текущую страницу,при запросе. Это работает очень похоже <jsp:include>, но он более мощный и гибкий: в отличие от другие два включает в себя,<c:import>url может быть из-за веб-контейнер!

4) прелюдии и codas:

статический: прелюдии и коды может применяться только к началу и концу страниц.
Вы можете неявно включить прелюдии (также называемые заголовками) и codas (также называемые нижние колонтитулы) для группы страниц JSP путем добавления <include-prelude> и <include-coda> элементы соответственно в пределах а <jsp-property-group> элемент в веб-приложении web.xml дескриптора развертывания. Подробнее читайте здесь:
* настройка неявных включает в себя в начале и конце JSP
* определение неявных включает в себя


Tag File это косвенный метод повторного использования контента, путем инкапсуляция многоразового контента. А Tag File - это исходный файл, содержащий фрагмент кода JSP, который можно повторно использовать как пользовательский тег.

цель включает в себя и файлы тегов отличается.

Tag file (концепция введенный с JSP 2.0) является одним из вариантов для создания пользовательских тегов. Это быстрый и простой способ построить пользовательские теги. пользовательские теги, также известные как расширения тегов, являются элементами JSP, которые позволяют вставлять в страницы JSP пользовательскую логику и вывод, предоставляемые другими компонентами Java. Логика, предоставляемая через пользовательский тег, реализуется объектом Java, известным как обработчик тега.

некоторые примеры задач, которые могут выполняться пользовательскими тегами, включают работу с неявными объектами, обработку форм, доступ к базам данных и другим корпоративным службам, таким как электронная почта и каталоги, а также реализацию управления потоком.


относительно вашего редактирования

может быть, в вашем примере (в вашем Edit), нет никакой разницы между использованием direct include и файлом тегов. Но пользовательские теги имеют богатый набор функций. Они может

  • настраивается с помощью атрибутов, передаваемых с вызывающей страницы.

  • передача переменных обратно на вызывающую страницу.

  • доступ ко всем объектам, доступным для страниц JSP.

  • общаются друг с другом. Можно создать и инициализировать компонент JavaBeans, создать общедоступную переменную EL, которая ссылается на этот компонент в одном теге, а затем использовать этот компонент в другом метка.

  • быть вложенными друг в друга и общаться с помощью частных переменных.

также прочитайте это из "Pro JSP 2":понимание пользовательских тегов JSP.


полезное чтение.


вывод

Используйте правильные инструменты для конкретной задачи.

использовать Файлы Тега как быстрый и простой способ создания пользовательские теги.

Что касается в том числе содержание в JSP (цитата из здесь):

  • используйте директиву include если файл меняется редко. Это самый быстрый механизм. Если ваш контейнер не обнаруживает автоматически изменения, вы можете заставить изменения вступить в силу, удалив основной файл класса страницы.

  • включить действий только для контента, который часто меняется, и если какая страница включить нельзя решить, пока не появится главная страница запрошенный.

Возможен Дубликат Вопроса

<@include> - тег директивы указывает компилятору JSP объединить содержимое включенного файла в JSP перед созданием сгенерированного кода сервлета. Это эквивалентно вырезанию и вставке текста с вашей страницы включения прямо в ваш JSP.

  • во время выполнения выполняется только один сервлет.
  • переменные Скриптлета, объявленные на родительской странице, могут быть доступны на включенной странице (помните, что это одна и та же страница).
  • включенная страница не должна быть скомпилирована как автономный JSP. Это может быть фрагмент кода или обычного текста. Включенная страница никогда не будет скомпилирована как автономная. Однако включенная страница также может иметь любое расширение .jspf, который стал традиционно используется расширение.
  • одним из недостатков старых контейнеров является то, что изменения на страницах включения могут не вступать в силу до обновления родительской страницы. Последние версии Tomcat проверит включенные страницы на наличие обновлений и принудительно перекомпилирует Родительский файл, если они обновлены.
  • еще один недостаток заключается в том, что поскольку код встроен непосредственно в метод службе сервлетом, этот метод может стать очень большим. Если он превышает 64 КБ, компиляция JSP, скорее всего, не удастся.

<jsp:include> - тег действия JSP с другой стороны указывает контейнеру приостановить выполнение этой страницы, перейти к запуску включенной страницы и объединить вывод с этой страницы в вывод с этой страницы.

  • каждая включенная страница выполняется как отдельный сервлет во время выполнения.
  • страницы могут быть условно включены во время выполнения. Это часто полезно для шаблонов фреймворков, которые строят страницы из includes. Родительская страница может определить, какую страницу, если таковая имеется, включить в соответствии с некоторым условием времени выполнения.
  • значения переменных скриптлета должны быть явно переданы в include страница.
  • включенным страница должна быть выполнена самостоятельно.
  • вы с меньшей вероятностью столкнетесь с ошибками компиляции из-за превышения максимального размера метода в созданном классе сервлетов.

в зависимости от ваших потребностей, вы можете либо использовать <@include> или <jsp:include>

главные преимущества <jsp:include /> over <%@ include > - это:

<jsp:include /> позволяет передавать параметры

<jsp:include page="inclusion.jsp">
    <jsp:param name="menu" value="objectValue"/>
</jsp:include>

что невозможно в <%@include file="somefile.jsp" %>

все три варианта шаблона - <%@include>,<jsp:include> и <%@tag> действительны, и все три крышки разных случаев.

С <@include>, синтаксический анализатор JSP строит содержимое включенного файла в JSP перед компиляцией (аналогично C #include). Вы можете использовать эту опцию с простым статическим контентом: например, если вы хотите включить верхний и Нижний колонтитулы или элементы навигации на каждую страницу вашего веб-приложения. Включенный контент становится частью скомпилированного JSP, и есть без дополнительных затрат во время выполнения.

<jsp:include> (и JSTL <c:import>, который похож и даже более мощные) лучше всего подходят для динамического контента. Используйте их, когда вам нужно включить содержимое из другого URL-адреса, локального или удаленного; когда ресурс, который вы включаете, сам является динамическим; или когда включенное содержимое использует переменные или определения компонентов, которые конфликтуют со страницей включения. <c:import> также позволяет хранить включенный текст в переменной, которую вы можете дополнительно манипулировать или повторно использовать. Оба они несут дополнительную стоимость выполнения для отправки: это минимально, но вы должны знать, что динамическое включение не является "бесплатным".

используйте файлы тегов, если вы хотите создать повторно используемые компоненты пользовательского интерфейса. Если у вас есть список виджетов, скажем, и вы хотите перебирать виджеты и отображать свойства каждого (в таблице или в форме), вы создадите тег. Теги могут принимать аргументы, используя <%@tag attribute> и эти аргументы могут быть обязательными или опциональными - несколько как и параметры метода.

файлы тегов-это более простой, основанный на JSP механизм записи библиотек тегов, которые (до JSP 2.0) вы должны были писать с использованием кода Java. Гораздо чище писать файлы тегов JSP, когда в теге много рендеринга: вам не нужно смешивать Java и HTML-код, как вам пришлось бы делать, если бы вы написали свои теги на Java.

Java Revisited

  1. ресурс, включенные директивой Include загружается во время ОСП перевод, в то время как ресурсов включают действия загружается во время запроса.
  2. любые изменения на включенном ресурсе не будут видны в случае директивы include до тех пор, пока файл jsp не скомпилируется снова. В то время как в случае действия include любое изменение включенного ресурса будет видно в следующем запросе.
  3. директива Include является статическим импортом, в то время как включить действие динамического импорта
  4. директива Include использует атрибут file для указания ресурса, который должен быть включен, в то время как include action использует атрибут страницы для той же цели.

Comments

    Ничего не найдено.