когда использовать jsp include и директиву страницы include [duplicate]

Использование модульного разбиения:

public IEnumerable<IEnumerable<string>> Split(IEnumerable<string> input, int chunkSize)
{
    var chunks = (int)Math.Ceiling((double)input.Count() / (double)chunkSize);
    return Enumerable.Range(0, chunks).Select(id => input.Where(s => s.GetHashCode() % chunks == id));
}
142
задан informatik01 7 March 2013 в 04:22
поделиться

5 ответов

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

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

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

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

Static: добавляет содержимое из значения атрибута файла в текущая страница во время перевода.

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

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

Динамическое: добавляет контент из значения page на текущую страницу во время запроса. Предназначен больше для динамического контента, поступающего от JSP.

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

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

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

4) Прелюдии и трески:

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


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

ЦЕЛЬ ВКЛЮЧЕНИЙ и файлов тегов отличается.

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

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


Что касается вашего Edit

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

  • настраиваться с помощью атрибутов, переданных с вызывающей страницы.
  • Передать переменные обратно на вызывающую страницу.
  • Доступ ко всем объектам доступный для страниц JSP.
  • Общайтесь друг с другом. Вы можете создать и инициализировать компонент JavaBeans, создать общедоступную EL-переменную, которая ссылается на этот компонент в одном теге, а затем использовать компонент в другом теге.
  • быть вложенными друг в друга и обмениваться с помощью частных переменные.

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


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


Заключение

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

Используйте файлы тегов как быстрый и простой способ создания пользовательских тегов .

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

  • Используйте директиву include, если файл изменяется редко. Это самый быстрый механизм. Если ваш контейнер не обнаруживает изменения автоматически, вы можете заставить изменения вступить в силу, удалив файл класса главной страницы.
  • Используйте действие include только для часто изменяющегося контента и если какая страница должна включать не может быть определено до тех пор, пока не будет запрошена основная страница.
268
ответ дан informatik01 21 August 2018 в 08:07
поделиться
  • 1
    Но не является & lt; jsp: include & gt; так же, как использование файлов тегов? Я не вижу никакой разницы ... Вы можете передавать переменные в файлы, включенные в & lt; jsp: include & gt; так же, как вы можете передавать переменные в файлы тегов. Оба метода позволяют повторно использовать контент, они, похоже, делают то же самое. Есть ли разница между ними, кроме их имен? – sonicboom 8 February 2013 в 02:40
  • 2
    @sonicboom Обновлен мой ответ – informatik01 8 February 2013 в 02:53
  • 3
    @ informatik01 очень хороший ответ, я ценю глубину, красивое форматирование и очень удобный список 4 механизмов. – Russell Silva 14 November 2013 в 20:47
  • 4
    что именно является преимуществом & lt; jsp: include & gt; over & lt; * @ include url .. & gt; ? – Krsna Chaitanya 15 January 2014 в 09:53
  • 5
    @KrsnaChaitanya Примечание: у вас есть опечатка (звездочка *) в директиве include. <jsp:include> является стандартным включением action , <%@ include file="" %> является директивой include . Прочтите последний раздел (в сером поле), в котором указаны преимущества (т. Е. Рекомендации, когда выбирать тот или иной). Также ознакомьтесь с этой статьей для подробного описания. Надеюсь это поможет. – informatik01 15 January 2014 в 17:28

Java Revisited

  1. Ресурс, включенный директивой include, загружается во время jsp-перевода, тогда как ресурс, включенный включением действия, загружается во время запроса.
  2. Любое изменение включенного ресурса не будет отображаться в случае включения директивы include, пока jsp-файл не будет компилироваться снова. Хотя в случае включения действия любое изменение включенного ресурса будет видимым в следующем запросе.
  3. Включить директиву является статическим импортом, в то время как действие включает динамический импорт
  4. В директиве Include используется атрибут файла для указания ресурса, который будет включен, включая атрибут страницы использования действия для той же цели.
1
ответ дан Abhijeet Ashok Muneshwar 21 August 2018 в 08:07
поделиться

Возможный повторяющийся вопрос

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

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

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

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

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

21
ответ дан Community 21 August 2018 в 08:07
поделиться
  • 1
    Как насчет tagfiles? – sonicboom 29 January 2013 в 18:49
  • 2
    Вы имеете в виду, как вы показали в своем вопросе: <t:mytag><h1>Hello World</h1></t:mytag>? Это не включено, это обычное использование тега (например, <jsp:useBean> или <c:if>). – Uooo 7 February 2013 в 15:53
  • 3
    Так в чем же разница между использованием файлов тегов и включает в себя, поскольку, кажется, файлы тегов могут использоваться для включения контента на страницу? – sonicboom 8 February 2013 в 01:26

Основное преимущество <jsp:include /> по сравнению с <%@ include >:

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

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

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

7
ответ дан Enrique San Martín 21 August 2018 в 08:07
поделиться
  • 1
    Как насчет tagfiles, я знаю, как работают inlcudes. Мне интересно, как относятся теги-файлы, поскольку, похоже, они обеспечивают ту же функциональность. В чем заключается различие между использованием файлов tagfiles и использованием? – sonicboom 8 February 2013 в 01:24

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

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

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

Использовать файлы тегов, когда вы хотите создать многоразовые компоненты пользовательского интерфейса.

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

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

5
ответ дан Hari 21 August 2018 в 08:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: