d

Тема: Фреймворк Spring. Развертывание и настройка сервера с помощью Spring Boot. Создание простой RESTful веб-службы.

Цель практической работы:

  • ознакомиться с определением и предназначением фреймворка Spring;

  • изучить базовые модули фреймворка Spring;

  • установить требуемое программное обеспечение для работы с фреймворком Spring;

  • создать и сконфигурировать приложение с помощью проекта Spring Boot;

  • создать и разработать RESTful веб-службу, протестировать ее работу.

1. Клиент-серверная архитектура

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

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

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

Более подробно про клиент-серверное взаимодействие читайте здесь - http://bit.ly/2qmKbHk

В рамках данного курса рассматривается так называемая "трехзвенная архитектура" (рис. 1.1).

Компоненты трехзвенной архитектуры:

  • клиент - этот компонент отвечает за представление данных конечному пользователю;

  • выделенный сервер приложений - здесь содержится бизнес-логика приложения;

  • сервер БД - предоставляет запрашиваемые данные.

Сервер приложений (application server) - сервисная программа, которая обеспечивает доступ клиентов к прикладным программам, выполняющимся на сервере.

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

Информация о сервере приложений - http://bit.ly/2qt2Q4t. Отличия веб-сервера и сервера приложений - http://bit.ly/2qlUaNe

2. Технология Java Servlets

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

Среди предложенных решений по созданию динамических страниц, одним из первых была технология Java Servlets (сервлеты). В то время это была революционная технология, которая позволяла расширить возможности веб-серверов на основе модели запрос-ответ (request-response). Технология сервлетов позволяла веб-серверам обрабатывать HTTP-запросы и динамически генерировать веб-странички в зависимости от HTTP-запроса.

Несмотря на почтенный возраст, технология сервлетов претерпела серьезные изменения для того, чтобы соответствовать современной технологии разработки веб-приложений. На данный момент, технология сервлетов является наиболее часто используемой технологией для обработки HTTP запросов/откликов. Кроме того, сервлеты являются базой для почти всех Java-фреймворков, которые работают с HTTP протоколом (JSF, Struts, Spring MVC, BIRT и т.д.).

Сервлет (Servlet), по сути, является классом Java, который используется для расширения возможностей сервера, который предназначенных для размещения приложений. Сервлеты могут отвечать на запросы и генерировать ответы. Базовым классом для всех сервлетов является класс javax.servlet.GenericServlet. Этот класс определяет обобщенный, независимый от протокола сервлет.

Безусловно, наиболее распространенный тип сервлета – HTTP-сервлет. Этот тип сервлета используется в обработке HTTP-запросов и генерировании HTTP-откликов. HTTP-сервлет представляет собой класс, который расширяет класс javax.servlet.HttpServlet, являющийся подклассом базового класса GenericServlet.

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

Подробнее про сервлеты и контейнеры сервлетов - http://bit.ly/2Q9GAaP

Схема работы технологии сервлетов следующая:

  1. Клиент (например, веб-браузер) передает HTTP-запрос веб-серверу. В случае, если от веб-сервера требуется предоставить статический файл или какой-то ресурс (например, изображение), то он просто возвращает требуемый статический файл или ресурс;

  2. Если веб-сервер не может самостоятельно обработать HTTP-запрос (например, пользователь передает какие-то данные либо требуется предоставить динамическую страницу и т.д), веб-сервер передает этот запрос web-контейнеру (его еще называют servlet-контейнером);

  3. Контейнер определяет – какой сервлет может выполнить этот запрос, создает объекты классов HttpServletRequest и HttpServletResponse, создает thread, создает объект класса сервлета и передает ему объекты классов HttpServletRequest и HttpServletResponse;

  4. Контейнер вызывает метод сервлета service(), который вызывает соответствующий HTTP-запросу метод (например, если в запросе указан метод GET, то будет вызван метод doGet(), подробнее этот вопрос будет разбираться далее), которому, в качестве аргументов, передает объекты классов HttpServletRequest и HttpServletResponse;

  5. Соответствующий метод (например, метод doGet()) возвращает динамическую страницу внутри объекта класса HttpServletResponse, ссылку на который имеет контейнер;

  6. После этого поток завершается, контейнер конвертирует объект класса HttpServletResponse в HTTP-отклик (HTTP response) и отдает его веб-серверу, который возвращает его клиенту.

Ссылки по теме:

3. Фреймворк Spring

Spring– свободно-распространяемый легковесный фреймворк, призванный упростить разработку корпоративных и веб-приложений (можно использовать и для любых других типов приложений) на языке Java (является альтернативной стеку JavaEE) (рисунок 1.1).

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

Дадим краткую характеристику некоторым модулям Spring:

  • Spring Core – ядро платформы, предоставляет базовые средства для создания приложений — управление компонентами (бинами, beans), внедрение зависимостей, MVC фреймворк, транзакции, базовый доступ к БД. В основном это низкоуровневые компоненты и абстракции. По сути, неявно используется всеми другими компонентами;

  • Spring MVC – обеспечивает архитектуру паттерна Model-View-Controller при помощи слабо связанных готовых компонентов для разработки веб-приложений;

  • Spring Data – обеспечивает доступ к данным: реляционные и нереляционные БД, KV хранилища и т.п.;

  • Spring Cloud – используется для микросервисной архитектуры;

  • Spring Security – авторизация и аутентификация, доступ к данным, методам и т.п. OAuth, LDAP, и различные провайдеры.

Spring Boot

Проект Spring Boot – решение, которое позволяет вам легко создавать полноценные приложения Spring, про которые можно сказать «просто запусти».

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

Особенности Spring Boot:

  • создание полноценных Spring-приложений;

  • встроенный сервлет-контейнер (Tomcat или Jetty);

  • обеспечивает начальные pom-файлы для упрощения конфигурации Maven;

  • используется автоконфигурация, где это возможно;

  • используется принцип «convention over configuration». Для большинства конфигураций не нужно ничего настраивать.

Изучение фреймворка Spring лучше всего начать с установки требуемого программного обеспечения и разработки тестового приложения с помощью Spring Boot.

Веб-сервисы

Last updated