Оба тега включают содержимое с одной страницы в другую.
Итак, какова точная разница между этими двумя тегами?
Оба тега включают содержимое с одной страницы в другую.
Итак, какова точная разница между этими двумя тегами?
В одном многократном фрагменте кода я использую директиву <%@include file="reuse.html"%>
, а во втором я использую тег <jsp:include page="reuse.html" />
.
Пусть код в файле многократного использования:
<html>
<head>
<title>reusable</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<img src="candle.gif" height="100" width="50"/> <br />
<p><b>As the candle burns,so do I</b></p>
</body>
После запуска обоих файлов JSP вы увидите один и тот же вывод и подумайте, есть ли разница между директивой и тегом. Но если вы посмотрите на сгенерированный servlet
двух файлов JSP, вы увидите разницу. Вот что вы увидите, когда используете directive
:
out.write("<html>\r\n");
out.write(" <head>\r\n");
out.write(" <title>reusable</title>\r\n");
out.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
out.write(" </head>\r\n");
out.write(" <body>\r\n");
out.write(" <img src=\"candle.gif\" height=\"100\" width=\"50\"/> <br />\r\n");
out.write(" <p><b>As the candle burns,so do I</b></p>\r\n");
out.write(" </body>\r\n");
out.write("</html>\r\n");
и это то, что вы увидите для используемого тега во втором файле JSP:
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "reusable.html", out, false);
Итак, теперь вы знаете, что директива include вставляет источник reuse.html
во время перевода, но тег действия вставляет ответ reuse.html во время выполнения.
Если вы думаете об этом, то с каждым тегом действия (jsp:include file
) появляется дополнительное повышение производительности. Это означает, что вы можете гарантировать, что у вас всегда будет самый последний контент, но он увеличивает стоимость исполнения.
Там огромная разница. Как уже упоминалось, <%@ include
является статическим включением, <jsp:include
является динамическим включением. Подумайте об этом как о различии между макросом и вызовом функции (если вы знакомы с этими терминами). Другой способ поставить его, статический include - это точно то же самое, что и копирование точного содержимого включенного файла ( "код" ) в расположение оператора <%@ include
(что именно то, что сделает JSP-компилятор.
Динамический include сделает запрос (используя диспетчер запросов), который выполнит указанную страницу, а затем включит вывод с страницы на выходе вызывающей страницы вместо оператора <jsp:include
.
Большая разница здесь в том, что при включенной динамике включенная страница будет исполнять в ней собственный pageContext. И поскольку это запрос, вы можете отправлять параметры на страницу так же, как вы можете отправлять параметры вместе с любым другим запросом. С другой стороны, статичность - это всего лишь фрагмент кода, который будет выполняться внутри контекста вызывающей страницы. Если вы статически включаете один и тот же файл более одного раза, код в этом файле будет существовать в нескольких местах на вызывающей странице, чтобы что-то вроде
<%
int i = 0;
%>
генерирует ошибку компилятора (поскольку одна и та же переменная не может быть объявлена более одного раза).
Директива
<%@include file="abc.jsp"%>
действует как C"#include"
, вытягивая текст включенного файла и компилируя его, как если бы он были частью файла include. Входящий файл может быть любого типа (включая HTML или текст).< jsp: include page = "abc.jsp" > тег компилирует файл как отдельный JSP и вставляет вызов к нему в скомпилированном JSP.
Некоторые JSP-двигатели поддерживают нестандартные теги
<!--#include file="data.inc"-->
(NCSA- или .shtml-стиль) и<%@ vinclude="data.inc" %>
(стиль JRun), но они не определены в JSP и, следовательно, нельзя полагаться.См. также этот вопрос в FAQ JSP.
1) Когда использовать включить директиву?
Чтобы предотвратить дублирование одной и той же логики вывода в нескольких jsp веб-приложения, включите механизм, т.е., чтобы способствовать повторному использованию логики представления, включая директиву
<%@ include file="abc.jsp" %>
когда вышеуказанная инструкция получена jsp-движком, она извлекает исходный код abc.jsp и копирует тот же inline в текущем jsp. После копирования перевода выполняется для текущей страницы
Просто говоря, что это статическая инструкция для jsp-движка, т.е. весь исходный код "abc.jsp" копируется на текущую страницу
2) Когда использовать включить действие?
include тег не включает исходный код включенной страницы в текущую страницу, а вывод, сгенерированный во время выполнения с включенной страницы, включается в текущий ответ страницы
включить функцию тега, аналогичную функции включения механизма диспетчера запросов программирования сервлетов
include tag - это команда времени выполнения для jsp-механизма, то есть, скопировав весь код на текущую страницу, вызов метода выполняется "abc.jsp" с текущей страницы
Один из них - статический импорт (<% = @include... > "), другой - динамический (jsp: include). Это повлияет, например, на путь, который вам нужно будет указать для вашего включенного файла Небольшое исследование в Google расскажет вам больше.