Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 модуль.docx
Скачиваний:
15
Добавлен:
02.11.2018
Размер:
92.62 Кб
Скачать

13.5. Отладка сервлетов

Для отладки сервлетов можно порекомендовать следующее:

  1. Используйте System.out.println (сообщения будут отображаться в консоли сервера).

  2. Используйте метод log сервлета для добавления сообщения в журнал веб-сервера. Можно использовать вместо System.out.println, если нет доступа к консоли веб-сервера.

  3. Вынесите основную логику веб-приложения в отдельные классы и отлаживайте эти классы обычным способом (например, вызывая методы из метода main).

  4. Проверьте полученные от клиента данные: действительно ли данные получены, а названия параметров такие, какие вы и ожидаете.

  5. Проверьте исходный HTML-код, сгенерированный сервлетом — может быть, вы забыли закрыть тег или значения атрибута (из-за этого веб-страница может отображаться некорректно).

  6. Проверьте корректность HTTP-ответа сервлета без использования веб-браузера, а с помощью утилиты типа telnet или Internet Maniac. Может помочь, например, если веб-браузером неверно определяется кодировка.

  7. Перезапустите веб-сервер (Tomcat), если изменились классы сервлета или любые другие классы или библиотеки, используемые веб-модулем.

  8. В конце концов, используйте интегрированную среду разработки для отладки (например, Eclipse с модулем для поддержки J2EE).

Раздел 14. Технология JavaServer Pages

14.1. Введение в jsp

Технология Java Server Pages (JSP) появилась как развитие технологии сервлетов в целях упрощения разработки веб-страниц, совмещающих в себе статическое и динамическое содержимое.

JSP-страница может включать:

  1. Статические данные (обычно HTML-код).

  2. JSP-директивы.

  3. JSP-скриптлеты.

  4. JSP-действия.

  5. EL-выражения (Expression Language).

  6. Теги разработчика (создаются с помощью так называемых библиотек тегов, Tag Libraries).

В соответствии с данной технологией, разработка JSP-страницы ведется следующим образом: вы подготавливаете текстовый документ, например, используя язык HTML или XML, а динамически формируемый код включаете в специальные теги.

Ниже приведен простейший пример JSP-страницы, генерирующей HTML-документ, в котором выводится приветствие, используя имя из параметра name:

<HTML>

<HEAD>

<TITLE>Привет.</TITLE>

</HEAD>

<BODY>

<H1>Привет, <%= request.getParameter("name") %>!</H1>

</BODY>

</HTML>

14.2. Жизненный цикл jsp-страниц

Веб-сервер (сервлет-контейнер) транслирует JSP-страницы в сервлеты, которые, затем, компилируются в байт-код. При изменении исходной JSP-страницы перепостроение и компиляция соответствующего сервлета происходит автоматически.

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

Рекомендуемое расширение файлов с JSP-страницами: jsp.

14.3. Основной синтаксис JSP

Базовыми конструкциями языка JSP являются: директивы, скриптовые элементы (скриптлеты) и JSP-действия.

Директивы

Директивы JSP — специальные конструкции, управляющие процессом генерации сервлетов.

Директива include

Директива указывает, что до трансляции страницы в сервлет в данном месте нужно вставить содержимое указанного файла. Такая вставка аналогична простому копированию содержимого файла.

Синтаксис:

<%@ include file="filename.jspf" %>

где filename — имя файла, jspf — рекомендуемое расширение файлов-включений.

Директива page

Директива содержит информацию о структуре сервлета. Наиболее важные опции директивы page следующие:

  • import — импорт пакетов или классов (вставляет оператор import в результирующий сервлет);

  • contentType — указывает тип и кодировку генерируемого HTML-документа;

  • pageEncoding — указывает кодировку исходной JSP-страницы.

Примеры:

<%-- вставляет оператор import java.util.*; в сервлет--%>

<%@ page import="java.util.*" %>

<%-- содержимое результирующего документа кодируется в UTF-8,

в ответ вставляется заголовок, информирующий браузер о типе (документ HTML) и кодировке данных, аналог метода setContentType --%>

<%@ page contentType="text/html; charset=UTF-8" %>

<%-- указывает, что кодировка данного файла UTF-8--%>

<%@ page pageEncoding="UTF-8" %>

Директива taglib

Используется для подключения библиотеки тегов в JSP-страницу. Библиотеки тегов подробнее рассматриваются ниже, общий синтаксис директивы:

<%@ taglib prefix="myprefix" uri="uri" %>

Скриптовые элементы

Скриптовые элементы позволяют вставлять Java-код непосредственно в сервлет.

Комментарии

Комментарий, который не отсылается клиенту:

<%-- комментарий --%>

Объявления

Объявления содержат объявления полей и методов, которые будут частью объявления класса, когда JSP-страница будет переводиться в сервлет:

<%!

int counter = 0;

type method(…) {

}

%>

Скриптлеты

Скриптлеты содержат операторы, которые будут вставлены в метод-обработчик сервлета без изменений:

<%

Collection <String> list = new LinkedList<String>();

list.add("Один");

list.add("Два");

list.add("Три");

%>

Выражения

JSP-выражения — это Java-выражения, которые вычисляются и отсылаются клиенту при каждом запросе:

<%="Привет!".toUpperCase()%>

Эта конструкция аналогична скриптлету:

<% out.print("Привет!".toUpperCase()); %>

Предопределенные объекты

В скриптлетах и выражениях доступны несколько предопределенных объектов:

  • request: объект типа HttpServletRequest, ассоциированный с обрабатываемым запросом. Используется для доступа к параметрам запроса, HTTP-заголовкам, типу запроса и др.

  • response: объект типа HttpServletResponse, ассоциированный с ответом, генерируемым JSP-страницей. Может быть использован для установки кода статуса ответа и HTTP-заголовков ответа.

  • out: объект типа PrintWriter, используется для прямой отправки данных клиенту.

  • session: объект типа HttpSession, ассоциированный с запросом, для доступа к объектам, связанным с текущей клиентской сессией.

  • application: объект типа ServletContext, полученный методом сервлета getServletContext. Из этого объекта можно извлечь информацию о веб-сервере и веб-модуле и сохранить данные (используя методы setAttribute и getAttribute), которые будут доступны всем сервлетам и JSP-страницам веб-модуля.

Во всех трех объектах request, session и application есть методы для сохранения и извлечения объектов setAttribute и getAttribute, которые различаются сроком жизни объектов:

  • request: переменные хранятся в рамках одного запроса;

  • session: переменные хранятся в рамках одной клиентской сессии;

  • application: переменные хранятся до перезагрузки сервера или явного их удаления методом removeAttribute.

Пример JSP-страницы, выводящей список студентов:

<%@ page import="example.Student" %>

<%@ page import="java.util.Collection" %>

<%@ page contentType="text/html; charset=utf-8" %>

<%-- Получаем список студентов из объекта request

(список должен быть проинициализирован ранее) --%>

<% Collection<Student> students = (Collection<Student>) request.getAttribute("students"); %>

<html>

<head><title>Список студентов</title></head>

<body>

<ul>

<%-- В цикле формируем неупорядоченный список студентов--%>

<% for (Student student : students) { %>

<li><%=student.getFullName()%></li>

<% } %>

</ul>

</body>

</html>

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]