72
Разработка серверного программного обеспечения Servlet. Создание динамического приложения.

Сервлеты

Embed Size (px)

Citation preview

Page 1: Сервлеты

Разработка серверного программного обеспечения

Servlet. Создание динамического приложения.

Page 2: Сервлеты

Серверное решение

Операционная система и/или пакеты программ

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

и/или содержащие в своём составе комплект программ для реализации

типичного набора сервисов.

Page 3: Сервлеты

Веб-приложение

Клиент-серверное приложение, в котором клиентом выступает браузер, а

сервером — веб-сервер. Логика веб-приложения распределена между сервером и клиентом, хранение

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

Page 4: Сервлеты

Веб-приложение

Одним из преимуществ такого подхода является тот факт, что

клиенты не зависят от конкретной операционной системы

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

платформенными сервисами.

Page 5: Сервлеты

Клиент

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

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

Page 6: Сервлеты

Сервер

Серверная часть содержит данные необходимые для выполнения запросов от

клиента, систему обработки входящих и исходящих запросов, бизнес-логику

приложения и другие сервисы.

Page 7: Сервлеты

Клиент

Page 8: Сервлеты

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

Page 9: Сервлеты

Ant

Apache Ant (англ. ant — муравей и акроним — «Another Neat Tool») — утилита для автоматизации процесса сборки программного продукта.

Page 10: Сервлеты

Maven

Apache Maven — фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах на языке POM (англ. Project Object Model), являющемся подмножеством XML.

Page 11: Сервлеты

Maven

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

Page 12: Сервлеты

Maven

Все задачи по обработке файлов, описанные в спецификации, Maven выполняет посредством их обработки последовательностью встроенных и внешних плагинов.Maven используется для построения и управления проектами, написанными на Java, C#, Ruby, Scala, и других языках

Page 13: Сервлеты

Основные преимущества Maven

Независимость от OS. Сборка проекта происходит в

любой операционной системе. Файл проекта один и тот же.

Page 14: Сервлеты

Основные преимущества Maven

Управление зависимостями.Редко какие проекты пишутся без

использования сторонних библиотек(зависимостей).

Maven позволяет управлять такими сложными зависимостями.

Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.

Page 15: Сервлеты

Основные преимущества Maven

Возможна сборка из командной строки.

Такое часто необходимо для автоматической сборки проекта на

сервере (Continuous Integration).

Page 16: Сервлеты

Основные преимущества Maven

Хорошая интеграция со средами разработки.

Основные среды разработки на java легко открывают проекты которые

собираются c помощью maven. При этом зачастую проект настраивать не нужно - он сразу готов к дальнейшей

разработке.

Page 17: Сервлеты

Основные преимущества Maven

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

Если с проектом работают в разных средах разработки, то maven удобный

способ хранения настроек. Настроечный файл среды разработки и

для сборки один и тот же - меньше дублирования данных и соответственно

ошибок.

Page 18: Сервлеты

Maven

mvn archetype:generate

Выполнив эту команду maven покажет список шаблонов(архетипов) для разных проектов. Выберите проект и его версию по умолчанию, нажав Enter, Enter далее команда спросит, groupId и artifactId введите данные:ru.apache_maventestproject1

Page 19: Сервлеты

Maven

Чтобы скомпилировать, нужно перейти в директорию проекта testproject1 и набрать в консоли mvn compile.

Page 20: Сервлеты

Maven

Если вы наберёте mvn package, в директории target будет создан jar файл testproject1-1.0-SNAPSHOT.jar

Page 21: Сервлеты

Tomcat

Tomcat (в старых версиях — Catalina) — контейнер сервлетов с

открытым исходным кодом, разрабатываемый Apache Software

Foundation.

Page 22: Сервлеты

Tomcat

Tomcat реализует спецификацию сервлетов и спецификацию

JavaServer Pages (JSP) и JavaServer Faces (JSF). Написан на языке Java.

Page 23: Сервлеты

Tomcat

Tomcat позволяет запускать веб-приложения. Cодержит ряд программ для самоконфигурирования.Tomcat используется в качестве самостоятельного веб-сервера, в качестве сервера контента в сочетании с веб-сервером Apache HTTP Server.

Page 24: Сервлеты

WildFly (JBoss)

WildFly (ранее JBoss Application Server или JBoss AS) — Java EE-сервер

приложений с открытым исходным кодом, разработанный одноимённой

компанией.

Page 25: Сервлеты

WildFly (JBoss)

Достаточно хорошая реализация принципов Java EE делает WildFly

конкурентом для аналогичных проприетарных программных решений,

таких, как WebSphere или WebLogic.

Page 26: Сервлеты

Spring

Spring Framework (или коротко Spring) — универсальный фреймворк с

открытым исходным кодом для Java-платформы.

Page 27: Сервлеты

Hibernate

Hibernate — библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (object-relational mapping — ORM).

Page 28: Сервлеты

Динамическое построение страниц

Page 29: Сервлеты

Servlet

Web-сервер при получении http запроса запускает Java-машину, которая в свою очередь выполняет сервлет (байткод), а сервлет формирует и отдаёт данные клиенту.

Page 30: Сервлеты

Servlet

Сервлеты – это модули, которые расширяют сервера, ориентированные на системы запрос-ответ, такие, как web-сервера Java. Например, сервлет может отвечать за получение данных в формате HTML и применение бизнес логики, используемой для обновления базы данных компании.

Page 31: Сервлеты

Servlet

Сервлет одновременно может обрабатывать большое количество

запросов, а так же может синхронизировать их.

Page 32: Сервлеты

Servlet

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

Page 33: Сервлеты

Задачи сервлета

Чтение явных данных, отправленных клиентским приложением (данные форм, полей)

Чтение неявных данных, отправленных клиентским приложением (к примеру, заголовки запросов)

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

Page 34: Сервлеты

Задачи сервлета

Отправка явных данных обратно в клиент (к примеру, HTML данные, которые будут отображены на странице).

Отправка неявных данных обратно в клиент (коды статусов, заголовки ответа).

Page 35: Сервлеты
Page 36: Сервлеты

Интерфейс сервлета

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

Page 37: Сервлеты

Servlet

Page 38: Сервлеты

Servlet

Page 39: Сервлеты

Взаимодействие с клиентом

Принимая запрос от клиента, сервлет получает два объекта:ServletRequest, который инкапсулирует связь клиента с сервером.ServletResponse, который инкапсулирует обратную связь сервлета с клиентом.ServletRequest и ServletResponse – это интерфейсы, определённые пакетом javax.servlet.

Page 40: Сервлеты

Интерфейс ServletRequest

Интерфейс ServletRequest даёт сервлету доступ к: именам параметров, переданных клиентом;протоколам (схемы), используемые клиентом;имена удалённого хоста, создавшего запрос и сервера который их получает.

Page 41: Сервлеты

Интерфейс ServletRequest

Входному потоку ServletInputStream.

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

Page 42: Сервлеты

Каркас сервлета

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

Page 43: Сервлеты

Каркас сервлета

Логика Данных: Обеспечивает доступ к необходимым базам данных, CORBA сервисам, EJBs или другим механизмам.Логика Вывода Результата: Показывает результат пользователю.

Page 44: Сервлеты

Жизненный цикл сервлета

Page 45: Сервлеты

Жизненный цикл сервлета

1.В случае отсутствия сервлета в контейнере.1. Класс сервлета загружается

контейнером.2. Контейнер создает экземпляр

класса сервлета.3. Контейнер вызывает метод init().

Page 46: Сервлеты

Жизненный цикл сервлета

Обслуживание клиентского запроса.Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса.

Page 47: Сервлеты

Жизненный цикл сервлета

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

Page 48: Сервлеты

web.xml

Java веб-приложения используют файл дескриптора развертывания для определения какие URL будут передаваться определенному сервлету, какие URL требуют аутентификации и др. Этот дескриптор развертывания называется web.xml и находится в WAR приложения в WEB-INF/ директории.

Page 49: Сервлеты

Дескриптор развертывания

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

Page 50: Сервлеты

Дескриптор развертывания

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <servlet> <servlet-name>main</servlet-name> <servlet-class>ua.step.MainServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>main</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping></web-app>

Page 51: Сервлеты

Каркас сервлетаБраузер1

Браузер2

Web - контейнер Сервлет

Page 52: Сервлеты

Servlet

Page 53: Сервлеты

javax.servlet.http.HttpServlet

•HttpServlet определяет сервлет для протокола HTTP. •HttpServlet определяет схему для Http сервлетов и делает написание сервлетов проще. •HttpServlet наследуется от GenericServlet и, поэтому наследует все свойства GenericServlet.

Page 54: Сервлеты

HttpServletRequest

При каждом вызове методы doGet и doPost класса HttpServlet принимают в качестве параметра объект, который реализует интерфейс HttpServletRequest. Web-сервер, создает объект HttpServletRequest и передает его методу service сервлета (который в свою очередь передает его методу doGet или doPost).

Page 55: Сервлеты

HttpServletRequest

Данный объект содержит запрос, поступивший от клиента.

String getParameter(String name) - Получение из запроса значения параметра. Наименование параметра определено значением name.

Page 56: Сервлеты

HttpServletRequest

Enumeration getParameterNames() - Получение из запроса имен всех параметров.

String[ ] getParameterValues(String name)Для параметра с несколькими значениями данный метод возвращает строковый массив.

Page 57: Сервлеты

HttpServletRequest

Cookie[ ] getCookies () - Получение массива объектов Cookie, сохраненных на компьютере клиента. Cookie могут быть использованы для уникальной идентификации клиента сервером.

Page 58: Сервлеты

Cookie

Cookie - это некие данные, хранящиеся в браузере клиента. С программной точки зрения, cookie - это просто несколько пар «название - значение», которые используются при обращении браузера к определенному серверу. Этот механизм позволяет на протяжении нескольких HTTP запросов сохранять на браузере ту или иную информацию, полученную от сервера.

Page 59: Сервлеты

HttpServletRequest

HttpSession getSession(boolean create) - Возвращает объект HttpSession текущего сеанса клиента. Если параметр create равен true и объект HttpSession не существует, то создается новый объект HttpSession.

Page 60: Сервлеты

Сеанс (сессия)

Сеанс (сессия) – соединение между клиентом и сервером, устанавливаемое на определенное время, за которое клиент может отправить на сервер сколько угодно запросов. Сеанс устанавливается непосредственно между клиентом и Web-сервером. Каждый клиент устанавливает с сервером свой собственный сеанс.

Page 61: Сервлеты

Сеанс (сессия)

Сеансы используются для обеспечения хранения данных во время нескольких запросов Web-страницы или на обработку информации, введенной в пользовательскую форму в результате нескольких HTTP-соединений.<session-config><session-timeout>30</session-timeout></session-config>

Page 62: Сервлеты

Сеанс (сессия)

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

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

Page 63: Сервлеты

Сеанс (сессия)

Завершить сеанс можно методом invalidate(). Сеанс уничтожает все связи с объектами, и данные, сохраненные в старом сеансе, будут потеряны для всех приложений.

Page 64: Сервлеты

HttpServletResponse

Объект HttpServletResponse описывает ответ клиенту.

void addCookie (Cookie cookie) - Метод используется для добавления Cookie в заголовок ответа клиенту Установленный максимальный возврат Cookie, а также разрешение клиентом хранения Cookie определяют, будут ли Cookies сохранены на клиенте и время их хранения.

Page 65: Сервлеты

HttpServletResponse

ServletOutputStream getOutputStream() - Получение бинарного потока вывода для отправления бинарных данных клиенту.

PrintWriter getWriter() - Получение символьного потока вывода для отправления текстовых данных клиенту.

Page 66: Сервлеты

HttpServletResponse

void setContentType(String type) - Определение MIME-типа ответа браузеру. MIME-тип помогает браузеру определить, как отображать данные. Например, MIME-тип "text/html" указывает, что ответ является HTML документом, поэтому браузер отображает HTML-страницу.

Page 67: Сервлеты

Сервлетные фильтры

Cервлетный фильтр, в соответствии со спецификацией, это Java-код, пригодный для повторного использования и позволяющий преобразовать содержание HTTP - запросов, HTTP - ответов и информацию, содержащуюся в заголовках HTML.

Page 68: Сервлеты

Сервлетные фильтры

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

Page 69: Сервлеты

Сервлетные фильтры

Сервлетный фильтр может быть сконфигурирован так, что он будет работать с одним сервлетом или группой сервлетов. Основой для формирования фильтров служит интерфейс javax.servlet.Filter

Page 70: Сервлеты

Использование дополнительных ресурсов

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

Page 71: Сервлеты

Использование дополнительных ресурсов

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

public RequestDispatcher getRequestDispatcher(String path);

path - это путь к ресурсу относительно контекста.

Page 72: Сервлеты

Использование дополнительных ресурсов

Пример:RequestDispatcher rd = request.getRequestDispatcher("Connect");

if (rd != null) rd.forward (request, response); else response.sendError(HttpServletResponse.SC_NO_CONTENT);