Сервлеты

Preview:

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Клиент

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

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

Сервер

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

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

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

Клиент

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

Ant

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

Maven

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

Maven

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

Maven

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

разработке.

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

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

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

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

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

ошибок.

Maven

mvn archetype:generate

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

Maven

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

Maven

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

Tomcat

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

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

Foundation.

Tomcat

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

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

Tomcat

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

WildFly (JBoss)

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

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

компанией.

WildFly (JBoss)

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

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

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

Spring

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

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

Hibernate

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

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

Servlet

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

Servlet

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

Servlet

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

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

Servlet

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

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

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

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

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

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

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

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

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

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

Servlet

Servlet

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

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

Интерфейс ServletRequest

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

Интерфейс ServletRequest

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

web.xml

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

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

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

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

<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>

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

Браузер2

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

Servlet

javax.servlet.http.HttpServlet

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

HttpServletRequest

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

HttpServletRequest

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

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

HttpServletRequest

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

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

HttpServletRequest

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

Cookie

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

HttpServletRequest

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

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

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

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

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

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

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

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

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

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

HttpServletResponse

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

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

HttpServletResponse

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

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

HttpServletResponse

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

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

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

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

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

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

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

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

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

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

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

public RequestDispatcher getRequestDispatcher(String path);

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

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

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

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