Уровень представления Протокол HTTP, веб-приложение, сервлеты,сеансы
Страница 2 Протокол HTTP HTTP «HyperText Transfer Protocol» протокол «прикладного уровня» передачи данных (изначально в виде гипертекстовых документов) Основа WEB Построен поверх TCP/IP Протокол запросов и ответов Без поддержки состояния
Страница 3 Язык HTML HTML (от англ. HyperText Markup Language «язык разметки гипертекста») стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц создаются при помощи языка HTML (или XHTML). Язык HTML интерпретируется браузером и отображается в виде документа, в удобной для человека форме.
Страница 4 Язык HTML - пример
Страница 5 Протокол HTTP - URL Каждый WEB-ресурс который может быть запрошен у WEB-сервера имеет уникальное имя URL Пример: Формат: протокол://имя_хоста[:порт]/идентификаторы
Страница 6 Протокол HTTP - ЗАГОЛОВКИ Раздел заголовка – специфическая информация по запросу/ответу. Строки в HTTP-сообщении, содержащие разделённую двоеточием пару параметр- значение.
Страница 7 Протокол HTTP - Запрос Включает в себя лексему метода (GET, POST, OPTION, HEAD…) за которой следует идентификатор ресурса GET – «Найти файл и вернуть содержимое» POST – «Отправить» Пример: GET /wiki/HTTP HTTP/1.1 Host: ru.wikipedia.org User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/ Firefox/3.0b5 Accept: text/html Connection: close
Страница 8 Протокол HTTP - запрос GET
Страница 9 Протокол HTTP - запрос POST
Страница 10 Как послать POST и GET запросы из HTML страницы
Страница 11 Протокол HTTP - ответ Включает код ответа и тело ответа 1xx – Запрос получен продолжается обработка 2xx – Успех, запрос получен, понят и воспринят 3xx – Перенаправление 4xx – Ошибка клиента 5xx – Ошибка сервера Пример: HTTP/ OK Server: nginx/ Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close (далее следует текст запрошенной страницы)
Страница 12 HTTP GET в действии
Страница 13 Когда WEB-сервера недостаточно
Страница 14 Обеспечение динамической генерации WEB-страниц Для динамической генерации страниц (CGI, PHP) используется дополнительное приложение
Страница 15 Сервлет Java-программа, выполняющейся на стороне сервера и расширяющей функциональные возможности сервера Взаимодействует с клиентами посредством принципа запрос-ответ Реализует Servlet интерфейс, который определяет методы жизненного цикла Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и классы для создания сервлетов.
Страница 16 Пример сервлета
Страница 17 Комментарии к примеру Класс сервлета расширяет класс javax.servlet.http.HttpServlet Думать о HttpServlet и его потомках как о у сервлетах у которых родным языком является HTTP Чаще всего используются один или 2 метода doGet() и doPost() В примере используется метод doGet – это значит что отсылаемая обратно информация будет отображена в браузере клиента
Страница 18 Шаблон проектирования «Модель-Представление-Контроллер» MVC (Model-View-Controller) модель данных приложения, пользовательский интерфейс и управляющая логика разделены так, что модификация одного из компонентов оказывает минимальное воздействие на другие компоненты
Страница 19 MVC Model-View-Controller Модель (Model). Модель предоставляет данные (обычно для View), а также реагирует на запросы (обычно от контролера ), изменяя свое состояние.
Страница 20 MVC Model-View-Controller Представление (View) Отвечает за отображение информации (пользовательский интерфейс).
Страница 21 MVC Model-View-Controller Поведение (Controller). Интерпретирует данные, введенные пользователем, и информирует модель и представление о необходимости соответствующей реакции.
Страница 22 Понятие контейнера сервлетов Серверная программа расширяющая возможности WEB-контейнера Обеспечивает жизненный цикл сервлетов в соответствии с правилами, определёнными в спецификациях При получении WEB-контейнером запроса для сервлета, он загружает его в JVM (если он еще не загружен) и выполняет его
Страница 23 Среда выполнения сервлетов (servlet container) Stand-alone (автономные): Tomcat Встроеная поддержка сервлетов. Плюс: минимальная конфигурация Минус: Отсутствие необходимой функциональности WEB сервера Add-on (добавочные): WebSphere Плагин к WEB-серверу Плюс: Нет проблемы автономного решения Минус: первоночалная конфигурация очень трудна Embeddable (Внедряемые): JavaServer Облегченная платформа размещения сервлетов которую можно внедрить в другое приложение
Страница 24 Каждый запрос выполняется в отдельном потоке
Страница 25 Жизненный цикл сервлета
Страница 26 Какие методы нужно переопределять HttpServlet содержит множество методов которые позволяю среагировать на определенный тип HTTP запроса В основном используются: doGet() – для обработки get запросов doPost() – для обработки post запросов service() – если нужен обработчик для обоих типов запросов (get и post)
Страница 27 Иллюстрация работы HttpServlet
Страница 28 Типичный набор действий сервлета [1] 1 Установить MIME type Устанавливаем в заголовке тип возвращаемого ответа (image/jpeg, audio/wav). В большинстве случаев будет text/html, означающий что ответом на запрос будет HTML документ Метод setContentType(String)
Страница 29 Типичный набор действий сервлета [2] 2 Установить значения полей заголовка HTTP Это полезно, например, чтобы запретить кэширование браузером и сервером страницы с ответом. Установки заголовка выполняются раньше, чем в выходной поток сервлета будет что-либо записано Метод setHeader(String, String)
Страница 30 Типичный набор действий сервлета [3] 3.1 Получить объект класса PrintWriter или OutputStream и записать данные тела ответа Здесь мы непосредственно осуществляем вывод в выходной поток сервлета тела HTTP запроса Методы getWriter() и getOutputStream()
Страница 31 Типичный набор действий сервлета [4] 3.2 Перенаправить запрос далее Два типа перенаправления: Передача управления другому ресурсу внутри сервера (использование RequestDispatcher) Дать команду браузеру клиента осуществить GET запрос к другому ресурсу WEB-сервера (Redirect)
Страница 32 Примеры перенаправления RequestDispatcher Redirect
Страница 33 Параметры сервлета - отправка параметра
Страница 34 Получение и обработка параметра
Страница 35 Отправка GET запроса с параметром содержащим пробелы Пример URL: или Нужно передать сервлету GET запрос с параметром: myParam = A B C Нужно передать сервлету GET запрос с параметром: myParam = A B C Проблема: Решение:
Страница 36 Объект REQUEST Все параметры от клиента принимаются в объекте request. Как только ответ был отправлен браузеру клиента – данные текущего Request теряются.
Страница 37 Типичная структура Web проекта
Страница 38 Типичная структура развертывания WEB-приложения на сервере TOMCAT
Страница 39 Дескриптор развертывания(ДР) WEB модуля Назначение: описывает, каким образом элементы модуля должны развертываться и использоваться в WEB-контейнере Название файла: web.xml Местонахождение: каталог WEB-INF Язык описания: XML
Страница 40 Пример ДР
Страница 41 Инициализационные параметры приложения и сервлетов
Страница 42 Пример иерархии ServletContext и ServletConfig
Страница 43 Хранение данных WEB-приложения Проблема: Во время работы WEB-приложения требуется сохранять различные данные на разных уровнях нашего приложения Например: Требуется дать возможность всем сервлетам получить значение параметра конфигурационного файла, или положить в запрос дополнительную информацию для другого сервлета
Страница 44 Области видимости атрибутов
Страница 45 API для работы с атрибутами Для этих целей используются объекты: context, request и session реализующие соответственно интерфейсы ServletContext, ServletRequest и HttpSession Все они имеют следующие методы: Object getAttribute(String name) void setAttribute(String name, Object value) void removeAttribute(String name) Enumeration getAttributeNames()
Страница 46 Слушатели событий приложения Обеспечивают возможность выполнить некоторые действия в ответ на определенные события - такие, как запуск и остановка WEB-приложения или создание новой сессии Java класс реализующий определенный интерфейс. Интерфейс сообщает контейнеру обработчиком какого события класс является.
Страница 47 Слушатель ServletContextListener Класс реализующий интерфейс ServletContextListener является обработчиком событий создания и уничтожения контекста приложения public void contextInitialized(ServletContextEvent) вызывается, когда веб-приложение готово к обработке public void contextDestroyed(ServletContextEvent) вызывается, когда веб-приложени готовится к закрытию
Страница 48 Пример реализации ServletContextListener
Страница 49 Объявление слушателя в ДР
Страница 50 Фильтры запросов Домашнее задание к следующей лекции Прочитать и разобраться: Что такое фильтр Область применения фильтров Как создать фильтр Описание фильтра в дескрипторе развертывания
Страница 51 Вопросы