Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Java.EE.01.Servlets

Содержание

2011 © EPAM Systems, RD Dep.СодержаниеОсновы протокола HTTPПлатформа J2EEСтруктура web-приложенияСервлет. Request. ResponseMVCJSP (start)Жизненный цикл сервлета и JSPВзаимодействие сервлета и JSPСессииCookiesСовместное использование ресурсовСобытияФильтры
SERVLETSIhar BlinouOracle Certified Java Instructorihar_blinou@epam.comJava.EE.012011 © EPAM Systems, RD Dep. 2011 © EPAM Systems, RD Dep.СодержаниеОсновы протокола HTTPПлатформа J2EEСтруктура web-приложенияСервлет. Request. ResponseMVCJSP ОСНОВЫ ПРОТОКОЛА HTTP2011 © EPAM Systems, RD Dep. Основы протокола HTTPHTTP - Hyper Text Transfer ProtocolОпределяет передачу данных во время Основы протокола HTTPСтруктура HTTP-запросаHTTP-запрос состоит из заголовка запроса и тела запроса, разделенных Основы протокола HTTPЗапрос в главной строке состоит из трех частей, разделенных пробелами: Основы протокола HTTPРесурс –это путь к определенному файлу на сервере, который клиент Основы протокола HTTPВерсия протокола – версия протокола HTTP, с которой работает клиентская Основы протокола HTTPСтроки после главной строки запроса имеют следующий формат: параметр:значениe Таким Основы протокола HTTPНекоторые наиболее употребительные параметры HTTP-запроса: Connection (соединение) – может принимать Основы протокола HTTPUser-Agent - значением является Основы протокола HTTPReferer - URL, с которого перешли на этот ресурс. Host Основы протокола HTTP2011 © EPAM Systems, RD Dep. ПЛАТФОРМА J2EE2011 © EPAM Systems, RD Dep. Платформа J2EEJava 2 Platform, Enterprise Edition (J2EE) определяет стандарт для разработки многоуровневых Платформа J2EE J2EE - это не конкретный продукт, а набор спецификаций, устанавливающих Платформа J2EEТехнологии J2EE ориентированы на разработку серверной стороны приложения и облегчают, в Платформа J2EEСтандартный Java EE сервер приложений должен поддерживать такие технологии как EJB Платформа J2EEJava EE также предоставляет стандартную архитектуру для взаимодействия Java EE приложений Платформа J2EE2011 © EPAM Systems, RD Dep.Сервис:  Java Naming Directory (JNDI) Платформа J2EEПлатформа J2EE использует модель многоуровневого распределенного приложения. Логически приложение разделено на Платформа J2EEПриложение Java EE может состоять из нескольких компонентов, таких как, например, Платформа J2EEJAR файл может содержать Java классы, XML файлы, вспомогательные ресурсы, статические Платформа J2EEWAR файл - это специализированный JAR файл, содержащий такие компоненты веб-приложения Платформа J2EEEAR файл – это специализированный JAR файл, содержащий компоненты Java EE СТРУКТУРА WEB-ПРИЛОЖЕНИЯ2011 © EPAM Systems, RD Dep. Структура web-приложенияКомпоненты типичного Java EE приложения2011 © EPAM Systems, RD Dep. Структура web-приложенияТрадиционно, корпоративное Java EE приложение определяется как набор следующих компонентов и Структура web-приложенияВ свою очередь, веб-приложение Java объединяет подмножество компонентов и технологий корпоративного Структура web-приложенияВ типичном Java EE веб-приложении HTML клиент отправляет запрос серверу, где Структура web-приложенияКак только сервлет получает начальный запрос, инициируется выполнение определенной бизнес логики Структура web-приложенияНекоторым бизнес сервисам или компонентам требуется доступ к хранилищам данных или Структура web-приложенияКогда обработка запроса на сервере завершена, HTML клиенту возвращается ответ в Структура web-приложенияСтруктура J2EE Web-приложения2011 © EPAM Systems, RD Dep. Структура web-приложенияWeb-приложение должно включать:Основную (базовую)директорию [имя директории является именем приложения]WEB-INF директориюweb.xml файл Структура web-приложенияБазовая структура веб-приложения должна включать корневую директорию, WEB-INF директорию и дескриптор Структура web-приложенияWeb.xml конфигурационный файл используется для:Объявление классов servlet и JSPsОтображения servlets и Структура web-приложенияЛюбой класс, который загружен и выполнен в веб-контейнерах, должен быть расположен Структура web-приложенияДругие файлы как JSPs и статическое содержание могут быть расположены где Структура web-приложенияJars и другие java классы, используемые в приложении, могут быть помещены СЕРВЛЕТ. REQUEST. RESPONSE2011 © EPAM Systems, RD Dep. Сервлет. Request. ResponseСервлеты – это компоненты приложений Java Enterprise Edition, выполняющиеся на Сервлет. Request. ResponseПакет javax.servlet обеспечивает интерфейсы и классы для написания сервлетов.Центральной абстракцией Сервлет. Request. ResponseServlets API2011 © EPAM Systems, RD Dep. Сервлет. Request. ResponseПринимая запрос от клиента, сервлет получает два объекта:ServletRequest, который инкапсулирует Сервлет. Request. ResponseИнтерфейс ServletRequest дает сервлету доступ к:Информации, такой, как имена параметров, Сервлет. Request. ResponseИнтерфейс ServletResponse дает сервлету методы для ответа на запросы клиента. Сервлет. Request. ResponseHttpServlet - запросы и ответыМетоды класса HttpServlet, которые управляют клиентскими Сервлет. Request. ResponseОбъект HttpServletRequestОбъекты HttpServletRequest предоставляют доступ к данным HTTP заголовка и Сервлет. Request. ResponseEnumeration getParameterNames() - предоставляет имена параметров. String getQueryString() - возвращает Сервлет. Request. ResponseОбъект HttpServletResponseОбъект HttpServletResponse обеспечивает два способа возвращения данных пользователю:Метод getWriter Сервлет. Request. ResponseИнтерфейс HttpServletResponse void sendError(int sc, String msg) – сообщение о Сервлет. Request. ResponseДанные HTTP заголовкаПрежде чем получить доступ к объектам Writer или Сервлет. Request. Response. Example 012011 © EPAM Systems, RD Dep.package _java._ee._01.firstservlet;import java.io.IOException;import Сервлет. Request. Response. Example 012011 © EPAM Systems, RD Dep.		response.setContentType( Сервлет. Request. ResponseСервлет расширяет класс HttpServlet и переопределяет метод doGet.	Чтобы ответить клиенту, Сервлет. Request. ResponseДля того, чтобы сервлет работал на сервере, необходимо подготовить файл Сервлет. Request. Response	 - блок, описывающий соответсвие url и запускаемого сервлета		 - Сервлет. Request. Response - блок, описывающий имена файлов, которые будут пытаться открыться Сервлет. Request. Response. Example 01web.xml2011 © EPAM Systems, RD Dep. Java_EE_01_1 Сервлет. Request. ResponseЗапуск контейнера сервлетов и размещение проектаДействия по запуску сервлета с Сервлет. Request. ResponseWeb-приложение поставляется в виде архива .war, содержащего все его файлы. Сервлет. Request. ResponseДиректория WEB-INF содержит две поддиректории — /classes для .class-файлов сервлетов, Сервлет. Request. Response. Example 01 2011 © EPAM Systems, RD Dep. Сервлет. Request. ResponseЕсли вызывать сервлет из index.jsp, то тег FORM должен выглядеть MVC2011 © EPAM Systems, RD Dep. MVC2011 © EPAM Systems, RD Dep.ModelМодель отображаемых данныхControllerКонтроллер запроса пользователяViewШаблон представления данных1. MVC2011 © EPAM Systems, RD Dep. MVC2011 © EPAM Systems, RD Dep. JSP (START)2011 © EPAM Systems, RD Dep. JSP (start)Java Server Pages (JSP) обеспечивает разделение динамической и статической частей страницы, JSP (start)simple.jsp2011 © EPAM Systems, RD Dep.Simple	Hello, Bender JSP (start)2011 © EPAM Systems, RD Dep. JSP (start)Код сервлета, полученный после компиляции simple.jsp2011 © EPAM Systems, RD Dep.public ЖИЗНЕННЫЙ ЦИКЛ СЕРВЛЕТА И JSP2011 © EPAM Systems, RD Dep. Жизненный цикл сервлета и JSPВ обязанности веб контейнера входит управление жизненным циклом Жизненный цикл сервлета и JSPПроцессы, выполняемые с файлом JSP при первом вызове:Браузер Жизненный цикл сервлета и JSP2011 © EPAM Systems, RD Dep.1. Жизненный цикл ВЗАИМОДЕЙСТВИЕ СЕРВЛЕТА И JSP2011 © EPAM Systems, RD Dep. Взаимодействие сервлета и JSPСтраницы JSP и сервлеты никогда не используются в информационных Взаимодействие сервлета и JSP2011 © EPAM Systems, RD Dep. Взаимодействие сервлета и JSP. Example 02Параметры клиента передаются в сервлет как параметры Взаимодействие сервлета и JSP. Example 022011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import Взаимодействие сервлета и JSP. Example 02jsp/main.jsp2011 © EPAM Systems, RD Dep.Insert title here	request.getParameter( Взаимодействие сервлета и JSP. Example 022011 © EPAM Systems, RD Dep. Взаимодействие сервлета и JSPПередачу информации между JSP и сервлетом можно осуществлять, в Взаимодействие сервлета и JSPURL ресурса должен быть доступным на сервере, на котором Взаимодействие сервлета и JSPОбладая объектом RequestDispatcher, Вы можете дать возможность ассоциированному с Взаимодействие сервлета и JSPvoid forward (ServletRequest request, ServletResponse response) должен быть использован тогда, когда Взаимодействие сервлета и JSP. Example 03Метод void include(ServletRequest request, ServletResponse response) интерфейса RequestDispatcher позволяет Взаимодействие сервлета и JSP. Example 032011 © EPAM Systems, RD Dep. Взаимодействие сервлета и JSPВызов сервлетов из сервлетовЧтобы Ваш сервлет вызвал другой сервлет, Взаимодействие сервлета и JSPНадо:Знать имя сервлета, метод которого Вы хотите вызвать.Получить доступ Взаимодействие сервлета и JSPПотоковый выводСервлеты HTTP, как правило, поддерживают обработку нескольких клиентов СЕССИИ2011 © EPAM Systems, RD Dep. СессииОтслеживание сессииДля поддержки статуса между сериями запросов от одного и того же СессииПолучение сессииHttpSession getSession(bool) объекта HttpServletRequest возвращает сессию пользователя. Когда метод вызывается со СессииСохранение и получение данных сессииИнтерфейс HttpSession предоставляет методы, которые сохраняют и возвращают СессииЧтобы сохранить значения переменной в текущем сеансе, используется метод setAttribute() класса HttpSession, СессииЗавершение сессииСессия пользователя может быть завершена вручную или, в зависимости от того, СессииПревышение времени ожидания сессииДескриптор размещения можно использовать для установки промежутка времени для СессииСледующая настройка в дескрипторе размещения приводит к установке времени ожидания сессии на СессииПерезапись URLСессии становятся доступными при помощи обмена уникальными метками, которые называются идентификаторами СессииМетоды HttpServletResponse, которые поддерживают перезапись URL:public String encodeURL(String url)public String encodeRedirectURL(String url)Метод Сессии. Example 042011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import Сессии. Example 042011 © EPAM Systems, RD Dep.class SessionLogic {	public static void Сессии. Example 042011 © EPAM Systems, RD Dep.	catch (IOException e) {			e.printStackTrace();			throw new Сессии. Example 042011 © EPAM Systems, RD Dep. COOKIES2011 © EPAM Systems, RD Dep. CookiesИспользование CookieЗакладки (сookies) используются для хранения части информации на машине клиента. Закладки CookiesСервер может обеспечить одну или более закладок для клиента. Предполагается, что программа CookiesИспользование CookieЧтобы отправить закладку:Создайте объект CookieУстановите любые атрибуты Отправьте закладку Чтобы извлечь CookiesСоздание CookieКонструктор класса javax.servlet.http.Cookie создает закладу с начальным именем и значением. Вы CookiesУстановка атрибутов закладки2011 © EPAM Systems, RD Dep.public void doGet (HttpServletRequest request, CookiesОтправка закладкиЗакладки отправляются как заголовки ответа клиенту; они добавляются с помощью метода Cookies2011 © EPAM Systems, RD Dep.public void doGet (HttpServletRequest request, HttpServletResponse response) CookiesЗапрашивание закладокКлиенты возвращают закладки как поля, добавленные в HTTP заголовок запроса. Cookie[] CookiesПолучение значения закладкиString getValue() - возвращает значение закладки. 2011 © EPAM Systems, Cookies. Example 052011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import Cookies. Example 052011 © EPAM Systems, RD Dep.class CookieLogic {private static int Cookies. Example 052011 © EPAM Systems, RD Dep.	public static void seCookie(HttpServletRequest request,			HttpServletResponse Cookies. Example 052011 © EPAM Systems, RD Dep.private static int prepareCookieCounter(HttpServletRequest request,	HttpServletResponse Cookies. Example 052011 © EPAM Systems, RD Dep. СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ РЕСУРСОВ2011 © EPAM Systems, RD Dep. Совместное использование ресурсовСервлеты выполняемые на одном сервере иногда совместно используют ресурсы. Это Совместное использование ресурсовПример названия атрибута examples.bookstore.database.BookDBFrontEnd. Имена, начинающиеся с префиксов java.*, javax.*, Совместное использование ресурсовИнтерфейс ServletContextИнтерфейс ServletContext используется для взаимодействия с контейнером сервлетов. Сервлеты Совместное использование ресурсовКогда у Вас несколько сервлетов используют атрибут, каждый должен проинициализировать Совместное использование ресурсовServletContextObject getAttribute(String name) – возвращает совместный ресурс.Enumeration getAttributeNames() – получает Совместное использование ресурсовИнтерфейс ServletConfigПредставляет собой конфигурацию сервлета, используется в основном на этапе Совместное использование ресурсов. Example 062011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;+import java.io.IOException;..public Совместное использование ресурсов. Example 062011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;+import java.io.IOException;..public Совместное использование ресурсов. Example 062011 © EPAM Systems, RD Dep. СОБЫТИЯ2011 © EPAM Systems, RD Dep. СобытияСуществует несколько интерфейсов, которые позволяют следить за событиями, связанными с сеансом, контекстом События2011 © EPAM Systems, RD Dep. События2011 © EPAM Systems, RD Dep. События. Example 072011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import События. Example 072011 © EPAM Systems, RD Dep.	out.write( События. Example 072011 © EPAM Systems, RD Dep.package _java._ee._01._listener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;public class События. Example 072011 © EPAM Systems, RD Dep.public void attributeRemoved(HttpSessionBindingEvent ev) { События. Example 072011 © EPAM Systems, RD Dep.package _java._ee._01._listener;import javax.servlet.ServletRequest;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;import События. Example 072011 © EPAM Systems, RD Dep. Java_EE_01_6 … События. Example 072011 © EPAM Systems, RD Dep. ФИЛЬТРЫ2011 © EPAM Systems, RD Dep. ФильтрыРеализация интерфейса Filter позволяет создать объект, который может трансформировать заголовок и содержимое ФильтрыОсновные действия, которые может выполнить фильтр:перехват инициализации сервлета и определение содержания запроса, ФильтрыПри программировании фильтров следует обратить внимание на интерфейсы Filter, FilterChain и FilterConfig ФильтрыКроме того, необходимо реализовать метод void init(FilterConfig config), который принимает параметры инициализации ФильтрыС помощью метода doFilter() каждый фильтр получает текущий запрос и ответ, а Фильтры. Example 082011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import Фильтры. Example 082011 © EPAM Systems, RD Dep.package _java._ee._01._filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import Фильтры. Example 082011 © EPAM Systems, RD Dep.package _java._ee._01._filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import Фильтры. Example 082011 © EPAM Systems, RD Dep.	Java_EE_01_7…				FilterDemo		_java._ee._01.servlet.FilterDemo				FilterDemo		/FilterDemo				setCharFilter		_java._ee._01._filter.CharsetFilter				setCharFilter		/FilterDemo				setAnotherFilter		_java._ee._01._filter.AnotherFilter				setAnotherFilter		/FilterDemo Фильтры. Example 08index.jsp2011 © EPAM Systems, RD Dep.Insert title here Фильтры. Example 082011 © EPAM Systems, RD Dep. Java.EE.01Servlets2011 © EPAM Systems, RD Dep.Ihar Blinou, PhDOracle Certified Java InstructorIhar_blinou@epam.com
Слайды презентации

Слайд 2 2011 © EPAM Systems, RD Dep.
Содержание
Основы протокола HTTP
Платформа

2011 © EPAM Systems, RD Dep.СодержаниеОсновы протокола HTTPПлатформа J2EEСтруктура web-приложенияСервлет. Request.

J2EE
Структура web-приложения
Сервлет. Request. Response
MVC
JSP (start)
Жизненный цикл сервлета и JSP
Взаимодействие

сервлета и JSP
Сессии
Cookies
Совместное использование ресурсов
События
Фильтры


Слайд 3 ОСНОВЫ ПРОТОКОЛА HTTP
2011 © EPAM Systems, RD Dep.

ОСНОВЫ ПРОТОКОЛА HTTP2011 © EPAM Systems, RD Dep.

Слайд 4 Основы протокола HTTP
HTTP - Hyper Text Transfer Protocol

Определяет

Основы протокола HTTPHTTP - Hyper Text Transfer ProtocolОпределяет передачу данных во

передачу данных во время жизненного цикла сокета

Работает в среде

запрос-ответ (request-response)

Путь общения между браузерами и web-серверами


Работа по протоколу HTTP происходит следующим образом: программа-клиент устанавливает TCP-соединение с сервером (стандартный номер порта-80) и выдает ему HTTP-запрос. Сервер обрабатывает этот запрос и выдает HTTP-ответ клиенту.

2011 © EPAM Systems, RD Dep.


Слайд 5 Основы протокола HTTP
Структура HTTP-запроса

HTTP-запрос состоит из заголовка запроса

Основы протокола HTTPСтруктура HTTP-запросаHTTP-запрос состоит из заголовка запроса и тела запроса,

и тела запроса, разделенных пустой строкой. Тело запроса может

отсутствовать.

Заголовок запроса состоит из главной (первой) строки запроса и последующих строк, уточняющих запрос в главной строке. Последующие строки также могут отсутствовать.

2011 © EPAM Systems, RD Dep.


Слайд 6 Основы протокола HTTP
Запрос в главной строке состоит из

Основы протокола HTTPЗапрос в главной строке состоит из трех частей, разделенных

трех частей, разделенных пробелами:

Метод (иначе говоря, команда HTTP):


GET - запрос документа. Наиболее часто употребляемый метод.
HEAD - запрос заголовка документа. Отличается от GET тем, что выдается только заголовок запроса с информацией о документе. Сам документ не выдается.
POST - этот метод применяется для передачи данных скриптам. Сами данные следуют в последующих строках запроса в виде параметров.
PUT - разместить документ на сервере. Запрос с этим методом имеет тело, в котором передается сам документ.

2011 © EPAM Systems, RD Dep.


Слайд 7 Основы протокола HTTP
Ресурс –
это путь к определенному файлу

Основы протокола HTTPРесурс –это путь к определенному файлу на сервере, который

на сервере, который клиент хочет получить (или разместить -

для метода PUT). Если ресурс - просто какой-либо файл для считывания, сервер должен по этому запросу выдать его в теле ответа. Если же это путь к какому-либо скрипту, то сервер запускает скрипт и возвращает результат его выполнения. Кстати, благодаря такой унификации ресурсов для клиента практически безразлично, что он представляет собой на сервере.

2011 © EPAM Systems, RD Dep.


Слайд 8 Основы протокола HTTP
Версия протокола –
версия протокола HTTP,

Основы протокола HTTPВерсия протокола – версия протокола HTTP, с которой работает

с которой работает клиентская программа.


Таким образом, простейший HTTP-запрос

может выглядеть следующим образом:

GET / HTTP/1.0

- здесь запрашивается корневой файл из корневой директории web-сервера.

2011 © EPAM Systems, RD Dep.


Слайд 9 Основы протокола HTTP
Строки после главной строки запроса имеют

Основы протокола HTTPСтроки после главной строки запроса имеют следующий формат: параметр:значениe

следующий формат:

параметр:значениe

Таким образом задаются параметры запроса. Это

является необязательным, все строки после главной строки запроса могут отсутствовать; в этом случае сервер принимает их значение по умолчанию или по результатам предыдущего запроса (при работе в режиме Keep-Alive).

2011 © EPAM Systems, RD Dep.


Слайд 10 Основы протокола HTTP
Некоторые наиболее употребительные параметры HTTP-запроса:

Connection

Основы протокола HTTPНекоторые наиболее употребительные параметры HTTP-запроса: Connection (соединение) – может

(соединение) – может принимать значения Keep-Alive и close. Keep-Alive

("оставить в живых") означает, что после выдачи данного документа соединение с сервером не разрывается, и можно выдавать еще запросы. Большинство браузеров работают именно в режиме Keep-Alive, так как он позволяет за одно соединение с сервером "скачать" html-страницу и рисунки к ней. Будучи однажды установленным, режим Keep-Alive сохраняется до первой ошибки или до явного указания в очередном запросе Connection: close. close ("закрыть") - соединение закрывается после ответа на данный запрос.

2011 © EPAM Systems, RD Dep.


Слайд 11 Основы протокола HTTP
User-Agent - значением является "кодовое обозначение"

Основы протокола HTTPUser-Agent - значением является

браузера, например:
Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt)



Accept - список поддерживаемых браузером типов содержимого в порядке их предпочтения данным браузером, например для моего IE5:

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*

Это нужно для случая, когда сервер может выдавать один и тот же документ в разных форматах.

2011 © EPAM Systems, RD Dep.


Слайд 12 Основы протокола HTTP
Referer - URL, с которого перешли

Основы протокола HTTPReferer - URL, с которого перешли на этот ресурс.

на этот ресурс.

Host - имя хоста, с которого

запрашивается ресурс. Полезно, если на сервере имеется несколько виртуальных серверов под одним IP-адресом. В этом случае имя виртуального сервера определяется по этому полю.

Accept-Language - поддерживаемый язык. Имеет значение для сервера, который может выдавать один и тот же документ в разных языковых версиях.

2011 © EPAM Systems, RD Dep.


Слайд 13 Основы протокола HTTP
2011 © EPAM Systems, RD Dep.

Основы протокола HTTP2011 © EPAM Systems, RD Dep.

Слайд 14 ПЛАТФОРМА J2EE
2011 © EPAM Systems, RD Dep.

ПЛАТФОРМА J2EE2011 © EPAM Systems, RD Dep.

Слайд 15 Платформа J2EE
Java 2 Platform, Enterprise Edition (J2EE) определяет

Платформа J2EEJava 2 Platform, Enterprise Edition (J2EE) определяет стандарт для разработки

стандарт для разработки многоуровневых корпоративных приложений.

Java 2 Enterprise Edition

- это комплекс взаимодействующих Java-технологий, базирующихся на спецификациях, разработанных фирмой Sun Microsystems (http://java.sun.com/j2ee/), представляющих стандарт разработки серверных приложений уровня предприятия.

2011 © EPAM Systems, RD Dep.


Слайд 16 Платформа J2EE
J2EE - это не конкретный продукт,

Платформа J2EE J2EE - это не конкретный продукт, а набор спецификаций,

а набор спецификаций, устанавливающих правила, которых следует придерживаться поставщикам

конкретной реализации платформы J2EE, а также разработчикам корпоративных приложений.

Цифра "2" в названии спецификации связана с тем, что все технологии, охватываемые спецификациями J2EE, базируются на инструментальном комплекте поддержки разработок в среде Java - JDK (Java Development Kit) версии 1.2 и старше.

2011 © EPAM Systems, RD Dep.


Слайд 17 Платформа J2EE
Технологии J2EE ориентированы на разработку серверной стороны

Платформа J2EEТехнологии J2EE ориентированы на разработку серверной стороны приложения и облегчают,

приложения и облегчают, в первую очередь, процесс эффективной реализации

среднего уровня (Middle tier), содержащего бизнес-логику.

Стандарт Java EE расширяет платформу Java Standard Edition (Java SE) добавляя поддержку веб-сервисов, модели бизнес компонентов, API управления, коммуникационных протоколов, распределенных и веб-приложений. Веб-приложения являются лишь частью того, что описывает Java EE.

2011 © EPAM Systems, RD Dep.


Слайд 18 Платформа J2EE
Стандартный Java EE сервер приложений должен поддерживать

Платформа J2EEСтандартный Java EE сервер приложений должен поддерживать такие технологии как

такие технологии как EJB (сервер и контейнер), JNDI, JMS

(Java Message Service), JTA (Java Transaction API), архитектуру J2EE Connector.

Java EE задает контейнеры для серверных приложений, сервлетов, EJB компонентов.

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

2011 © EPAM Systems, RD Dep.


Слайд 19 Платформа J2EE
Java EE также предоставляет стандартную архитектуру для

Платформа J2EEJava EE также предоставляет стандартную архитектуру для взаимодействия Java EE

взаимодействия Java EE приложений и серверов приложений с гетерогенными

корпоративными информационными системами, такими как ERP-системы, мейнфреймы, системы баз данных и т.д.

Архитектура Java EE Connector предоставляет средства взаимодействия с корпоративными системами используя стандартный интерфейс, известный как адаптер ресурсов (Resource adapter).

2011 © EPAM Systems, RD Dep.


Слайд 20 Платформа J2EE
2011 © EPAM Systems, RD Dep.
Сервис:

Платформа J2EE2011 © EPAM Systems, RD Dep.Сервис:  Java Naming Directory

Java Naming Directory (JNDI)

– универсальный сервис
хранения объектов
в иерархической структуре имен
(аналогично файловой системе)

Ресурс:
DataSource
- объект, позволяющий приложению
получить доступ к соединению к БД

Слайд 21 Платформа J2EE
Платформа J2EE использует модель многоуровневого распределенного приложения.

Платформа J2EEПлатформа J2EE использует модель многоуровневого распределенного приложения. Логически приложение разделено



Логически приложение разделено на компоненты в соответствии с их

функциональностью.

Различные компоненты, составляющие J2EE-приложение, установлены на различных компьютерах (слоях) в зависимости от их уровня в многоуровневой среде J2EE, которой данный компонент принадлежит.

Компоненты клиентского уровня работают на клиентской машине.
Компоненты Web-уровня работают на J2EE-сервере.
Компоненты бизнес-уровня работают на J2EE-сервере.
Программное обеспечение уровня корпоративной информационной системы (EIS) работает на EIS-сервере.

2011 © EPAM Systems, RD Dep.


Слайд 22 Платформа J2EE
Приложение Java EE может состоять из нескольких

Платформа J2EEПриложение Java EE может состоять из нескольких компонентов, таких как,

компонентов, таких как, например, EJB, веб-модули, адаптеры ресурсов, клиентские

модули J2EE.

Каждый из компонентов может иметь свой дескриптор развертывания – XML файл, описывающий компонент.

Для разворачивания Java EE компонентов применяется файл в формате «Java архив» (JAR), который расширяется несколькими дополнительными форматами в зависимости от того или иного типа компонента. Формат JAR основан на формате ZIP.

2011 © EPAM Systems, RD Dep.


Слайд 23 Платформа J2EE
JAR файл может содержать Java классы, XML

Платформа J2EEJAR файл может содержать Java классы, XML файлы, вспомогательные ресурсы,

файлы, вспомогательные ресурсы, статические HTML файлы и другие.

Стандартное Java

веб-приложение разворачивается в WAR (Web Application Archive) файле, который является JAR файлом с расширением WAR.

Стандартное Java EE приложение разворачивается в EAR (Enterprise Application Archive) файле, который является JAR файлом с расширением EAR.

2011 © EPAM Systems, RD Dep.


Слайд 24 Платформа J2EE
WAR файл - это специализированный JAR файл,

Платформа J2EEWAR файл - это специализированный JAR файл, содержащий такие компоненты

содержащий такие компоненты веб-приложения как сервлеты, JSP файлы, HTML

файлы, дескрипторы развертывания, библиотеки классов и тому подобное.

WAR файл может быть развернут на веб-сервере, таком как Tomcat.

2011 © EPAM Systems, RD Dep.


Слайд 25 Платформа J2EE
EAR файл – это специализированный JAR файл,

Платформа J2EEEAR файл – это специализированный JAR файл, содержащий компоненты Java

содержащий компоненты Java EE приложения, такие как веб-приложения (WAR),

EJB, адаптеры ресурсов и так далее.

Файл EAR может быть развернут на сервере приложений Java EE, таком как JBoss, WebLogic или WebSphere.

Сервер приложений Java EE загружает EAR файлы в процессе выполнения и устанавливает обнаруженные в нем компоненты на основе инструкций, описанных в дескрипторе развертывания каждого компонента.

2011 © EPAM Systems, RD Dep.


Слайд 26 СТРУКТУРА WEB-ПРИЛОЖЕНИЯ
2011 © EPAM Systems, RD Dep.

СТРУКТУРА WEB-ПРИЛОЖЕНИЯ2011 © EPAM Systems, RD Dep.

Слайд 27 Структура web-приложения
Компоненты типичного Java EE приложения
2011 © EPAM

Структура web-приложенияКомпоненты типичного Java EE приложения2011 © EPAM Systems, RD Dep.

Systems, RD Dep.


Слайд 28 Структура web-приложения
Традиционно, корпоративное Java EE приложение определяется как

Структура web-приложенияТрадиционно, корпоративное Java EE приложение определяется как набор следующих компонентов

набор следующих компонентов и технологий:
EAR файлы
Java сервлеты

JavaServer Pages или JavaServer Faces
Enterprise JavaBeans (EJB)
Сервисы аутентификации и авторизации (JAAS)
Архитектура J2EE Connector
JavaBeans Activation Framework (JAF)
JavaMail
Java Message Service (JMS)
Java Persistence API (JPA)
Java Transaction API (JTA)
The Java Management Extensions (JMX) API
Java API for XML Processing (JAXP)
The Java API for XML-based RPC (JAX-RPC)
The Java Architecture for XML Binding (JAXB)
The SOAP with Attachments API for Java (SAAJ)
Java Database Connectivity (JDBC) framework

2011 © EPAM Systems, RD Dep.


Слайд 29 Структура web-приложения
В свою очередь, веб-приложение Java объединяет подмножество

Структура web-приложенияВ свою очередь, веб-приложение Java объединяет подмножество компонентов и технологий

компонентов и технологий корпоративного приложения, таких как:

WAR файлы

Java сервлеты
JavaServer Faces или JavaServer Pages
Java Database Connectivity (JDBC) framework

Популярные Фреймворки, такие как Apache Struts, Spring, Hibernate и другие стирают традиционную грань между корпоративными приложениями и веб-приложениями. Каждый фреймворк предлагает свою точку зрения на то, как решить ту или иную задачу. Каждый фреймворк пытается более эффективно решить те или иные сложности, возможно используя набор дополнительных технологий.

2011 © EPAM Systems, RD Dep.


Слайд 30 Структура web-приложения
В типичном Java EE веб-приложении HTML клиент

Структура web-приложенияВ типичном Java EE веб-приложении HTML клиент отправляет запрос серверу,

отправляет запрос серверу, где этот запрос обрабатывается веб-контейнером сервера

приложений. Веб-контейнер вызывает сервлет, который сконфигурирован для обработки определенного контекста запроса.


2011 © EPAM Systems, RD Dep.


Слайд 31 Структура web-приложения
Как только сервлет получает начальный запрос, инициируется

Структура web-приложенияКак только сервлет получает начальный запрос, инициируется выполнение определенной бизнес

выполнение определенной бизнес логики для завершения запроса. При этом

вызывается один или несколько бизнес сервисов или компонентов

2011 © EPAM Systems, RD Dep.


Слайд 32 Структура web-приложения
Некоторым бизнес сервисам или компонентам требуется доступ

Структура web-приложенияНекоторым бизнес сервисам или компонентам требуется доступ к хранилищам данных

к хранилищам данных или информационным системам. Как правило, для

этих целей вводится дополнительный слой абстракции между бизнес-сервисами и хранилищем данных, что позволяет сделать максимально безболезненным возможное изменение источника данных в будущем. При этом объекты доступа к данным (DAO) представляются отдельными компонентами

2011 © EPAM Systems, RD Dep.


Слайд 33 Структура web-приложения
Когда обработка запроса на сервере завершена, HTML

Структура web-приложенияКогда обработка запроса на сервере завершена, HTML клиенту возвращается ответ

клиенту возвращается ответ в определенном формате.
Этот сценарий может быть

реализован с использованием ограниченного набора Java EE технологий, таких как, например, сервлеты, JDBC, JSP и тому подобные. Tomcat как и другие веб-серверы, предоставляющие среду выполнения сервлетов и JSP, вполне могут быть использованы как серверы приложений для данного сценария.

2011 © EPAM Systems, RD Dep.


Слайд 34 Структура web-приложения
Структура J2EE Web-приложения
2011 © EPAM Systems, RD

Структура web-приложенияСтруктура J2EE Web-приложения2011 © EPAM Systems, RD Dep.

Dep.


Слайд 35 Структура web-приложения
Web-приложение должно включать:

Основную (базовую)директорию [имя директории является

Структура web-приложенияWeb-приложение должно включать:Основную (базовую)директорию [имя директории является именем приложения]WEB-INF директориюweb.xml

именем приложения]
WEB-INF директорию
web.xml файл конфигурации [Deployment Descriptor (дескриптор развертывания)]


Web-приложение

может включать:

Servlets [located in WEB-INF\classes dir]
JSP files
HTML files
Documents, Images
Jars and other classes [usually in a lib directory]

2011 © EPAM Systems, RD Dep.


Слайд 36 Структура web-приложения
Базовая структура веб-приложения должна включать корневую директорию,

Структура web-приложенияБазовая структура веб-приложения должна включать корневую директорию, WEB-INF директорию и

WEB-INF директорию и дескриптор развертывания web.xml.

Название корневого каталога будет

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

Например, вызов index.html файла, расположенного в корне каталога ‘mysite’, может быть сделан как:
http://localhost:8080/mysite или http://localhost:8080/mysite/index.html

2011 © EPAM Systems, RD Dep.


Слайд 37 Структура web-приложения
Web.xml конфигурационный файл используется для:

Объявление классов servlet

Структура web-приложенияWeb.xml конфигурационный файл используется для:Объявление классов servlet и JSPsОтображения servlets

и JSPs
Отображения servlets и JSPs в URL шаблоны
Определения welcom-страниц
Установления

безопасности содержимого, ролей и методов аутентификации

2011 © EPAM Systems, RD Dep.


Слайд 38 Структура web-приложения
Любой класс, который загружен и выполнен в

Структура web-приложенияЛюбой класс, который загружен и выполнен в веб-контейнерах, должен быть

веб-контейнерах, должен быть расположен в WEB-INF\CLASSES.

Это могут быть:
Servlets
Java

Beans (used in JSP)
Tag libraries classes (used in JSP)
Helper classes

Все классы, расположенные в директории classes, могут быть собраны в пакеты.

2011 © EPAM Systems, RD Dep.


Слайд 39 Структура web-приложения
Другие файлы как JSPs и статическое содержание

Структура web-приложенияДругие файлы как JSPs и статическое содержание могут быть расположены

могут быть расположены где угодно в соответствии с корневой

директорией, но местоположение будет отражено в URL, используемом, чтобы вызвать их.

Например, если index.html страница расположена в mysite\pages\ каталоге, URL должен быть похож на:

http://localhost:8080/mysite/pages/index.html

2011 © EPAM Systems, RD Dep.


Слайд 40 Структура web-приложения
Jars и другие java классы, используемые в

Структура web-приложенияJars и другие java классы, используемые в приложении, могут быть

приложении, могут быть помещены куда угодно в соответствии с

корнем директории или даже вне приложения (обычно в lib).

2011 © EPAM Systems, RD Dep.


Слайд 41 СЕРВЛЕТ. REQUEST. RESPONSE
2011 © EPAM Systems, RD Dep.

СЕРВЛЕТ. REQUEST. RESPONSE2011 © EPAM Systems, RD Dep.

Слайд 42 Сервлет. Request. Response
Сервлеты – это компоненты приложений Java

Сервлет. Request. ResponseСервлеты – это компоненты приложений Java Enterprise Edition, выполняющиеся

Enterprise Edition, выполняющиеся на стороне сервера, способные обрабатывать клиентские

запросы и динамически генерировать ответы на них.

Наибольшее распространение получили сервлеты, обрабатывающие клиентские запросы по протоколу HTTP.

Сервлеты можно внедрять в различные сервера, так как API сервлета, который вы используете для его написания, ничего не «знает» ни о среде сервера, ни о его протоколе.

Множество Web-серверов поддерживает технологию Java Servlet.

2011 © EPAM Systems, RD Dep.


Слайд 43 Сервлет. Request. Response
Пакет javax.servlet обеспечивает интерфейсы и классы

Сервлет. Request. ResponseПакет javax.servlet обеспечивает интерфейсы и классы для написания сервлетов.Центральной

для написания сервлетов.

Центральной абстракцией API сервлета является интерфейс Servlet.

Все сервлеты реализуют данный интерфейс напрямую, но более распространено расширение класса, реализующего его, как HttpServlet.

Интерфейс Servlet объявляет, но не реализует методы, которые управляют сервлетом и его взаимодействием с клиентами.

2011 © EPAM Systems, RD Dep.


Слайд 44 Сервлет. Request. Response
Servlets API


2011 © EPAM Systems, RD

Сервлет. Request. ResponseServlets API2011 © EPAM Systems, RD Dep.

Dep.


Слайд 45 Сервлет. Request. Response
Принимая запрос от клиента, сервлет получает

Сервлет. Request. ResponseПринимая запрос от клиента, сервлет получает два объекта:ServletRequest, который

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

инкапсулирует обратную связь сервлета с клиентом.

ServletRequest и ServletResponse – это интерфейсы, определенные пакетом javax.servlet.

2011 © EPAM Systems, RD Dep.


Слайд 46 Сервлет. Request. Response
Интерфейс ServletRequest дает сервлету доступ к:

Информации,

Сервлет. Request. ResponseИнтерфейс ServletRequest дает сервлету доступ к:Информации, такой, как имена

такой, как имена параметров, переданных клиентом, протоколы (схемы), используемые

клиентом и имена удаленного хоста, создавшего запрос и сервера который их получает.
Входному потоку ServletInputStream. Сервлеты используют входной поток для получения данных от клиентов, которые используют протоколы приложений, такие как HTTP POST и PUT методы.

Интерфейсы, которые расширяют интерфейс ServletRequest, позволяют сервлету получать больше данных, характерных для протокола. К примеру, интерфейс HttpServletRequest содержит методы для доступа к главной информации по протоколу HTTP.


2011 © EPAM Systems, RD Dep.


Слайд 47 Сервлет. Request. Response
Интерфейс ServletResponse дает сервлету методы для

Сервлет. Request. ResponseИнтерфейс ServletResponse дает сервлету методы для ответа на запросы

ответа на запросы клиента.

Он:
Позволяет сервлету устанавливать длину содержания

и тип MIME ответа (метод setContentType(String type)).
Обеспечивает исходящий поток ServletOutputStream и Writer, через которые сервлет может отправлять ответные данные.

Интерфейсы, которые расширяют интерфейс ServletResponse, дают сервлету больше возможнойстей для работы с протоколами. Например, интерфейс HttpServletResponse содержит методы, которые позволяют сервлету манипулировать информацией заголовка HTTP.

2011 © EPAM Systems, RD Dep.


Слайд 48 Сервлет. Request. Response
HttpServlet - запросы и ответы

Методы класса

Сервлет. Request. ResponseHttpServlet - запросы и ответыМетоды класса HttpServlet, которые управляют

HttpServlet, которые управляют клиентскими запросами принимают два аргумента:

Объект HttpServletRequest,

который инкапсулирует данные от клиента
Объект HttpServletResponse, который инкапсулирует ответ к клиенту

2011 © EPAM Systems, RD Dep.


Слайд 49 Сервлет. Request. Response
Объект HttpServletRequest

Объекты HttpServletRequest предоставляют доступ к

Сервлет. Request. ResponseОбъект HttpServletRequestОбъекты HttpServletRequest предоставляют доступ к данным HTTP заголовка

данным HTTP заголовка и позволяют получить аргументы, которые клиент

направил вместе с запросом.
Непосредственно в интерфейсе HttpServletRequest объявлен ряд методов, позволяющих манипулировать содержимым запросов:
String getParameter(String name) - возвращает величину именованных параметров.
String[] getParameterValues(String name) - возвращает массив величин именованного параметра. Используется, если параметр может иметь более чем одну величину.

2011 © EPAM Systems, RD Dep.


Слайд 50 Сервлет. Request. Response
Enumeration getParameterNames() - предоставляет имена параметров.

Сервлет. Request. ResponseEnumeration getParameterNames() - предоставляет имена параметров. String getQueryString() -


String getQueryString() - возвращает строковую (String) величину необработанных данных

клиента для HTTP запросов GET.
BufferedReader getReader() - возвращает объект BufferedReader (текстовая информация) для считатывания необработанных данных (для HTTP запросов POST, PUT, и DELETE).
ServletInputStream getInputStream() - возвращает объект ServletInputStream (двоичная информация) для считывания необработанных данных (для HTTP запросов для POST, PUT, и DELETE).

2011 © EPAM Systems, RD Dep.


Слайд 51 Сервлет. Request. Response
Объект HttpServletResponse

Объект HttpServletResponse обеспечивает два способа

Сервлет. Request. ResponseОбъект HttpServletResponseОбъект HttpServletResponse обеспечивает два способа возвращения данных пользователю:Метод

возвращения данных пользователю:

Метод getWriter возвращает Writer
Метод getOutputStream возвращает ServletOutputStream

Используйте

метод getWriter для возвращения пользователю текстовых данных и метод getOutputStream для бинарных.
Закрытие Writer или ServletOutputStream после отправления запроса позволит серверу определить, что ответ готов.

2011 © EPAM Systems, RD Dep.


Слайд 52 Сервлет. Request. Response
Интерфейс HttpServletResponse

void sendError(int sc, String

Сервлет. Request. ResponseИнтерфейс HttpServletResponse void sendError(int sc, String msg) – сообщение

msg) – сообщение о возникших ошибках, где sc –

код ошибки, msg – текстовое сообщение;

void setDateHeader(String name, long date) – добавление даты в заголовок ответа;

void setHeader(String name, String value) – добавление параметров в заголовок ответа. Если параметр с таким именем уже существует, то он будет заменен.

2011 © EPAM Systems, RD Dep.


Слайд 53 Сервлет. Request. Response
Данные HTTP заголовка

Прежде чем получить доступ

Сервлет. Request. ResponseДанные HTTP заголовкаПрежде чем получить доступ к объектам Writer

к объектам Writer или OutputStream необходимо установить данные HTTP

заголовка.

Класс HttpServletResponse предоставляет методы для доступа к данным заголовка:
setContentType(String type) - устанавливает тип содержимого (Content-type).

2011 © EPAM Systems, RD Dep.

response.setContentType("text/html");


Слайд 54 Сервлет. Request. Response. Example 01
2011 © EPAM Systems,

Сервлет. Request. Response. Example 012011 © EPAM Systems, RD Dep.package _java._ee._01.firstservlet;import

RD Dep.
package _java._ee._01.firstservlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public

class FirstServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public FirstServlet() {
super();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
String title = "Simple Servlet Output";
// сначала установите тип содержания и другие поля заголовков ответа


Слайд 55 Сервлет. Request. Response. Example 01
2011 © EPAM Systems,

Сервлет. Request. Response. Example 012011 © EPAM Systems, RD Dep.		response.setContentType(

RD Dep.
response.setContentType("text/html");
out.println("");
out.println(title);
out.println("");
out.println("" + title + "");
out.print("This is ");
out.print(this.getClass().getName());
out.print(", using

the GET method");
out.println("");
out.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

Слайд 56 Сервлет. Request. Response
Сервлет расширяет класс HttpServlet и переопределяет

Сервлет. Request. ResponseСервлет расширяет класс HttpServlet и переопределяет метод doGet.	Чтобы ответить

метод doGet.

Чтобы ответить клиенту, метод doGet в примере использует

Writer из объекта HttpServletResponse для возвращения клиенту текстовых данных. Прежде чем получить доступ к writer, пример устанавливает заголовок content-type. В конце метода doGet, после того как был отправлен запрос, Writer закрывается.

Для работы с конкретным HTTP-методом передачи данных достаточно расширить свой класс от класса HttpServlet и реализовать один из этих методов. Метод service() переопределять не надо, в классе HttpServlet он только определяет, каким HTTP-методом передан запрос клиента, и обращается к соответствующему методу doXxx().

2011 © EPAM Systems, RD Dep.


Слайд 57 Сервлет. Request. Response
Для того, чтобы сервлет работал на

Сервлет. Request. ResponseДля того, чтобы сервлет работал на сервере, необходимо подготовить

сервере, необходимо подготовить файл описания сервлета (XML-файл).

Элементы web.xml

-

блок, описывающий сервлеты
- название сервлета
- текстовое описание сервлета
- имя сервлета
- класс сервлета
- блок, описывающий параметры инициализации сервлета
- название параметра
- значение параметра

2011 © EPAM Systems, RD Dep.


Слайд 58 Сервлет. Request. Response
- блок, описывающий соответсвие url

Сервлет. Request. Response	 - блок, описывающий соответсвие url и запускаемого сервлета

и запускаемого сервлета
- имя сервлета
- описывает url-шаблон

- блок, описывающий параметры сессии
- максимальное время жизни сессии

- блок, описывающий параметры, как пользователь будет логиниться к серверу
- метод авторизации (BASIC, FORM, DIGEST, CLIENT-CERT)

2011 © EPAM Systems, RD Dep.


Слайд 59 Сервлет. Request. Response
- блок, описывающий имена файлов,

Сервлет. Request. Response - блок, описывающий имена файлов, которые будут пытаться

которые будут пытаться открыться при запросе только по имени

директории (без названия файла). Сервер будет искать первый существующий файл из списка и загрузит именно его
- имя файла

- блок, описывающий соответствие ошибки и загружаемой при этом страницы
- код произошедшей ошибки
- тип произошедшей ошибки
- загружаемый файл

- блок, описывающий соответствие JSP Tag library descriptor с URI-шаблоном
- название uri-шаблона
- расположение шаблона

2011 © EPAM Systems, RD Dep.


Слайд 60 Сервлет. Request. Response. Example 01
web.xml
2011 © EPAM Systems,

Сервлет. Request. Response. Example 01web.xml2011 © EPAM Systems, RD Dep. Java_EE_01_1

RD Dep.

id="WebApp_ID"
version="2.5">
Java_EE_01_1

index.html
index.htm
index.jsp
default.html
default.htm
default.jsp



FirstServlet
FirstServlet
_java._ee._01.firstservlet.FirstServlet


FirstServlet
/FirstServlet



Слайд 61 Сервлет. Request. Response
Запуск контейнера сервлетов и размещение проекта

Действия

Сервлет. Request. ResponseЗапуск контейнера сервлетов и размещение проектаДействия по запуску сервлета

по запуску сервлета с помощью контейнера сервлетов Tomcat, который

установлен в каталоге /Apache Software Foundation/Tomcat…

В этом же каталоге размещаются следующие подкаталоги:

/bin – содержит файлы запуска контейнера сервлетов tomcatX.exe, tomcatXw.exe и некоторые необходимые для этого библиотеки;
/common – содержит библиотеки служебных классов, в частности Servlet API;
/conf – содержит конфигурационные файлы, в частности конфигурационный файл контейнера сервлетов server.xml;
/logs – помещаются log-файлы;
/lib – размещены необходимые библиотеки;
/webapps – в этот каталог помещаются приложение (в отдельный каталог)

2011 © EPAM Systems, RD Dep.


Слайд 62 Сервлет. Request. Response
Web-приложение поставляется в виде архива .war,

Сервлет. Request. ResponseWeb-приложение поставляется в виде архива .war, содержащего все его

содержащего все его файлы.

На самом деле это zip-архив,

расширение .war нужно для того, чтобы Web-контейнер узнавал архивы развертываемых на нем Web-приложений.

Содержащаяся в этом архиве структура директорий Web-приложения должна включать директорию WEB-INF, вложенную непосредственно в корневую директорию приложения.

2011 © EPAM Systems, RD Dep.


Слайд 63 Сервлет. Request. Response
Директория WEB-INF содержит две поддиректории —

Сервлет. Request. ResponseДиректория WEB-INF содержит две поддиректории — /classes для .class-файлов



/classes для .class-файлов сервлетов, классов и интерфейсов EJB-компонентов и

других Java-классов, и
/lib для .jar и .zip файлов, содержащих используемые библиотеки.

Файл web.xml также должен находится непосредственно в директории WEB_INF.

War-файл необходимо разместить в папке /webapps контейнера Tomcat

2011 © EPAM Systems, RD Dep.


Слайд 64 Сервлет. Request. Response. Example 01
2011 © EPAM

Сервлет. Request. Response. Example 01 2011 © EPAM Systems, RD Dep.

Systems, RD Dep.


Слайд 65 Сервлет. Request. Response
Если вызывать сервлет из index.jsp, то

Сервлет. Request. ResponseЕсли вызывать сервлет из index.jsp, то тег FORM должен

тег FORM должен выглядеть следующим образом:






Файл index.jsp помещается в

папку /webapps/FirstWebProject и в браузере набирается строка:

http://localhost:8080/Java_EE_01_1/index.jsp


2011 © EPAM Systems, RD Dep.





Слайд 66 MVC
2011 © EPAM Systems, RD Dep.

MVC2011 © EPAM Systems, RD Dep.

Слайд 67 MVC
2011 © EPAM Systems, RD Dep.
Model
Модель отображаемых данных
Controller
Контроллер

MVC2011 © EPAM Systems, RD Dep.ModelМодель отображаемых данныхControllerКонтроллер запроса пользователяViewШаблон представления

запроса пользователя
View
Шаблон представления данных
1. Получает или сохраняет модель в

БД

2. Определяет нужное view и
передает ему управление

3. Накладывает модель на шаблон представления


Слайд 68 MVC
2011 © EPAM Systems, RD Dep.

MVC2011 © EPAM Systems, RD Dep.

Слайд 69 MVC
2011 © EPAM Systems, RD Dep.

MVC2011 © EPAM Systems, RD Dep.

Слайд 70 JSP (START)
2011 © EPAM Systems, RD Dep.

JSP (START)2011 © EPAM Systems, RD Dep.

Слайд 71 JSP (start)
Java Server Pages (JSP) обеспечивает разделение динамической

JSP (start)Java Server Pages (JSP) обеспечивает разделение динамической и статической частей

и статической частей страницы, результатом чего является возможность изменения

дизайна страницы, не затрагивая динамическое содержание.

Это свойство используется при разработке и поддержке страниц, так как дизайнерам нет необходимости знать, как работать с динамическими данными.


2011 © EPAM Systems, RD Dep.


Слайд 72 JSP (start)
simple.jsp
2011 © EPAM Systems, RD Dep.

JSP (start)simple.jsp2011 © EPAM Systems, RD Dep.Simple	Hello, Bender

language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>

"http://www.w3.org/TR/html4/loose.dtd">



Simple



Hello, Bender



Слайд 73 JSP (start)
2011 © EPAM Systems, RD Dep.

JSP (start)2011 © EPAM Systems, RD Dep.

Слайд 74 JSP (start)
Код сервлета, полученный после компиляции simple.jsp

2011 ©

JSP (start)Код сервлета, полученный после компиляции simple.jsp2011 © EPAM Systems, RD

EPAM Systems, RD Dep.
public final class simple_jsp {
public void

_jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this,request,response,null,true,8192,true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\r\nSimple\r\n\r\n");
out.write("\r\nHello, Bender\r\n ");
} catch (Throwable t) {
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}


Слайд 75 ЖИЗНЕННЫЙ ЦИКЛ СЕРВЛЕТА И JSP
2011 © EPAM Systems,

ЖИЗНЕННЫЙ ЦИКЛ СЕРВЛЕТА И JSP2011 © EPAM Systems, RD Dep.

RD Dep.


Слайд 76 Жизненный цикл сервлета и JSP
В обязанности веб контейнера

Жизненный цикл сервлета и JSPВ обязанности веб контейнера входит управление жизненным

входит управление жизненным циклом сервлета. Веб контейнер создает объект

сервлета и тогда вызывает метод init(). По окончании выполнения этого метода, сервлет находится в состоянии готовности принимать и обрабатывать клиентские запросы. Контейнер вызывает метод service() в сервлете для управления каждым запросом. Перед уничтожением объекта, контейнер вызовет метод destroy(). После этого сервлет становится потенциальным кандидатом для сборщика мусора.

2011 © EPAM Systems, RD Dep.


Слайд 77 Жизненный цикл сервлета и JSP
Процессы, выполняемые с файлом

Жизненный цикл сервлета и JSPПроцессы, выполняемые с файлом JSP при первом

JSP при первом вызове:

Браузер делает запрос к странице JSP.
JSP-engine

анализирует содержание файла JSP.
JSP-engine создает временный сервлет с кодом, основанным на исходном тексте файла JSP, при этом контейнер транслирует операторы Java в метод _jspService().
Полученный код компилируется в файл *.class.
Вызываются методы init() и _jspService(), и сервлет логически исполняется.
Сервлет на основе JSP установлен. Комбинация статического HTML и графики вместе с динамическими элементами, определенными в оригинале JSP, пересылаются браузеру через выходной поток объекта ответа ServletResponse.

2011 © EPAM Systems, RD Dep.


Слайд 78 Жизненный цикл сервлета и JSP
2011 © EPAM Systems,

Жизненный цикл сервлета и JSP2011 © EPAM Systems, RD Dep.1. Жизненный

RD Dep.
1. Жизненный цикл класса страницы
2. Жизненный цикл объекта

страницы

Слайд 79 ВЗАИМОДЕЙСТВИЕ СЕРВЛЕТА И JSP
2011 © EPAM Systems, RD

ВЗАИМОДЕЙСТВИЕ СЕРВЛЕТА И JSP2011 © EPAM Systems, RD Dep.

Dep.


Слайд 80 Взаимодействие сервлета и JSP
Страницы JSP и сервлеты никогда

Взаимодействие сервлета и JSPСтраницы JSP и сервлеты никогда не используются в

не используются в информационных системах друг без друга.

Причиной

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

Страница JSP ответственна за формирование пользовательского интерфейса и отображение информации, переданной с сервера.

Сервлет выполняет роль контроллера запросов и ответов, то есть принимает запросы от всех связанных с ним JSP-страниц, вызывает соответствующую бизнес-логику для их (запросов) обработки и в зависимости от результата выполнения решает, какую JSP поставить этому результату в соответствие.

2011 © EPAM Systems, RD Dep.


Слайд 81 Взаимодействие сервлета и JSP
2011 © EPAM Systems, RD

Взаимодействие сервлета и JSP2011 © EPAM Systems, RD Dep.

Dep.


Слайд 82 Взаимодействие сервлета и JSP. Example 02
Параметры клиента передаются

Взаимодействие сервлета и JSP. Example 02Параметры клиента передаются в сервлет как

в сервлет как параметры запроса.

index.jsp
2011 © EPAM Systems, RD

Dep.

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




MyJSP




Введите что-нибудь:









Слайд 83 Взаимодействие сервлета и JSP. Example 02
2011 © EPAM

Взаимодействие сервлета и JSP. Example 022011 © EPAM Systems, RD Dep.package

Systems, RD Dep.
package _java._ee._01.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public

class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
if (request.getParameter("command").equals("forward"))
{
request.getRequestDispatcher("jsp/main.jsp").forward(request, response);
}
}
}




MyServlet
MyServlet
_java._ee._01.servlet.MyServlet


MyServlet
/MyServlet



Слайд 84 Взаимодействие сервлета и JSP. Example 02
jsp/main.jsp
2011 © EPAM

Взаимодействие сервлета и JSP. Example 02jsp/main.jsp2011 © EPAM Systems, RD Dep.Insert title here	request.getParameter(

Systems, RD Dep.

"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



Insert title here


request.getParameter("anything")



Слайд 85 Взаимодействие сервлета и JSP. Example 02
2011 © EPAM

Взаимодействие сервлета и JSP. Example 022011 © EPAM Systems, RD Dep.

Systems, RD Dep.


Слайд 86 Взаимодействие сервлета и JSP
Передачу информации между JSP и

Взаимодействие сервлета и JSPПередачу информации между JSP и сервлетом можно осуществлять,

сервлетом можно осуществлять, в частности, с помощью добавления атрибутов

к объектам HttpServletRequest, HttpSession, HttpServletContext. Вызов main.jsp из сервлета в данном случае производится методом forward() интерфейса RequestDispatcher.

RequestDispatcher getRequestDispatcher() класса ServletContext - возвращает объект RequestDispatcher. Этот метод в качестве аргумента берет URL запрашиваемого ресурса.



2011 © EPAM Systems, RD Dep.


Слайд 87 Взаимодействие сервлета и JSP
URL ресурса должен быть доступным

Взаимодействие сервлета и JSPURL ресурса должен быть доступным на сервере, на

на сервере, на котором запущен сервлет в момент обращения.

Если ресурс недоступен, или у сервера не реализован объект RequestDispatcher для ресурса данного типа, этот метод вернет значение null. Сервлет должен быть готов к таким ситуациям.


2011 © EPAM Systems, RD Dep.


Слайд 88 Взаимодействие сервлета и JSP
Обладая объектом RequestDispatcher, Вы можете

Взаимодействие сервлета и JSPОбладая объектом RequestDispatcher, Вы можете дать возможность ассоциированному

дать возможность ассоциированному с ним ресурсу отвечать на запрос

клиента, т.е. делать перенаправление.


2011 © EPAM Systems, RD Dep.

public class BookStoreServlet extends HttpServlet {
public void service (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
RequestDispatcher dispatcher;
dispatcher = request.getRequestDispatcher("jsp/main.jsp");
dispatcher.forward(request, response);
...
}
}

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


Слайд 89 Взаимодействие сервлета и JSP
void forward (ServletRequest request, ServletResponse response) должен

Взаимодействие сервлета и JSPvoid forward (ServletRequest request, ServletResponse response) должен быть использован тогда,

быть использован тогда, когда необходимо отдать другому ресурсу возможность

отвечать пользователю.

Если Вы уже начали отвечать пользователю, используя объекты PrintWriter или ServletOutputStream, Вам необходимо использовать метод void include (ServletRequest request, ServletResponse response).

2011 © EPAM Systems, RD Dep.


Слайд 90 Взаимодействие сервлета и JSP. Example 03
Метод void include(ServletRequest request,

Взаимодействие сервлета и JSP. Example 03Метод void include(ServletRequest request, ServletResponse response) интерфейса RequestDispatcher

ServletResponse response) интерфейса RequestDispatcher позволяет вызываемому сервлету отвечать клиенту и

использовать в качестве части ответа ресурс, ассоциированный с объектом RequestDispatcher.

2011 © EPAM Systems, RD Dep.

public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
if (request.getParameter("command").equals("forward"))
{
response.getWriter().println("xa-xa-xa");
RequestDispatcher dispatcher;
dispatcher = request.getRequestDispatcher("jsp/main.jsp");
if (dispatcher != null) {
dispatcher.include(request, response);
} } }}


Слайд 91 Взаимодействие сервлета и JSP. Example 03
2011 © EPAM

Взаимодействие сервлета и JSP. Example 032011 © EPAM Systems, RD Dep.

Systems, RD Dep.


Слайд 92 Взаимодействие сервлета и JSP
Вызов сервлетов из сервлетов

Чтобы Ваш

Взаимодействие сервлета и JSPВызов сервлетов из сервлетовЧтобы Ваш сервлет вызвал другой

сервлет вызвал другой сервлет, Вы можете:

либо дать сервлету сделать

HTTP запрос к другому сервлету.
либо сервлет может вызвать общедоступные методы другого сервлета напрямую, если оба сервлета запущены на одном и том же сервере.

Далее обсуждается второй из вышеуказанных пунктов. Чтобы вызвать общедоступный метод другого сервлета напрямую, Вам надо:


2011 © EPAM Systems, RD Dep.


Слайд 93 Взаимодействие сервлета и JSP
Надо:

Знать имя сервлета, метод которого

Взаимодействие сервлета и JSPНадо:Знать имя сервлета, метод которого Вы хотите вызвать.Получить

Вы хотите вызвать.
Получить доступ к объекту сервлета Servlet.
Вызвать

общедоступный метод.

Servlet getServlet(String name) класса ServletContext - возвращает доступ к объекту Servlet.

Как только Вы получили объект сервлета, Вы можете вызывать любой общедоступный метод этого сервлета.

2011 © EPAM Systems, RD Dep.


Слайд 94 Взаимодействие сервлета и JSP
Потоковый вывод

Сервлеты HTTP, как правило,

Взаимодействие сервлета и JSPПотоковый выводСервлеты HTTP, как правило, поддерживают обработку нескольких

поддерживают обработку нескольких клиентов одновременно. Если методы в вашем

сервлете, работающие на клиента, используют общие ресурсы, то Вы должны, согласовать управление, создав сервлет, который обслуживает только одного клиента в определенный момент времени.

Чтобы сервлет обслуживал только одного клиента в определенный момент времени, Вам надо реализовать интерфейс SingleThreadModel в добавление к наследованию класса HttpServlet .

2011 © EPAM Systems, RD Dep.


Слайд 95 СЕССИИ
2011 © EPAM Systems, RD Dep.

СЕССИИ2011 © EPAM Systems, RD Dep.

Слайд 96 Сессии
Отслеживание сессии

Для поддержки статуса между сериями запросов от

СессииОтслеживание сессииДля поддержки статуса между сериями запросов от одного и того

одного и того же пользователя используется механизм отслеживания сессии.
Сессии

используются разными сервлетами для доступа к одному клиенту. Это удобно для приложений построенных на нескольких сервлетах.

Чтобы использовать отслеживание сессии:
Создайте для пользователя сессию (объект HttpSession).
Сохраняйте или читайте данные из объекта HttpSession.
Уничтожьте сессию (необязательно).

2011 © EPAM Systems, RD Dep.


Слайд 97 Сессии
Получение сессии

HttpSession getSession(bool) объекта HttpServletRequest возвращает сессию пользователя.

СессииПолучение сессииHttpSession getSession(bool) объекта HttpServletRequest возвращает сессию пользователя. Когда метод вызывается

Когда метод вызывается со значением true, реализация при необходимости

создает сессию. Значение false возвратит null, если обнаружена сессия.
Чтобы правильно организовать сессию, Вам надо вызвать метод getSession прежде чем будет запущен выходной поток ответа.

2011 © EPAM Systems, RD Dep.

public class SessionServlet extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(true);
out = response.getWriter();
...
}}


Слайд 98 Сессии
Сохранение и получение данных сессии

Интерфейс HttpSession предоставляет методы,

СессииСохранение и получение данных сессииИнтерфейс HttpSession предоставляет методы, которые сохраняют и

которые сохраняют и возвращают данные:

Стандартные свойства сессии, такие как

идентификатор сессии.
Данные приложения, которые сохраняются в виде пары с именным ключом, когда имя это строка (String) и величина - объект Java.

2011 © EPAM Systems, RD Dep.


Слайд 99 Сессии
Чтобы сохранить значения переменной в текущем сеансе, используется

СессииЧтобы сохранить значения переменной в текущем сеансе, используется метод setAttribute() класса

метод setAttribute() класса HttpSession, прочесть – getAttribute(), удалить –

removeAttribute(). Список имен всех переменных, сохраненных в текущем сеансе, можно получить, используя метод Enumeration getAttributeNames(), работающий так же, как и соответствующий метод интерфейса HttpServletRequest.

Метод String getId() возвращает уникальный идентификатор, который получает каждый сеанс при создании. Метод isNew() возвращает false для уже существующего сеанса и true – для только что созданного.

2011 © EPAM Systems, RD Dep.


Слайд 100 Сессии
Завершение сессии

Сессия пользователя может быть завершена вручную или,

СессииЗавершение сессииСессия пользователя может быть завершена вручную или, в зависимости от

в зависимости от того, где запущен сервлет, автоматически. (Например,

Java Web Server автоматически завершает сессию, когда в течение определенного времени не происходит запросов, по умолчанию 30 минут.) Завершить сессию означает удаление объекта HttpSession и его величин из системы.

Чтобы вручную завершить сессию, используйте метод сессии invalidate.

Этот метод выдает InvalidStateException если вызывается для сессии, которая была завершена. Перед тем как завершить сессию, контейнер освободит все объекты, связанные с ней. Метод valueUnbound() будет вызван для всех сессионных атрибутов, которые реализуют интерфейс HttpSessionBindingListener.

2011 © EPAM Systems, RD Dep.


Слайд 101 Сессии
Превышение времени ожидания сессии

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

СессииПревышение времени ожидания сессииДескриптор размещения можно использовать для установки промежутка времени

установки промежутка времени для сессии. Если клиент не активизировался

в течение этого промежутка времени, сессия автоматически завершается.

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

2011 © EPAM Systems, RD Dep.


Слайд 102 Сессии
Следующая настройка в дескрипторе размещения приводит к установке

СессииСледующая настройка в дескрипторе размещения приводит к установке времени ожидания сессии

времени ожидания сессии на 10 минут:


10


Вы также можете

программно установить интервал времени ожидания сессии. Следующий метод, предоставляемый интерфейсом HttpSession, может использоваться для установки времени ожидания для текущей сессии (в секундах):
public void setMaxInactiveInterval(int seconds)

Если этому методу придано отрицательное значение, время ожидания сессии никогда не истечет.

2011 © EPAM Systems, RD Dep.


Слайд 103 Сессии
Перезапись URL

Сессии становятся доступными при помощи обмена уникальными

СессииПерезапись URLСессии становятся доступными при помощи обмена уникальными метками, которые называются

метками, которые называются идентификаторами сессии (session id), между клиентом,

осуществляющим запрос, и сервером. Если в браузере клиента разрешены cookies, идентификатор сессии будет внесен в файл cookie, отправляемый с HTTP-запросом/ответом.

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

2011 © EPAM Systems, RD Dep.


Слайд 104 Сессии
Методы HttpServletResponse, которые поддерживают перезапись URL:
public String encodeURL(String

СессииМетоды HttpServletResponse, которые поддерживают перезапись URL:public String encodeURL(String url)public String encodeRedirectURL(String

url)
public String encodeRedirectURL(String url)

Метод encodeURL() кодирует заданный URL, добавляя

в него идентификатор сессии, или, если кодирование не требуется, возвращает исходный URL.

Метод encodeRedirectURL() кодирует заданный URL для использования в методе sendRedirect() HttpServletResponse. Этот метод тоже возвращает неизмененный URL, если кодирование не требуется.

Перезапись URL должна использоваться так, чтобы обеспечивалась поддержка клиентов, которые не поддерживают или не принимают cookies, чтобы не допустить потери сессионной информации.

2011 © EPAM Systems, RD Dep.


Слайд 105 Сессии. Example 04
2011 © EPAM Systems, RD Dep.
package

Сессии. Example 042011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import

_java._ee._01.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public

class SessionDemo extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException { performTask(request, response); }
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException { performTask(request, response); }
private void performTask(HttpServletRequest req, HttpServletResponse resp)
throws ServletException {
SessionLogic.printToBrowser(resp, req);
}
}

Слайд 106 Сессии. Example 04
2011 © EPAM Systems, RD Dep.
class

Сессии. Example 042011 © EPAM Systems, RD Dep.class SessionLogic {	public static

SessionLogic {
public static void printToBrowser(HttpServletResponse resp,
HttpServletRequest req) {
try {
HttpSession

session = req.getSession(true);
PrintWriter out = resp.getWriter();
StringBuffer url = req.getRequestURL();
session.setAttribute("URL", url);
out.write("My session counter: ");
out.write(String.valueOf(prepareSessionCounter(session)));
out.write("
Creation Time : "
+ new Date(session.getCreationTime()));
out.write("
Time of last access : "
+ new Date(session.getLastAccessedTime()));
out.write("
session ID : " + session.getId());
out.write("
Your URL: " + url);
int timeLive = 60 * 30;
session.setMaxInactiveInterval(timeLive);
out.write("
Set max inactive interval : " + timeLive + "sec");
out.flush();out.close(); }

Слайд 107 Сессии. Example 04
2011 © EPAM Systems, RD Dep.
catch

Сессии. Example 042011 © EPAM Systems, RD Dep.	catch (IOException e) {			e.printStackTrace();			throw

(IOException e) {
e.printStackTrace();
throw new RuntimeException("Failed : " + e);
}
}
private

static int prepareSessionCounter(HttpSession session) {
Integer counter = (Integer) session.getAttribute("counter");
if (counter == null) {
session.setAttribute("counter", 1);
return 1;
} else {
counter++;
session.setAttribute("counter", counter);
return counter;
}
}
}

Слайд 108 Сессии. Example 04
2011 © EPAM Systems, RD Dep.

Сессии. Example 042011 © EPAM Systems, RD Dep.

Слайд 109 COOKIES
2011 © EPAM Systems, RD Dep.

COOKIES2011 © EPAM Systems, RD Dep.

Слайд 110 Cookies
Использование Cookie

Закладки (сookies) используются для хранения части информации

CookiesИспользование CookieЗакладки (сookies) используются для хранения части информации на машине клиента.

на машине клиента.
Закладки передаются клиенту в коде ответа

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



2011 © EPAM Systems, RD Dep.


Слайд 111 Cookies
Сервер может обеспечить одну или более закладок для

CookiesСервер может обеспечить одну или более закладок для клиента. Предполагается, что

клиента. Предполагается, что программа клиента, как web браузер, должна

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

Закладки, которые клиент сохранил для сервера, возвращаются клиентом только этому серверу. Сервер может включать множество сервлетов. Потому как закладки возвращаются серверу, сервлеты работающие на этом сервере совместно используют эти закладки.



2011 © EPAM Systems, RD Dep.


Слайд 112 Cookies
Использование Cookie

Чтобы отправить закладку:
Создайте объект Cookie
Установите любые атрибуты

CookiesИспользование CookieЧтобы отправить закладку:Создайте объект CookieУстановите любые атрибуты Отправьте закладку Чтобы


Отправьте закладку

Чтобы извлечь информацию из закладки:
Запросите все закладки

из пользовательского запроса
Найдите закладку или закладки с именем, которое Вас интересует, используя стандартные программные операции
Получите значения закладок, которые были найдены

2011 © EPAM Systems, RD Dep.


Слайд 113 Cookies
Создание Cookie

Конструктор класса javax.servlet.http.Cookie создает закладу с начальным

CookiesСоздание CookieКонструктор класса javax.servlet.http.Cookie создает закладу с начальным именем и значением.

именем и значением. Вы можете изменить значение закладки позже,

вызвав метод setValue.
Если сервлет возвращает ответ пользователю, используя Writer, создавайте закладку, прежде чем обратитесь к Writer.


2011 © EPAM Systems, RD Dep.

public void doGet (HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
String bookId = request.getParameter("Buy");
if (bookId != null) {
Cookie getBook = new Cookie("Buy", bookId);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("" + " Book Catalog <br> " + ...);
...
}


Слайд 114 Cookies
Установка атрибутов закладки


2011 © EPAM Systems, RD Dep.
public

CookiesУстановка атрибутов закладки2011 © EPAM Systems, RD Dep.public void doGet (HttpServletRequest

void doGet (HttpServletRequest request, HttpServletResponse
response)
throws ServletException,

IOException {
String bookId = request.getParameter("Remove");
if (bookId != null) {
thisCookie.setMaxAge(0);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(" " + "Your Shopping <br> Cart" + ...);
...
}

Слайд 115 Cookies
Отправка закладки

Закладки отправляются как заголовки ответа клиенту; они

CookiesОтправка закладкиЗакладки отправляются как заголовки ответа клиенту; они добавляются с помощью

добавляются с помощью метода addCookie класса HttpServletResponse.

Закладки отправляются

как заголовки ответа клиенту; они добавляются с помощью метода addCookie класса HttpServletResponse. если Вы используете Writer для отправки закладки пользователю, Вы должны использовать метод addCookie, прежде чем вызвать метод getWriter класса HttpServletResponse.


2011 © EPAM Systems, RD Dep.


Слайд 116 Cookies
2011 © EPAM Systems, RD Dep.
public void doGet

Cookies2011 © EPAM Systems, RD Dep.public void doGet (HttpServletRequest request, HttpServletResponse

(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {

if (values != null) {
bookId = values[0];
Cookie getBook = new Cookie("Buy", bookId);
getBook.setComment("User has indicated a desire " +
"to buy this book from the bookstore.");
response.addCookie(getBook);
}
...
}


Слайд 117 Cookies
Запрашивание закладок

Клиенты возвращают закладки как поля, добавленные в

CookiesЗапрашивание закладокКлиенты возвращают закладки как поля, добавленные в HTTP заголовок запроса.

HTTP заголовок запроса.
Cookie[] getCookies() из класса HttpServletRequest –

возвращает все закладки ассоциированные к данному хосту.



2011 © EPAM Systems, RD Dep.

public void doGet (HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
String bookId = request.getParameter("Remove");
if (bookId != null) {
Cookie[] cookies = request.getCookies();
thisCookie.setMaxAge(0);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(" " + "Your Shopping Cart" + ...);
...
}


Слайд 118 Cookies
Получение значения закладки

String getValue() - возвращает значение закладки.

CookiesПолучение значения закладкиString getValue() - возвращает значение закладки. 2011 © EPAM





2011 © EPAM Systems, RD Dep.
public void doGet (HttpServletRequest

request, HttpServletResponse
response)
throws ServletException, IOException {
String bookId = request.getParameter("Remove");
if (bookId != null) {
Cookie[] cookies = request.getCookies();
for(i=0; i thisCookie.getValue().equals(bookId); i++) {
thisCookie.setMaxAge(0);
}
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(" " + "Your Shopping Cart" + ...);
...
}


Слайд 119 Cookies. Example 05
2011 © EPAM Systems, RD Dep.
package

Cookies. Example 052011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import

_java._ee._01.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class

CookieDemo extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
perfomTask(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
perfomTask(request, response);
}
protected void perfomTask(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
CookieLogic.seCookie(request, response);
CookieLogic.doLogic(request, response);
}}

Слайд 120 Cookies. Example 05
2011 © EPAM Systems, RD Dep.
class

Cookies. Example 052011 © EPAM Systems, RD Dep.class CookieLogic {private static

CookieLogic {
private static int index = 0;
public static void

doLogic(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
Cookie[] cookies = request.getCookies();
if (cookies != null) {
out.print("Number cookies :" + cookies.length + "
");
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
out.print("Secure :" + c.getSecure() + "
");
out.print(c.getName() + " = " + c.getValue() + "
");
}
}
out.write("My Cookie counter: ");
out.write(String.valueOf(prepareCookieCounter(request, response)));
out.print("
");
out.close();
}


Слайд 121 Cookies. Example 05
2011 © EPAM Systems, RD Dep.
public

Cookies. Example 052011 © EPAM Systems, RD Dep.	public static void seCookie(HttpServletRequest

static void seCookie(HttpServletRequest request,
HttpServletResponse response) {
String key = "key"

+ index;
String value = "value" + index;
Cookie c = new Cookie(key, value);
c.setMaxAge(3600);
response.addCookie(c);
index++;
}


Слайд 122 Cookies. Example 05
2011 © EPAM Systems, RD Dep.
private

Cookies. Example 052011 © EPAM Systems, RD Dep.private static int prepareCookieCounter(HttpServletRequest

static int prepareCookieCounter(HttpServletRequest request,
HttpServletResponse response) {
Cookie[] cookies = request.getCookies();
Cookie

counterCookie;
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if ("counter".equals(cookies[i].getName())) {
String counterStr = cookies[i].getValue();
int counterValue;
try {
counterValue = Integer.parseInt(counterStr);
} catch (NumberFormatException e) {
counterValue = 0;
}
counterValue++;
counterCookie = new Cookie("counter", String.valueOf(counterValue));
counterCookie.setMaxAge(3600);
response.addCookie(counterCookie);
return counterValue;
}}
}
counterCookie = new Cookie("counter", "1");
counterCookie.setMaxAge(3600);
response.addCookie(counterCookie);
return 1;
}}

Слайд 123 Cookies. Example 05
2011 © EPAM Systems, RD Dep.

Cookies. Example 052011 © EPAM Systems, RD Dep.

Слайд 124 СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ РЕСУРСОВ
2011 © EPAM Systems, RD Dep.

СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ РЕСУРСОВ2011 © EPAM Systems, RD Dep.

Слайд 125 Совместное использование ресурсов
Сервлеты выполняемые на одном сервере иногда

Совместное использование ресурсовСервлеты выполняемые на одном сервере иногда совместно используют ресурсы.

совместно используют ресурсы.

Это справедливо для сервлетов, которые являются

компонентами одного приложения.

Сервлеты исполняемые на одном сервере могут совместно использовать ресурсы с помощью методов интерфейса ServletContext для манипулирования атрибутами: setAttribute, getAttribute, и removeAttribute.

Все сервлеты в контексте совместно используют атрибуты, находящиеся в интерфейсе ServletContext.

Чтобы избежать столкновений имен атрибутов, имена их используют те же правила что и имена пакетов.

2011 © EPAM Systems, RD Dep.


Слайд 126 Совместное использование ресурсов
Пример названия атрибута

examples.bookstore.database.BookDBFrontEnd.

Имена, начинающиеся

Совместное использование ресурсовПример названия атрибута examples.bookstore.database.BookDBFrontEnd. Имена, начинающиеся с префиксов java.*,

с префиксов java.*, javax.*, и sun.* зарезервированы.


2011 © EPAM

Systems, RD Dep.

Слайд 127 Совместное использование ресурсов
Интерфейс ServletContext

Интерфейс ServletContext используется для взаимодействия

Совместное использование ресурсовИнтерфейс ServletContextИнтерфейс ServletContext используется для взаимодействия с контейнером сервлетов.

с контейнером сервлетов.

Сервлеты исполняемые на одном сервере могут

совместно использовать ресурсы с помощью методов интерфейса ServletContext для манипулирования атрибутами:

void setAttribute(String name, Object object) – добавляет атрибут и его значение в контекст; обычно это производится во время инициализации.

2011 © EPAM Systems, RD Dep.


Слайд 128 Совместное использование ресурсов
Когда у Вас несколько сервлетов используют

Совместное использование ресурсовКогда у Вас несколько сервлетов используют атрибут, каждый должен

атрибут, каждый должен проинициализировать этот атрибут. А раз так,

каждый сервлет должен проверить значение атрибута, и устанавливать его только в том случае если предыдущий сервлет не сделал этого.

2011 © EPAM Systems, RD Dep.


Слайд 129 Совместное использование ресурсов
ServletContext
Object getAttribute(String name) – возвращает совместный

Совместное использование ресурсовServletContextObject getAttribute(String name) – возвращает совместный ресурс.Enumeration getAttributeNames() –

ресурс.
Enumeration getAttributeNames() – получает список имен атрибутов;
void removeAttribute(String name)

– удаляет совместный ресурс.
ServletContext getContext(String uripath) – позволяет получить доступ к контексту других ресурсов данного контейнера сервлетов;
String getServletContextName() – возвращает имя сервлета, которому принадлежит данный объект интерфейса ServletContext.
String getCharacterEncoding() – определение символьной кодировки запроса.


2011 © EPAM Systems, RD Dep.


Слайд 130 Совместное использование ресурсов
Интерфейс ServletConfig

Представляет собой конфигурацию сервлета, используется

Совместное использование ресурсовИнтерфейс ServletConfigПредставляет собой конфигурацию сервлета, используется в основном на

в основном на этапе инициализации. Все параметры для инициализации

устанавливаются в web.xml

Некоторые методы:
String getServletName() – определение имени сервлета;
Enumeration getInitParameterNames() – определение имен параметров инициализации сервлета из дескрипторного файда web.xml;
String getInitParameter(String name) – определение значения конкретного параметра по его имени.


2011 © EPAM Systems, RD Dep.


Слайд 131 Совместное использование ресурсов. Example 06
2011 © EPAM Systems,

Совместное использование ресурсов. Example 062011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;+import

RD Dep.
package _java._ee._01.servlet;
+import java.io.IOException;..
public class Servlet1 extends HttpServlet {

private ServletConfig config;

public void init (ServletConfig config) throws ServletException
{
this.config = config;
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String param = (String) config.getServletContext().getAttribute("myparam");
if (param == null){
config.getServletContext().setAttribute("myparam", "servlet1");
response.getWriter().println("myparam = servlet1 set first
");
}
response.getWriter().println("From Servlet1 - " + config.getServletContext().getAttribute("myparam"));
}
}

Слайд 132 Совместное использование ресурсов. Example 06
2011 © EPAM Systems,

Совместное использование ресурсов. Example 062011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;+import

RD Dep.
package _java._ee._01.servlet;
+import java.io.IOException;..
public class Servlet2 extends HttpServlet {

private ServletConfig config;

public void init (ServletConfig config) throws ServletException
{
this.config = config;
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
String param = (String) config.getServletContext().getAttribute("myparam");
if (param == null){
config.getServletContext().setAttribute("myparam", "servlet2");
response.getWriter().println("myparam = servlet2 set first
");
}
response.getWriter().println("From Servlet2 - " + config.getServletContext().getAttribute("myparam"));
}
}

Слайд 133 Совместное использование ресурсов. Example 06
2011 © EPAM Systems,

Совместное использование ресурсов. Example 062011 © EPAM Systems, RD Dep.

RD Dep.


Слайд 134 СОБЫТИЯ
2011 © EPAM Systems, RD Dep.

СОБЫТИЯ2011 © EPAM Systems, RD Dep.

Слайд 135 События
Существует несколько интерфейсов, которые позволяют следить за событиями,

СобытияСуществует несколько интерфейсов, которые позволяют следить за событиями, связанными с сеансом,

связанными с сеансом, контекстом и запросом сервлета, генерируемыми во

время жизненного цикла Web-приложения:
javax.servlet.ServletContextListener – обрабатывает события создания/удаления контекста сервлета;
javax.servlet.http.HttpSessionListener – обрабатывает события создания/удаления HTTP-сессии;
javax.servlet.ServletContextAttributeListener – обрабатывает события создания/удаления/модификации атрибутов контекста сервлета;
javax.servlet.http.HttpSessionAttributeListener – обрабатывает события создания/удаления/модификации атрибутов HTTP-сессии;
javax.servlet.http.HttpSessionBindingListener – обраба­тывает события привязывания/разъединения объекта с атрибутом HTTP-сессии;
javax.servlet.http.HttpSessionActivationListener – обрабаты­вает события связанные с активацией/дезактивацией HTTP-сессии;
javax.servlet.ServletRequestListener – обрабатывает события создания/удаления запроса;
javax.servlet.ServletRequestAttributeListener – обрабаты­вает события создания/удаления/модификации атрибутов запроса сервлета.

2011 © EPAM Systems, RD Dep.


Слайд 136 События
2011 © EPAM Systems, RD Dep.

События2011 © EPAM Systems, RD Dep.

Слайд 137 События
2011 © EPAM Systems, RD Dep.

События2011 © EPAM Systems, RD Dep.

Слайд 138 События. Example 07
2011 © EPAM Systems, RD Dep.
package

События. Example 072011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import

_java._ee._01.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public

class ListenerExample extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
response.setContentType("text/html");
HttpSession session = request.getSession(true);
PrintWriter out = response.getWriter();
StringBuffer url = request.getRequestURL();
session.setAttribute("URL", url);
out.write(String.valueOf(prepareSessionCounter(session)));
out.write("
Creation Time : “
+ new Date(session.getCreationTime()));
out.write("
Time of last access : “
+ new Date(session.getLastAccessedTime()));


Слайд 139 События. Example 07
2011 © EPAM Systems, RD Dep.
out.write("

События. Example 072011 © EPAM Systems, RD Dep.	out.write(

session ID : " + session.getId());
out.write("
Your URL: "

+ url);
int timeLive = 60 * 30;
session.setMaxInactiveInterval(timeLive);
out.write("
Set max inactive interval : " + timeLive + "sec");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Failed : " + e);
}
}
private static int prepareSessionCounter(HttpSession session) {
Integer counter = (Integer) session.getAttribute("counter");
if (counter == null) {
session.setAttribute("counter", 1);
return 1;
} else {
counter++;
session.setAttribute("counter", counter);
return counter;
}
}
}

Слайд 140 События. Example 07
2011 © EPAM Systems, RD Dep.
package

События. Example 072011 © EPAM Systems, RD Dep.package _java._ee._01._listener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;public

_java._ee._01._listener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

public class MyAttributeListener implements HttpSessionAttributeListener {
private

String counterAttr = "counter";

public void attributeAdded(HttpSessionBindingEvent ev) {
String currentAttributeName = ev.getName();
String urlAttr = "URL";
if (currentAttributeName.equals(counterAttr)) {
Integer currentValueInt = (Integer) ev.getValue();
System.out.println("Counter added in Session=“
+ currentValueInt);
} else if (currentAttributeName.equals(urlAttr)) {
StringBuffer currentValueStr = (StringBuffer) ev.getValue();
System.out.println("URL added in Session =“
+ currentValueStr);
} else
System.out.println("new attribute added");
}


Слайд 141 События. Example 07
2011 © EPAM Systems, RD Dep.
public

События. Example 072011 © EPAM Systems, RD Dep.public void attributeRemoved(HttpSessionBindingEvent ev)

void attributeRemoved(HttpSessionBindingEvent ev) {
}


public void attributeReplaced(HttpSessionBindingEvent ev)

{
String currentAttributeName = ev.getName();
if (currentAttributeName.equals(counterAttr)) {
Integer currentValueInt = (Integer) ev.getValue();
System.out.println("counter changed in Session = “
+ currentValueInt);
}
}
}

Слайд 142 События. Example 07
2011 © EPAM Systems, RD Dep.
package

События. Example 072011 © EPAM Systems, RD Dep.package _java._ee._01._listener;import javax.servlet.ServletRequest;import javax.servlet.ServletRequestEvent;import

_java._ee._01._listener;

import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;

public class MyRequestListener implements ServletRequestListener

{
private static int reqCount;

public void requestInitialized(ServletRequestEvent e) {
ServletRequest req = e.getServletRequest();
String name = "";
name = ((HttpServletRequest) req).getRequestURI();
System.out.println("Request for " + name + "; Count=" + ++reqCount);
}

public void requestDestroyed(ServletRequestEvent e) {
System.out.println("Request deleted");
}
}


Слайд 143 События. Example 07
2011 © EPAM Systems, RD Dep.

События. Example 072011 © EPAM Systems, RD Dep. Java_EE_01_6 …

version="1.0" encoding="UTF-8"?>

Java_EE_01_6




_java._ee._01._listener.MyAttributeListener


_java._ee._01._listener.MyRequestListener



ListenerExample
ListenerExample
_java._ee._01.servlet.ListenerExample


ListenerExample
/ListenerExample



Слайд 144 События. Example 07
2011 © EPAM Systems, RD Dep.

События. Example 072011 © EPAM Systems, RD Dep.

Слайд 145 ФИЛЬТРЫ
2011 © EPAM Systems, RD Dep.

ФИЛЬТРЫ2011 © EPAM Systems, RD Dep.

Слайд 146 Фильтры
Реализация интерфейса Filter позволяет создать объект, который может

ФильтрыРеализация интерфейса Filter позволяет создать объект, который может трансформировать заголовок и

трансформировать заголовок и содержимое запроса клиента или ответа сервера.



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

Фильтр может взаимодействовать с разными типами ресурсов, в частности и с сервлетами, и с JSP-страницами.

2011 © EPAM Systems, RD Dep.


Слайд 147 Фильтры
Основные действия, которые может выполнить фильтр:

перехват инициализации сервлета

ФильтрыОсновные действия, которые может выполнить фильтр:перехват инициализации сервлета и определение содержания

и определение содержания запроса, прежде чем сервлет будет инициализирован;
блокировка

дальнейшего прохождения пары request-response;
изменение заголовка и данных запроса и ответа;
взаимодействие с внешними ресурсами;
построение цепочек фильтров;
фильтрация более одного сервлета.

2011 © EPAM Systems, RD Dep.


Слайд 148 Фильтры
При программировании фильтров следует обратить внимание на интерфейсы

ФильтрыПри программировании фильтров следует обратить внимание на интерфейсы Filter, FilterChain и

Filter, FilterChain и FilterConfig из пакета javax.servlet. Сам фильтр

определяется реализацией интерфейса Filter. Основным методом этого интерфейса является метод

void doFilter(ServletRequest req, ServletResponse res, FilterChain chain),

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

2011 © EPAM Systems, RD Dep.


Слайд 149 Фильтры
Кроме того, необходимо реализовать метод void init(FilterConfig config),

ФильтрыКроме того, необходимо реализовать метод void init(FilterConfig config), который принимает параметры

который принимает параметры инициализации и настраивает конфигурационный объект фильтра

FilterConfig. Метод destroy() вызывается при завершении работы фильтра, в тело которого помещаются команды освобождения используемых ресурсов.

Жизненный цикл фильтра начинается с однократного вызова метода init(), затем контейнер вызывает метод doFilter() столько раз, сколько запросов будет сделано непосредственно к данному фильтру. При отключении фильтра вызывается метод destroy().

2011 © EPAM Systems, RD Dep.


Слайд 150 Фильтры
С помощью метода doFilter() каждый фильтр получает текущий

ФильтрыС помощью метода doFilter() каждый фильтр получает текущий запрос и ответ,

запрос и ответ, а также список фильтров FilterChain, предназначенных

для обработки. Если в FilterChain не осталось необработанных фильтров, то продолжается передача запроса/ответа. Затем фильтр вызывает chain.doFilter() для передачи управления следующему фильтру.

2011 © EPAM Systems, RD Dep.


Слайд 151 Фильтры. Example 08
2011 © EPAM Systems, RD Dep.
package

Фильтры. Example 082011 © EPAM Systems, RD Dep.package _java._ee._01.servlet;import java.io.IOException;import java.io.PrintWriter;import

_java._ee._01.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FilterDemo

extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();

out.println( "Encoding response: " + response.getCharacterEncoding() );
out.println("
");
out.println("Encoding request: " + request.getCharacterEncoding());

out.println(request.getParameter("mytext"));
out.flush();
out.close();
}
}

Слайд 152 Фильтры. Example 08
2011 © EPAM Systems, RD Dep.
package

Фильтры. Example 082011 © EPAM Systems, RD Dep.package _java._ee._01._filter;import java.io.IOException;import javax.servlet.Filter;import

_java._ee._01._filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class

CharsetFilter implements Filter {
private String encoding;
public void init(FilterConfig config) throws ServletException {
encoding = config.getInitParameter("requestEncoding");
if (encoding == null)
encoding = "utf-8";
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain next) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
System.out.println("I am here");
next.doFilter(request, response);
}
public void destroy() {
}
}

Слайд 153 Фильтры. Example 08
2011 © EPAM Systems, RD Dep.
package

Фильтры. Example 082011 © EPAM Systems, RD Dep.package _java._ee._01._filter;import java.io.IOException;import javax.servlet.Filter;import

_java._ee._01._filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class

AnotherFilter implements Filter{
private String message;
public void init(FilterConfig config) throws ServletException
{
message = "Another Filter";
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
throws IOException, ServletException
{
response.getWriter().println(message);
System.out.println(message);
next.doFilter(request, response);
}
public void destroy(){}
}

Слайд 154 Фильтры. Example 08
2011 © EPAM Systems, RD Dep.

Фильтры. Example 082011 © EPAM Systems, RD Dep.	Java_EE_01_7…				FilterDemo		_java._ee._01.servlet.FilterDemo				FilterDemo		/FilterDemo				setCharFilter		_java._ee._01._filter.CharsetFilter				setCharFilter		/FilterDemo				setAnotherFilter		_java._ee._01._filter.AnotherFilter				setAnotherFilter		/FilterDemo

version="1.0" encoding="UTF-8"?>

Java_EE_01_7



FilterDemo
_java._ee._01.servlet.FilterDemo


FilterDemo
/FilterDemo


setCharFilter
_java._ee._01._filter.CharsetFilter


setCharFilter
/FilterDemo


setAnotherFilter
_java._ee._01._filter.AnotherFilter


setAnotherFilter
/FilterDemo



Слайд 155 Фильтры. Example 08
index.jsp
2011 © EPAM Systems, RD Dep.

Фильтры. Example 08index.jsp2011 © EPAM Systems, RD Dep.Insert title here

page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



Insert title here









Слайд 156 Фильтры. Example 08
2011 © EPAM Systems, RD Dep.

Фильтры. Example 082011 © EPAM Systems, RD Dep.

  • Имя файла: javaee01servlets.pptx
  • Количество просмотров: 113
  • Количество скачиваний: 0