Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_Po_Tp.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.44 Mб
Скачать

1. Как устроен сервлет

Г лавным родителем всех сервлетов является интерфейс Servlet. Следующий уровень иерархии - абстрактный класс GenericServlet, частично реализующий методы Servlet и служащий базой для создания экзотических сервлетов. Скорее всего, вам никогда не доведется обращаться к нему. Разумнее будет воспользоваться в качестве базового абстрактным классом HttpServlet. Таким образом, главное, что нужно сделать для получения работоспособного сервлета, - это создать класс, наследующий HttpServlet. А уже потом следует заняться написанием логики работы. На рис. слева представлена иерархическая диаграмма, показывающая взаимосвязь классов в Java Servlet Development Kit. Пунктирной рамкой отмечено место, отведенное сервлету пользователя.

Базовая часть классов JSDK помещена в пакет javax.servlet. Однако класс HttpServlet и все, что с ним связано, располагаются на один уровень ниже в пакете javax.servlet.http. Это следует учитывать при разработке. Также не забывайте, что основные сервлетообразующие классы находятся в архивном файле jsdk.jar, поэтому этот архив должен упоминаться в переменной среды CLASSPATH или же должен быть задан вручную в параметре командной строки -classpath при запуске компилятора javac.

Последовательность работы сервлета проста: инициализация, обслуживание запросов и завершение существования. В каждой из этих фаз сервер, на котором выполняется сервлет, вызывает соответствующий метод интерфейса Servlet.

Первым вызывается метод init. Он дает сервлету возможность инициализировать важные данные и подготовиться для обработки запросов. Чаще всего в этом методе программисты помещают исходный текст, кэширующий данные фазы инициализации и промежуточные результаты различных вычислений.

Заметим, что сервлет не нуждается в отдельной загрузке в память каждый раз, когда происходит запрос на него. Будучи помещенным в память при обработке некоторого запроса ,и, обработав этот запрос , сервлет еще некоторое время (оно зависит от настроек Web-сервера) не выгружается из памяти, что помогает ему быстрее обрабатывать другие запросы на него. Только если в течении этого времени на сервлет не было сделано ни одного запроса, он выгружается из оперативной памяти.

После этого сервер находится в ожидании запросов от клиентов. Появившийся запрос немедленно преобразуется в вызов метода service сервлета, а все параметры запроса упаковываются в объект класса ServletRequest, который передается в качестве первого параметра метода service. Второй параметр метода - объект класса ServletResponse. Туда упаковываются выходные данные в процессе формирования ответа клиенту. Каждый новый запрос приводит к новому вызову метода service. В соответствии со спецификацией JSDK, метод service должен уметь обрабатывать сразу несколько запросов, т. е. быть синхронизирован для выполнения в многопоточных средах. Это особенно критично, когда в нем происходит обращение к разделяемым данным. Если же нужно избежать множественных запросов, сервлет должен реализовать интерфейс SingleThreadModel. Последний не содержит ни одного метода и служит лишь меткой, говорящей серверу об однопоточной природе сервлета. При обращении к такому сервлету каждый новый запрос будет стопориться в очереди и ожидать, пока не завершится обработка предыдущего запроса.

Завершив выполнение сервлета, сервер вызывает его метод destroy, предполагая, что в нем сервлет "почистит" занятые ранее ресурсы. Программируя этот метод, разработчик должен помнить, что в многопоточных средах сервер может вызвать метод destroy в любой момент, даже когда еще не завершился метод service. Поэтому на передний план выходит обязательная синхронизация доступа к разделяемым ресурсам.

Интерфейсом Servlet предусмотрена реализация еще двух методов: getServletConfig и getServletInfo. Первый возвращает объект типа ServletConfig, содержащий параметры конфигурации сервлета, а второй - строку, кратко описывающую назначение сервлета, и прочую полезную информацию.

Сервлет HttpServlet, отвечающий за обработку запросов HTTP, устроен несколько сложнее. Он уже имеет реализованный метод service, служащий диспетчером для других методов, каждый из которых обрабатывает методы доступа к ресурсам. В спецификации HTML определены следующие методы: GET, HEAD, POST, PUT, DELETE, OPTIONS и TRACE. Наиболее часто употребляются GET - универсальный запрос ресурса по его универсальному адресу (URL) - и POST, с помощью которого на сервер передаются данные, введенные пользователем в поля интерактивных Web-страниц. Полное описание протокола HTTP 1.1 можно найти в Internet по адресу http://info.internet.isi.edu/in-notes/rfc/files/ rfc2068.txt.

Возвратимся к методу service HttpServlet. В его задачу входит анализ полученного через запрос метода доступа к ресурсам и вызов соответствующего метода, имя которого сходно с названием метода доступа к ресурсам, но в начале имени добавляется префикс do: doGet, doHead, doPost, doPut, doDelete, doOptions и doTrace. От разработчика же требуется переопределить нужный метод (чаще всего это doGet), разместив в нем функциональную логику.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]