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

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

Интерфейс HttpServletRequest

Несколько методов интерфейса HttpServletRequest позволяют разобрать HTTP-запрос.

Первая строка запроса, выполненного по протоколу HTTP, состоит из метода передачи данных, адреса URI и версии протокола. Строка завершается символами CRLF. Элементы строки разделяются пробелами, поэтому внутри каждого элемента первой строки запроса пробелов быть не должно.

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

GET HTTP/1.1

Запрос HTTP начинается с одного из слов get, post, head или другого слова, обозначающего метод передачи данных. Узнать HTTP-метод передачи позволяет метод интерфейса

public String getMethod();

Далее в запросе, после пробела, идет адрес URI, который разбирается несколькими методами:

□ public string getRequestURL() — возвращает адрес URL от названия схемы http до вопросительного знака;

□ public string getservletPath() — возвращает часть этого адреса, показывающую путь к сервлету.

Часть пути, определяющая контекст сервлета, возвращается методом

public String getContextPath();

Часть URI после вопросительного знака возвращается методом

public String getQueryString();

После имени сервлета может идти дополнительный путь к какому-нибудь файлу, который можно получить методом

public String getPathInfo();

Этот же путь, дополненный до абсолютного пути к каталогу документов сервера, можно получить методом

public String getPathTranslated();

После первой строки запроса могут идти заголовки запроса: Accept, Accept-Charset, Accept-Language, User-Agent и прочие заголовки, описанные в рекомендации RFC 2616. Узнать заголовки запроса и их значения можно методами

public Enumeration getHeaderNames(); public Enumeration getHeaders(String name); public String getHeader(String name); public int getIntHeader(String name); public long getDateHeader(String name);

Наконец, можно получить cookies, хранящиеся в браузере клиента, в виде массива объектов класса Cookie методом

public Cookie[] getCookies();

В пакете javax.servlet.http есть прямая реализация интерфейса HttpServletRequest — класс HttpServletRequestWrapper, расширяющий класс ServletRequestWrapper. Объект этого класса создается конструктором

public HttpServletRequestWrapper(HttpServletRequest req);

и обладает всеми методами интерфейса HttpServletRequest. Разработчики, желающие расширить возможности объекта, содержащего HTTP-запрос, например для написания фильтра, могут расширить класс HttpServletRequestWrapper.

Интерфейс HttpServletResponse

При составлении ответа по протоколу HTTP можно использовать дополнительные методы, включенные в интерфейс HttpServletResponse.

Метод

public void setHeader(String name, String value);

устанавливает заголовок ответа с именем name и значением value. Старое значение, если оно существовало, при этом стирается.

Если надо дать несколько значений заголовку с именем name, то следует воспользоваться методом

public void addHeader(String name, String value);