Все мы знаем, что в jsp есть две формы включения, а именно:
<%@ включить файл=” ”%>
Первый является элементом инструкции, а второй — поведенческим элементом. Где именно они будут использоваться? Как ими пользоваться и в чем разница? Это должен быть вопрос, над которым подумают многие люди, когда увидят его. Давайте посмотрим ниже.
Обычно, когда определенные части всех страниц приложения (например, заголовки, нижние колонтитулы и панели навигации) одинаковы, мы можем рассмотреть возможность использования include. В частности, когда использовать <%@ include file=""%> и когда использовать
<%@ include file=" ”%>, элемент директивы jsp include считывает содержимое указанной страницы. И интегрируйте это содержимое с исходной страницей. (Этот процесс выполняется на этапе трансляции: то есть на этапе преобразования jsp в сервлет.
Вот пояснение этапа перевода: Мы знаем, что jsp-страницу невозможно отправить в браузер неповрежденной, и все jsp-элементы сначала должны быть обработаны сервером. Это делается путем преобразования страницы jsp в сервлет и последующего выполнения сервлета. Серверу нужен jsp-контейнер для обработки jsp-страниц. Контейнер jsp обычно реализуется в виде сервлета. Этот сервлет настроен для обработки всех запросов к страницам jsp.
Контейнер Jsp отвечает за преобразование страницы jsp в сервлет (называемый классом реализации страницы jsp? Класс реализации страницы JSP) и компиляцию этого сервлета. Эти два шага составляют этап перевода.
Из этого мы узнаем: страница jsp добавляет фактическое содержимое (то есть фрагмент кода) страницы, указанной элементом директивы include, на страницу jsp, которая его представляет. После синтеза в файл он преобразуется в файл. сервлет с помощью контейнера jsp. Вы можете видеть, что в это время будут созданы временный файл класса и файл Java. Вот пример.
Сервер использует 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"%>
<голова>
В файле 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 нельзя указать несколько типов контента.
Вот почему. Это связано с тем, что на этапе перевода код файла date.jsp был добавлен на страницу test.jsp без изменений для синтеза файла. Синтезированный файл будет таким же:
<%@ page Language="java" contentType="text/html;charset=gb2312"%>
Этот код. Решение — удалить это предложение в файле date.jsp. Обновите и затем запросите страницу test.jsp
Запрос test.jsp отображается на странице следующим образом
10 декабря 2003 13:12:40
Пожалуйста, обратите внимание на два варианта использования include в jsp.
Мы пока ничего не можем найти. Давайте проверим временные файлы в Tomcat. Перейдите туда и посмотрите, добавлено ли содержимое файла date.jsp в файл test.jsp.
<Примечание. Tomcat здесь установлен в корневом каталоге диска E>.
Оглавление
E:tomcatworkStandalonelocalhosttest.
В этом каталоге вы увидите
Есть два файла test_jsp.java и test_jsp.class.
Здесь используется Java-файл test_jsp.java, полученный путем преобразования jsp в сервлет с помощью jsp-контейнера.
Соответствующий файл test_jsp.class — это файл класса, созданный путем компиляции файла сервлета test_jsp.java. Откройте сгенерированный файл сервлета (test_jsp.java). На этом этапе мы обнаружим, что когда файл test.jsp преобразуется в файл сервлета, между выходными данными
Выше приведен результат, который мы получаем, используя форму <%@ include file="date.jsp"%>.
Далее мы используем
Замените <%@ include file="date.jsp"%> на
2003?ê 12??10?? 13:30:13
Пожалуйста, обратите внимание на два варианта использования include в jsp.
В это время вы увидите на странице, что китайские иероглифы в дате, выдаваемой представленным нами date.jsp, искажены. В чем причина? Это связано с тем, что элемент включения поведения выполняется на этапе обработки запроса (здесь мы). Необходимо объяснить этап обработки запроса. Помимо того, что он отвечает за преобразование страниц jsp в сервлеты, как упоминалось выше, контейнер Jsp также отвечает за вызов класса реализации страницы jsp для обработки каждого запроса и генерации ответа. этап обработки запроса. На этапе обработки запроса выполняется только файл класса).
Поэтому, когда мы добавляем на страницу элемент действия включения, мы фактически ссылаемся только на файл класса сервлета, созданный после преобразования и компиляции файла 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);
Он не добавляет код файла date.jsp в test.jsp.
Он просто представляет ответ, сгенерированный после выполнения страницы date.jsp во время выполнения. Это означает, что мы можем указать любой веб-ресурс, который может генерировать ответ (например, сервлет или страницу jsp), если типы, сгенерированные ими. ресурсы такие же, как у jsp. Тип контента, генерируемый страницей, тот же. JSP-контейнер выполнит указанный ресурс посредством внутреннего вызова функции. Таким образом, эти импортированные ресурсы могут помочь в обработке исходного запроса, поэтому эти ресурсы могут получить доступ ко всем объектам. в области запроса И все параметры исходного запроса.
Поскольку эти страницы еще не были добавлены на главную страницу, когда запрашивается главная страница, вы можете использовать значение атрибута времени запроса для атрибута страницы, чтобы определить, какую страницу следует представить в зависимости от ситуации во время выполнения. Вы также можете добавить некоторый запрос. параметры, которые будут считываться входящей страницей.
Если импортированная страница jsp изменена, последнюю версию страницы можно использовать немедленно. Это связано с тем, что импортированная страница обрабатывается точно так же, как страница jsp, вызываемая непосредственно браузером. То есть контейнер обнаруживает изменения страницы. . и автоматически перейдете на этап перевода, чтобы получить последнюю версию страницы.
(Обратите внимание, что элемент включения поведения такой же, как и другие элементы jsp. Если тело поведения отсутствует, оно должно заканчиваться знаком «/». Точно так же, как показано ниже.
Ниже приводится разница между двумя вариантами использования include. Есть два основных различия.
1: Время выполнения:
<%@ include file="relativeURI"%> выполняется на этапе трансляции.
2: Различия во введенном контенте:
<%@ include file="relativeURI"%>
Введите статический текст (html, jsp) и интегрируйте его со страницей JSP, прежде чем он будет преобразован в сервлет.
Кроме того, в обоих случаях атрибуты файла и страницы интерпретируются как относительный URI. Если он начинается с косой черты, то это путь, относящийся к среде. Если это так, то он будет интерпретироваться в соответствии с префиксом, присвоенным URI. он не начинается с косой черты, тогда это путь, относящийся к странице. Он будет интерпретироваться в соответствии с путем к странице, на которой представлен этот файл. Для получения дополнительной информации о том, как интерпретируются URL-адреса, обратитесь к соответствующим материалам или. книги.