Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 409

Ильдар Шаукатович Хабибуллин

http://<servlethost>:8000/InfoAppl/servlet/InfoServlet

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

Замечание по отладке

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

Многие серверы приложений, в их числе и последние версии Tomcat, не запускают сервлеты по отдельности, а только в составе Web-приложения. Обычно утилиты установки создают необходимую для Web-приложения структуру каталогов, но это можно сделать и вручную. Обращение к сервлету в составе Web-приложения выглядит проще:

http://<servlethost>:8000/InfoAppl/InfoServlet

Как видно из сигнатуры метода getServletContext (), контейнер получает доступ к еще одному объекту — объекту типа ServletContext, содержащему контекст сервлета.

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

Для всех сервлетов, работающих в рамках одного Web-приложения, создается один контекст. Контекст (context) сервлетов составляют каталоги и файлы, описывающие Web-приложение. Они содержат, в частности, код сервлета, изображения, чертежи, конфигурационный файл web.xml и его фрагменты, короче говоря, все относящееся к сервлету. При инициализации сервлета некоторые сведения о его контексте заносятся в объект типа ServletContext. Методы этого интерфейса позволяют сервлету получить сведения, содержащиеся в контексте.

Метод getServerInfo () позволяет получить имя и версию Java EE SDK, методы getMaj orVersion () и getMinorVersion () возвращают номер версии и модификации Servlet API.

В контексте можно определить начальные параметры, общие для всего Web-приложения. Они задаются при создании Web-приложения вручную или с помощью утилиты установки и хранятся в конфигурационном файле web.xml в элементах <context-param>. Их имена и значения можно получить методами

public Enumeration getInitParameterNames(); public String getInitParameter(String name);

Кроме строковых параметров в контексте допустимо определить атрибуты, значениями которых могут служить объекты любых типов Java. Их имена и значения можно получить методами

public Enumeration getAttributeNames(); public Object getAttribute(String name);

Установить и удалить атрибуты можно методами

public void setAttribute(String name, Object value); public void removeAttribute(String name);

Атрибуты — это удобный способ сохранять объекты, общие для всего Web-приложения, разделяемые всеми сервлетами, входящими в Web-приложение, и независимые от отдельных запросов.

Метод Service

Основная работа сервлета заключена в методе

public void service(ServletRequest req, ServletResponse resp);

К этому методу контейнер обращается автоматически после завершения метода init () и передает ему объект req типа ServletRequest, содержащий всю информацию, находящуюся в запросе клиента. Созданием и заполнением объекта req тоже занимается контейнер сервлетов. Кроме того, контейнер создает и передает методу service () ссылку на пустой объект resp типа ServletResponse.