Все мы знаем, что в jsp есть две формы включения, а именно:
<%@ включить файл=” ”%>
<jsp:include page=” ”lush=”true”/></P>
Первый является элементом инструкции, а второй — поведенческим элементом. Где именно они будут использоваться? Как ими пользоваться и в чем разница? Это должен быть вопрос, над которым подумают многие люди, когда увидят его. Давайте посмотрим ниже. </P>
Обычно, когда определенные части всех страниц приложения (например, заголовки, нижние колонтитулы и панели навигации) одинаковы, мы можем рассмотреть возможность использования include. В частности, когда использовать <%@ include file=""%> и когда использовать <jsp:include page=""lush="true"/> Эту форму. Первое, что нужно понять, это разница между ними. Только поняв различия в их использовании, вы сможете понять, когда их использовать и как выбирать.
<%@ include file=" ”%>, элемент директивы jsp include считывает содержимое указанной страницы. И интегрируйте это содержимое с исходной страницей. (Этот процесс выполняется на этапе трансляции: то есть на этапе преобразования jsp в сервлет.</P>
Вот пояснение этапа перевода: Мы знаем, что jsp-страницу невозможно отправить в браузер неповрежденной, и все jsp-элементы сначала должны быть обработаны сервером. Это делается путем преобразования страницы jsp в сервлет и последующего выполнения сервлета. Серверу нужен jsp-контейнер для обработки jsp-страниц. Контейнер jsp обычно реализуется в виде сервлета. Этот сервлет настроен для обработки всех запросов к страницам jsp. </P>
Контейнер Jsp отвечает за преобразование страницы jsp в сервлет (называемый классом реализации страницы jsp? Класс реализации страницы JSP) и компиляцию этого сервлета. Эти два шага составляют этап перевода.</P>
Из этого мы узнаем: страница jsp добавляет фактическое содержимое (то есть фрагмент кода) страницы, указанной элементом директивы include, на страницу jsp, которая его представляет. После синтеза в файл он преобразуется в файл. сервлет с помощью контейнера jsp. Вы можете видеть, что в это время будут созданы временный файл класса и файл Java. Вот пример. </P>
Сервер использует Tomcat, а файл JSP, представленный на странице, называется test.jsp. Импортированная страница называется date.jsp. В этом файле jsp хранится код jsp, связанный со временем, а текущий корень контекста настроен на тестирование.
//======Исходный файл date.jsp======//
<%@ page Language="java" contentType="text/html;charset=gb2312"%>
<%
java.util.Date date = новый java.util.Date();
Строка date_cn = "";
Строка dateStr = "";
переключатель (date.getDay())
{
случай 0:date_cn = «День перерыва»;
случай 1:date_cn = «一»;
случай 2:date_cn = «二»;
случай 3:date_cn = «三»;
случай 4:date_cn = "四";
случай 5:date_cn = "五";
случай 6:date_cn = "六";
}
dateStr = (1900+date.getYear()) + «Год» + (date.getMonth()+1) + «Месяц» + date.getDate() + «День (день недели) + date_cn + «)»;
%>
document.write("<%=dateStr%>");
//======Ниже приведен исходный файл test.jsp=============//
<%@ page Language="java" contentType="text/html;charset=gb2312"%>
<html>
<голова>
<title>Два варианта использования включения</title>
<jsp:include page="date.jsp"lush="true"/>
<%--@ include file="date.jsp" %-->
//Здесь мы используем две разные формы включения, чтобы представить файл date.jsp.
<голова>
<тело>
<таблица><tr><td>
Пожалуйста, обратите внимание на два варианта использования include в jsp.
</td></tr></table>
</тело>
</html></P>
В файле test.jsp мы выводим только строку текста «О двух вариантах использования include в jsp. Обратите внимание». Теперь давайте сначала воспользуемся формой <%@ include file="date.jsp" %>. файл date.jsp. Как вы думаете, что-то может пойти не так? В это время появляется сообщение об ошибке:
Статус HTTP 500?
org.apache.jasper.JasperException: /date.jsp(0,0) Директива страницы: не может быть нескольких вхождений contentType
Ниже есть куча ошибок, но нам нужно только взглянуть на это, чтобы понять, в чем проблема. Код состояния: http 500 Внутренняя ошибка сервера. Взгляните еще раз на советы ниже. На странице date.jsp нельзя указать несколько типов контента.</P>
Вот почему. Это связано с тем, что на этапе перевода код файла date.jsp был добавлен на страницу test.jsp без изменений для синтеза файла. Синтезированный файл будет таким же:
<%@ page Language="java" contentType="text/html;charset=gb2312"%>
Этот код. Решение — удалить это предложение в файле date.jsp. Обновите и затем запросите страницу test.jsp</P>
Запрос test.jsp отображается на странице следующим образом
10 декабря 2003 13:12:40
Пожалуйста, обратите внимание на два варианта использования include в jsp. </P>
Мы пока ничего не можем найти. Давайте проверим временные файлы в Tomcat. Перейдите туда и посмотрите, добавлено ли содержимое файла date.jsp в файл test.jsp.
<Примечание. Tomcat здесь установлен в корневом каталоге диска E>.
Оглавление
E:tomcatworkStandalonelocalhosttest.
В этом каталоге вы увидите
Есть два файла test_jsp.java и test_jsp.class. </P>
Здесь используется Java-файл test_jsp.java, полученный путем преобразования jsp в сервлет с помощью jsp-контейнера. </P>
Соответствующий файл test_jsp.class — это файл класса, созданный путем компиляции файла сервлета test_jsp.java. Откройте сгенерированный файл сервлета (test_jsp.java). На этом этапе мы обнаружим, что когда файл test.jsp преобразуется в файл сервлета, между выходными данными <haed> добавляется некоторый код, которого нет на странице test.jsp. Вновь добавленное содержимое — это код в дате. jsp: Пожалуйста, проверьте и посмотрите, какой новый контент был добавлен или действительно ли он был добавлен. Это будет ясно с первого взгляда. Я не буду вдаваться в подробности.</P>
Выше приведен результат, который мы получаем, используя форму <%@ include file="date.jsp"%>.
Далее мы используем <jsp:include page="dae.jsp"lush="true"/>, то есть
Замените <%@ include file="date.jsp"%> на <jsp:include page="dae.jsp"lush="true"/>, а затем запросите test.jsp.
2003?ê 12??10?? 13:30:13
Пожалуйста, обратите внимание на два варианта использования include в jsp. </P>
В это время вы увидите на странице, что китайские иероглифы в дате, выдаваемой представленным нами date.jsp, искажены. В чем причина? Это связано с тем, что элемент включения поведения выполняется на этапе обработки запроса (здесь мы). Необходимо объяснить этап обработки запроса. Помимо того, что он отвечает за преобразование страниц jsp в сервлеты, как упоминалось выше, контейнер Jsp также отвечает за вызов класса реализации страницы jsp для обработки каждого запроса и генерации ответа. этап обработки запроса. На этапе обработки запроса выполняется только файл класса). </P>
Поэтому, когда мы добавляем на страницу элемент действия включения, мы фактически ссылаемся только на файл класса сервлета, созданный после преобразования и компиляции файла date.jsp. В этом случае date.jsp тестируется как отдельный файл после выполнения. вызывается при запуске файла .jsp. Поскольку кодировка символов не указана в файле date.jsp, появляются искаженные символы. Решение состоит в том, чтобы повторно заменить символы, которые были только что удалены в файле date.jsp.
<%@ page Language="java" contentType="text/html;charset=gb2312"%>
После добавления этой строки оператора обновите и запустите повторно. На этот раз страница отображается правильно и такая же, как при обычном запуске с директивой include. Если вы посмотрите временные файлы под tomcat, вы обнаружите, что они там есть. это файл date_jsp.java и файлы date_jsp.class. Эти два файла получаются так же, как файлы test_jsp.java и test_jsp.class. Если вы посмотрите на код файла test_jsp.java на данный момент, вы обнаружите, что в это время добавляется только новая строка кода:
JspRuntimeLibrary.include(запрос, ответ, "date.jsp", out, true);</P>
Он не добавляет код файла date.jsp в test.jsp.</P>
Он просто представляет ответ, сгенерированный после выполнения страницы date.jsp во время выполнения. Это означает, что мы можем указать любой веб-ресурс, который может генерировать ответ (например, сервлет или страницу jsp), если типы, сгенерированные ими. ресурсы такие же, как у jsp. Тип контента, генерируемый страницей, тот же. JSP-контейнер выполнит указанный ресурс посредством внутреннего вызова функции. Таким образом, эти импортированные ресурсы могут помочь в обработке исходного запроса, поэтому эти ресурсы могут получить доступ ко всем объектам. в области запроса И все параметры исходного запроса.</P>
Поскольку эти страницы еще не были добавлены на главную страницу, когда запрашивается главная страница, вы можете использовать значение атрибута времени запроса для атрибута страницы, чтобы определить, какую страницу следует представить в зависимости от ситуации во время выполнения. Вы также можете добавить некоторый запрос. параметры, которые будут считываться входящей страницей.
<jsp:include page="<%=pageSelectedAtRuntime%>"lush="true" >
<jsp:param name="fitstParamer" value="firstvalue">
<jsp:param name="lastParamer" value="lastvalue">
</jsp:include></P>
Если импортированная страница jsp изменена, последнюю версию страницы можно использовать немедленно. Это связано с тем, что импортированная страница обрабатывается точно так же, как страница jsp, вызываемая непосредственно браузером. То есть контейнер обнаруживает изменения страницы. . и автоматически перейдете на этап перевода, чтобы получить последнюю версию страницы.</P>
(Обратите внимание, что элемент включения поведения такой же, как и другие элементы jsp. Если тело поведения отсутствует, оно должно заканчиваться знаком «/». Точно так же, как показано ниже.
<jsp:include page="<%=pageSelectedAtRuntime%>"lush="true" />)</P>
Ниже приводится разница между двумя вариантами использования include. Есть два основных различия.
1: Время выполнения:
<%@ include file="relativeURI"%> выполняется на этапе трансляции.
<jsp:include page="relativeURI"lush="true" /> выполняется на этапе обработки запроса.
2: Различия во введенном контенте:
<%@ include file="relativeURI"%>
Введите статический текст (html, jsp) и интегрируйте его со страницей JSP, прежде чем он будет преобразован в сервлет.
<jsp:include page="relativeURI"lush="true" />Вводит текст ответа, сгенерированный страницей выполнения или сервлетом.
Кроме того, в обоих случаях атрибуты файла и страницы интерпретируются как относительный URI. Если он начинается с косой черты, то это путь, относящийся к среде. Если это так, то он будет интерпретироваться в соответствии с префиксом, присвоенным URI. он не начинается с косой черты, тогда это путь, относящийся к странице. Он будет интерпретироваться в соответствии с путем к странице, на которой представлен этот файл. Для получения дополнительной информации о том, как интерпретируются URL-адреса, обратитесь к соответствующим материалам или. книги.