Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
web-programmirovanie_uchebnoe_posobie.pdf
Скачиваний:
95
Добавлен:
09.02.2015
Размер:
4.9 Mб
Скачать

Учебное пособие по web-программированию (2013)

В результате запуска данного примера будут получены страницы, показанные на рисунке 2.5.

Рисунок 2.5.

Дополнительную информацию можно получить по адресу: http://www.tutorialspoint.com/servlets/servlets-form-data.htm

Тема 3. Контекст сервлета

Инициализации сервлетов. Обработка запросов. Перенаправления запросов. Обработка ошибок и информирование пользователя о возникших исключительных ситуациях. Журналирование веб-приложений, ключевые отличия между журналированием и стандартным потоком вывода.

Конфигурация сервлета обрабатывается с использованием интерфейса javax.servlet.ServletConfig. Получить доступ к конфигурации сервлета можно из запроса с использованием метода

ServletConfig HttpServlet.getServletConfig()

Основные методы конфигурации сервлета:

public String getServletName()

-получение имени сервлета

public String getInitParameter(String name)

-получение параметров инициализации

public ServletContext getServletContext()

-получение контекста сервлета Подробнее можно ознакомиться по адресу:

http://docs.oracle.com/javaee/6/api/javax/servlet/ServletConfig.html

-14-

Учебное пособие по web-программированию (2013)

Контекст сервлета javax.servlet.ServletContext является одним из наиболее востребованных интерфейсов сервлета. В частности, с его помощью можно получить информацию о сервере с исползованием следующих методов:

public String getServerInfo()

-получение информации о сервере

public Object getAttribute(String name)

-получение атрибута

public void setAttribute(String name, Object value)

-сохранение атрибута

Подробнее можно ознакомиться по адресу: http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html

Для получение информации о клиенте, который обратился к сервлету, можно воспользоваться методами HttpServletRequest:

public String getHeader(String name)

-получение заголовка с заданным именем

public String getRemoteUser()

-получение имени пользователя (в случае, если аутентификация не была выполнена, то будет возвращён null)

public String getRemoteHost()

-получение ip-адреса пользователя

Подробнее можно ознакомиться по адресу: http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

Подробнее об аутентификации и получении имени пользователя остановимся в будущих темах.

Существует также возможность обращения к другим сервлетам с использованием интерфейса javax.servlet.RequestDispatcher:

Метод перенаправления запроса: forward Пример:

request.getRequestDispatcher("home.jsp").forward(request, response);

Метод включения результата: insert Пример:

request.getRequestDispatcher("home.jsp").include(request, response);

Подробнее можно ознакомиться по адресу: http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html

Подробнее на перенаправлении запросов остановимся в будущих темах.

Для хранения информации на сервере существует несколько мест хранения: запрос, сессия, приложение. Хранение информации в запросе полезно, если разработчик активно использует перенаправление запросов или включение результатов с использованием RequestDispatcher. Использование сессии — наиболее часто встречающийся способ хранения, когда сохранённая информация доступна до тех пор, пока пользователь работает с сервером, например, в ней может храниться информация об аутентификации. При этом важно, что не зависимо от того в рамках какого сервлета или страницы работает пользователь сессия остаётся той же самой. Другой пользователь видит и работает с другой сессией. При сохранении

-15-

Учебное пособие по web-программированию (2013)

информации в приложении она становится доступна всем пользователям.

Методы сохранения и получения информации из запроса были уже приведены, поэтому пример:

//Установка значения в атрибут запроса с именем «name» request.setAttribute("name","Larry");

//Получение из атрибута запроса с именем «name» значения value = request.getAttribute("name");

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

HttpSession request.getSession()

Пример сохранения и получения информации из сессии:

HttpSession session = request.getSession(false); if(session != null) {

session.setAttribute("name","Larry"); value = session.getAttribute("name");

}

Обратите внимание, что многие классы и интерфейсы имеют возможность сохранения и получения атрибутов и параметров. Главное для разработчика не запутаться, какие из параметров в каких случаях будут доступны, ну, и не забыть, куда же он положил интересующее его значение.

Изменение значений атрибутов контекста можно слушать с использованием слушателей javax.servlet.ServletContextAttributeListener (рисунок 3.1):

public void attributeAdded(ServletContextAttributeEvent event)

-контроль добавления атрибута

public void attributeRemoved(ServletContextAttributeEvent event)

-контроль удаления атрибута

public void attributeReplaced(ServletContextAttributeEvent event)

-контроль изменения значения атрибута

Рисунок 3.1

В качестве параметров ServletContextAttributeListener используется интерфейс

-16-

Учебное пособие по web-программированию (2013)

ServletContextAttributeEvent:

public String getName()

public Object getValue(String name)

Слушатели должны быть зарегистрированы в дескрипторе развёртывания web.xml (рисунок 3.2). При создании слушателей с использованием мастеров NetBeans регистрация может быть выполнена автоматически.

Рисунок 3.2.

Отладка разрабатываемых приложений и анализ процесса работы приложений, предоставленных заказчику, осуществляется с использованием журналов или как их часто называют «лог-файлов» (от английского слова «log»).

Вывод информации может осуществляться с использованием стандартного потока вывода System.out, однако при этом, если сервер работает долго, то файл вывода становится очень большим и вывод информации в него становится всё медленнее и медленнее. Кроме того, через некоторое время может закончиться место на жёстком диске. Конечно, при современных размерах HDD об этом можно было бы не беспокоиться, но все пользователи ПК знают, что бездумное расходнование свободного места, действительно, может привести к очень неприятным последствиям.

Альтернативой System.out с предоставлением дополнительных инструментов по выводу информации являются системы журналирования. В частности, в Apache Tomcat встроена система log4j. Для вывода информации в журнал могут использоваться методы сервлета:

public void log(String message)

public void log(String message, Throwable th)

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

ServletContextAttributeEvent.getServletContext().log("Message");

В случае Apache Tomcat файл вывода по умолчанию называется catalina.out, а файлы журналирования localhost.дата.log (рисунок 3.3). В примере атрибут имеет имя «test_attribute» и значение «it's value».

-17-

Учебное пособие по web-программированию (2013)

Рисунок 3.3.

Однако, о некоторых ошибках мало сделать запись в журнал, о них ещё необходимо сообщить пользователю. Для этого можно воспользоваться методом sendError в интерфейсе HttpServletResponse.

Параметры, которые понимает sendError:

При необходимости можно заменить стандартное сообщение:

public void sendError(int number)

public void sendError(int number, String message)

Вначале темы были приведены методы конфигурации сервлета ServletConfig,

вкотором есть метод чтения параметров инициализации. Параметры инициализации записываются в дескрипторе развёртывания web.xml и относятся к одному конкретному сервлету (рисунок 3.4).

-18-

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