Когда браузер запрашивает веб-страницу, он отправляет на веб-сервер ряд данных, которые невозможно прочитать напрямую, поскольку информация отправляется как часть заголовков HTTP. Вы можете проверить протокол HTTP для получения дополнительной информации.
В следующей таблице перечислено некоторое важное содержимое заголовка информации на стороне браузера. Эту информацию вы часто будете встречать в будущем при сетевом программировании:
информация | описывать |
---|---|
Принимать | Указывает типы MIME, которые может обрабатывать браузер или другой клиент. Его значение обычно — image/png или image/jpeg. |
Accept-Charset | Указывает набор символов, который будет использоваться браузером. Например, ISO-8859-1. |
Принять-кодирование | Укажите тип кодировки. Его значение обычно равно gzip или compress. |
Accept-Язык | Укажите предпочтительный язык клиента. Сервлет будет отдавать приоритет возврату набора результатов на текущем языке, если сервлет поддерживает этот язык. Такие как en, en-us, ru и т. д. |
Авторизация | Идентификация разных пользователей при доступе к веб-страницам, защищенным паролем |
Связь | Указывает, может ли клиент обрабатывать постоянные соединения HTTP. Постоянные соединения позволяют клиенту или браузеру получать несколько файлов за один запрос. Keep-Alive означает включение постоянных соединений. |
Длина контента | Применяется только к запросам POST, указывая количество байтов данных POST. |
Файлы cookie | Возвращает файлы cookie, ранее отправленные в браузер, на сервер. |
Хозяин | Укажите имя хоста и номер порта в исходном URL. |
Если-Изменено-С тех пор | Указывает, что клиенту нужна эта веб-страница только в том случае, если она была изменена в указанную дату. Сервер отправляет клиенту код 304, указывающий на отсутствие обновленных ресурсов. |
Если-Немодифицировано-С тех пор | В отличие от If-Modified-Since, операция завершится успешно, только если документ не был изменен с указанной даты. |
Реферер | Отмечает URL-адрес указанной страницы. Например, если вы находитесь на странице 1, а затем щелкаете ссылку на страницу 2, URL-адрес страницы 1 будет включен в заголовок запроса браузера для страницы 2. |
Пользовательский агент | Используется для различения запросов, отправленных разными браузерами или клиентами, и возврата разного контента в разные типы браузеров. |
Объект запроса является экземпляром класса javax.servlet.http.HttpServletRequest. Всякий раз, когда клиент запрашивает страницу, механизм JSP генерирует новый объект для представления запроса.
Объект запроса предоставляет ряд методов для получения заголовков информации HTTP, включая данные формы, файлы cookie, методы HTTP и т. д.
Далее мы познакомим вас с некоторыми методами, обычно используемыми в программировании JSP для получения заголовков информации HTTP. Подробности смотрите в таблице ниже:
серийный номер | Метод и описание |
---|---|
1 | Cookie[] getCookies() возвращает массив всех файлов cookie на клиенте. |
2 | Перечисление getAttributeNames() возвращает коллекцию всех имен атрибутов объекта запроса. |
3 | Перечисление getHeaderNames() возвращает коллекцию имен всех заголовков HTTP. |
4 | Перечисление getParameterNames() возвращает коллекцию всех параметров запроса. |
5 | HttpSession getSession() возвращает объект сеанса, соответствующий запросу. Если нет, создайте его. |
6 | HttpSession getSession(boolean create) возвращает объект сеанса, соответствующий запросу. Если его нет и параметр create имеет значение true, возвращается новый объект сеанса. |
7 | Locale getLocale() возвращает объект Locale текущей страницы, который можно установить в ответ. |
8 | Объект getAttribute(String name) возвращает значение атрибута с именем name или значение null, если оно не существует. |
9 | ServletInputStream getInputStream() возвращает запрошенный входной поток |
10 | Строка getAuthType() возвращает имя схемы аутентификации, используемой для защиты сервлета, например «BASIC» или «SSL», или значение null, если JSP не устанавливает меры защиты. |
11 | Строка getCharacterEncoding() возвращает имя набора кодировок символов запроса. |
12 | String getContentType() возвращает MIME-тип тела запроса или значение null, если он неизвестен. |
13 | Строка getContextPath() возвращает контекстный путь, указанный в URI запроса. |
14 | String getHeader(String name) возвращает информационный заголовок, указанный по имени. |
15 | String getMethod() возвращает метод HTTP в этом запросе, например GET, POST или PUT. |
16 | String getParameter(String name) возвращает параметр, указанный по имени в этом запросе, или значение NULL, если он не существует. |
17 | Строка getPathInfo() возвращает любые дополнительные пути, связанные с этим URL-адресом запроса. |
18 | Строка getProtocol() возвращает имя и версию протокола, используемого этим запросом. |
19 | String getQueryString() возвращает строку запроса, содержащуюся в этом URL-адресе запроса. |
20 | Строка getRemoteAddr() возвращает IP-адрес клиента. |
двадцать один | Строка getRemoteHost() возвращает полное имя клиента. |
двадцать два | Строка getRemoteUser() возвращает пользователя, аутентифицированного клиентом при входе в систему, или значение null, если пользователь не аутентифицирован. |
двадцать три | Строка getRequestURI() возвращает URI запроса. |
двадцать четыре | Строка getRequestedSessionId() возвращает идентификатор сеанса, указанный запросом. |
25 | String getServletPath() возвращает запрошенный путь сервлета. |
26 | String[] getParameterValues(String name) возвращает все значения параметра с указанным именем или значение null, если он не существует. |
27 | логическое значение isSecure() возвращает, использует ли запрос зашифрованный канал, например HTTPS. |
28 | int getContentLength() возвращает количество байтов, содержащихся в теле запроса. Если оно неизвестно, возвращается -1. |
29 | int getIntHeader(String name) возвращает значение заголовка запроса с указанным именем |
30 | int getServerPort() возвращает номер порта сервера |
В этом примере мы будем использовать метод getHeaderNames() класса HttpServletRequest для чтения заголовков HTTP. Этот метод возвращает информацию заголовка текущего HTTP-запроса в форме перечисления.
После получения объекта Enumeration используйте стандартный метод для обхода объекта Enumeration, используя метод hasMoreElements(), чтобы определить, когда остановиться, и метод nextElement(), чтобы получить имя каждого параметра.
<%@ page import="java.io.*,java.util.*" %><html><head><title>Пример запроса заголовка HTTP</title></head><body><center><h2 >Пример запроса заголовка HTTP</h2><table align="center"><tr bgcolor="#949494"><th>Имя заголовка</th><th>Значения заголовка</th></tr ><% Перечисление headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td> n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>n"); }%></table></center></body></html>
Получив доступ к main.jsp, вы получите следующие результаты:
Имя заголовка | Значение(я) заголовка |
---|---|
принимать | */* |
принять-язык | ru-нас |
пользовательский агент | Mozilla/4.0 (совместимый; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
принять-кодирование | gzip, сдуть |
хозяин | локальный хост: 8080 |
связь | Keep-Alive |
кэш-контроль | без кэша |
Вы можете попробовать другие методы класса HttpServletRequest в приведенном выше коде.