2. Основные сведения
HTTP — широко распространённый протокол
передачи данных, изначально предназначенный
для передачи гипертекстовых документов.
Протокол HTTP предполагает использование
клиент-серверной структуры передачи данных.
Как правило, передача данных по протоколу
HTTP осуществляется через TCP/IP-соединения и
обычно использует TCP-порт 80.
2
3. Структура протокола
Стартовая строка — определяет тип сообщения.
Заголовки — характеризуют тело сообщения,
параметры передачи и прочие сведения.
Тело сообщения — непосредственно данные
сообщения. Обязательно должно отделяться от
заголовков пустой строкой.
3
5. Метод
Последовательность из любых символов, кроме
управляющих и разделителей, и определяет операцию,
которую нужно осуществить с указанным ресурсом.
GET: получить доступ к существующему ресурсу. В URL
перечислена вся необходимая информация, чтобы сервер
смог найти и вернуть в качестве ответа искомый ресурс.
POST: используется для создания нового ресурса. POST
запрос обычно содержит в себе всю нужную информацию
для создания нового ресурса.
PUT: обновить текущий ресурс. PUT запрос содержит
обновляемые данные.
DELETE: служит для удаления существующего ресурса.
5
7. Версия
7
Определяет, в соответствии с какой версией
стандарта HTTP составлен запрос. Указывается
как два числа, разделённых точкой.
8. Заголовки запроса
Строка в HTTP-сообщении, содержащая
разделённую двоеточием пару вида «параметр-
значение».
8
9. Группы заголовков
9
General Headers — должны включаться в любое
сообщение клиента и сервера.
Request Headers — используются только в
запросах клиента.
Response Headers — присутствуют только в
ответах сервера.
Entity Headers — сопровождают каждую сущность
сообщения.
10. Тело сообщения
10
Сами данные, которые передаются в запросе.
Все ответы содержат тело сообщения, возможно
нулевой длины, кроме ответов на запрос методом
HEAD и ответов с кодами статуса 1xx, 204 (No
Content), и 304 (Not Modified).
12. Коды состояния
Три цифры, которые определяют результат
совершения запроса.
1xx: Информационные сообщения
2xx: Сообщения об успехе
3xx: Перенаправление
4xx: Клиентские ошибки
5xx: Ошибки сервера
12
15. Кэширование
15
Под клиентским кэшированием понимают
способность браузеров сохранять копии файлов
(ответов сервера), чтобы не загружать их
повторно.
17. Советы
17
Используйте URL-адреса последовательно.
Используйте общую библиотеку изображений.
Храните в кэше изображения и страницы,
которые редко изменяются.
Дайте кэшу возможность распознавать страницы,
которые обновляются регулярно.
19. Основные понятия
19
Задача клиентской-части (программы-клиента)
состоит во взаимодействии с пользователем,
передаче пользовательского запроса серверу,
получение запроса от серверной части
(программы-сервера) и представление его в
удобном для пользователя виде.
Программа-сервер же обрабатывает запросы
клиента и выдает ответы.
20. Разновидности архитектуры клиент-сервер
20
«Архитектура с толстым клиентом» - логика
представления данных и бизнес-логика
размещаются на клиенте, логикой хранения и
накопления данных на сервере.
«Архитектура с тонким клиентом» - программа-
клиент реализует лишь графический интерфейс
пользователя и передает/принимает запросы, а
вся бизнес-логика выполняется сервером.
21. Взаимодействие клиента и сервера
21
Для идентификации машины в сети используется
протокол IP и 4х байтный уникальный
идентификатор машины - ip адрес. Далее, для
идентификации приложения, TCP добавляет
понятие порта.
В TCP пакетах указываются порт источника
(клиента) и порт назначения (сервера).
22. Клиент-серверные технологии
22
Web-серверы - представляют доступ к гипертекстовым
документам по протоколу HTTP, поддерживают
расширенные возможности, в частности работу с
бинарными файлами (изображения, мультимедиа и т.п.).
Серверы приложений - для централизованного
решения прикладных задач в некоторой предметной
области.
Серверы баз данных - используются для обработки
пользовательских запросов на языке SQL. При этом СУБД
находится на сервере, к которому и подключаются
клиентские приложения.
Почтовые серверы - представляют услуги по отправке
и получению электронных почтовых сообщений.
24. Общие сведения
24
Сервлеты - это программы на Java, которые
работают на серверном компьютере. Их
выполнение инициируется Web-сервером или
сервером приложений по запросу клиента.
Пакеты javax.servlet и javax.servlet.http
обеспечивают интерфейсы и классы для
создания сервлетов.
25. Последовательность выполнения сервлета
25
Клиент посылает запрос Web-серверу или серверу
приложений.
Web-сервер или сервер приложений инициирует
выполнение сервлета, передавая ему необходимые
данные.
Сервлет выполняется (как правило, на виртуальной Java-
машине сервера), и по окончании работы передает
результаты (ответ на исходный запрос) вызвавшему его
серверу. Обмен данными между сервлетом и сервером
происходит при помощи специального Java-API (его
главные составляющие это классы HttpServletRequest для
передачи запроса и HttpServletResponse для ответа).
Сервер отдает полученные от сервлета данные клиенту.
26. Жизненный цикл сервлета
26
Загрузка класса сервлета — когда контейнер получает
запрос для сервлета, то происходит загрузка класса
сервлета в память и вызов конструктора без параметров.
Инициализация класса сервлета — после того как
класс загружен контейнер инициализирует
объект ServletContext для этого сервлета и внедряет его
через init() метод. Это и есть место где сервлет класс
преобразуется из обычного класса в сервлет.
Обработка запросов — после инициализации сервлет
готов к обработке запросов.
Удаление из Service — когда контейнер
останавливается или останавливается приложение, то
контейнер сервлетов уничтожает классы сервлетов путем
вызова destroy() метода.
27. ServletConfig и ServletContext
27
Интерфейс javax.servlet.ServletConfig используется для
передачи конфигурационной информации сервлету.
Интерфейс javax.servlet.ServletContext предоставляет доступ к
параметрам веб приложения сервлету.
ServletConfig является уникальным объектом для каждого
сервлета, в то время как ServletContext уникальный для всего
приложения.
ServletConfig используется для предоставления параметров
инициализации сервлету, а ServletContext для предоставления
параметров инициализации приложения для всех сервлетов.
Нет возможности устанавливать атрибуты в
объекте ServletConfig, в то время как можно установить
атрибуты в объекте ServletContext, которые будут доступны
другим сервлетам.
28. Отличия методов forward() и sendRedirect()
28
RequestDispatcher forward() используется для проброски
того же самого запроса к другому ресурсу, в то время как
ServletResponse sendRedirect() возвращает ответ клиенту с
status code 302 (redirect) с ссылкой для отправки запроса.
Посылается полностью новый запрос.
forward() обрабатывается внутри контейнера, а
sendRedirect() обрабатывается браузером.
Необходимо использовать forward() для организации
доступа внутри одного и того же приложения, т.к. он
быстрее sendRedirect().
В методе forward() браузер не знает о фактически
обрабатываемом ресурсе и URL в строке остается
прежним. В sendRedirect() методе URL адрес изменяется
на пробрасываемый ресурс.