Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 413
Ильдар Шаукатович Хабибуллин
Интерфейс
Несколько методов интерфейса 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.
Интерфейс
При составлении ответа по протоколу HTTP можно использовать дополнительные методы, включенные в интерфейс HttpServletResponse.
Метод
public void setHeader(String name, String value);
устанавливает заголовок ответа с именем name и значением value. Старое значение, если оно существовало, при этом стирается.
Если надо дать несколько значений заголовку с именем name, то следует воспользоваться методом
public void addHeader(String name, String value);