JSP Клиентский запрос
Когда браузер запрашивает веб-страницу, он отправляет веб-серверу ряд сведений, которые невозможно прочитать напрямую, потому что эти сведения передаются как часть HTTP-заголовков. Для получения дополнительной информации можно обратиться к протоколу HTTP.
В следующей таблице перечислены некоторые важные элементы заголовков на стороне браузера, которые часто будут встречаться в дальнейшем сетевом программировании:
| Информация | Описание |
|---|---|
| Accept | Указывает MIME-типы, которые может обрабатывать браузер или другие клиенты. Обычно его значение —image/pngилиimage/jpeg |
| Accept-Charset | Указывает набор символов, который должен использоваться браузером. Например, ISO-8859-1 |
| Accept-Encoding | Указывает тип кодирования. Обычно его значение —gzipилиcompress |
| Accept-Language | Указывает предпочитаемый язык клиента. Сервлет будет в первую очередь возвращать наборы результатов, составленные на текущем языке, если сервлет поддерживает этот язык. Например, en, en-us, ru и т. д. |
| Authorization | Идентифицирует разных пользователей при доступе к веб-страницам, защищённым паролем |
| Соединение | Указывает, может ли клиент обрабатывать постоянные HTTP-соединения. Постоянные соединения позволяют клиенту или браузеру получать несколько файлов в одном запросе.Keep-AliveУказывает, что постоянное соединение включено |
| Content-Length | Применяется только к POST-запросам, указывает количество байтов данных POST |
| Cookie | Возвращает серверу cookie, ранее отправленные браузеру |
| Host | Указывает имя хоста и номер порта в исходном URL |
| If-Modified-Since | Указывает, что клиенту нужна эта веб-страница только если она была изменена после указанной даты. Сервер отправляет клиенту код 304, указывая, что более новых ресурсов нет. |
| If-Unmodified-Since | Противоположность If-Modified-Since. Операция успешна только если документ не был изменён после указанной даты. |
| Referer | Обозначает URL страницы-источника. Например, если вы находитесь на странице 1 и нажимаете ссылку на страницу 2, то URL страницы 1 будет включён в заголовки запроса браузера для страницы 2. |
| User-Agent | Используется для различения запросов, отправленных разными браузерами или клиентами, и возврата разного содержимого разным типам браузеров. |
Класс HttpServletRequest
Объект request является экземпляром класса javax.servlet.http.HttpServletRequest. Каждый раз, когда клиент запрашивает страницу, движок JSP создаёт новый объект для представления этого запроса.
Объект request предоставляет ряд методов для получения HTTP-заголовков, включая данные формы, cookie, HTTP-методы и так далее.
Далее будут представлены некоторые методы, часто используемые в программировании на JSP для получения HTTP-заголовков. Подробности см. в следующей таблице:
| Нет. | Метод& Описание |
|---|---|
| 1 | Cookie[] getCookies()Возвращает массив всех cookie от клиента |
| 2 | Enumeration getAttributeNames()Возвращает набор всех имён атрибутов объекта request |
| 3 | Enumeration getHeaderNames()Возвращает набор имён всех HTTP-заголовков |
| 4 | Enumeration getParameterNames()Возвращает набор всех параметров запроса |
| 5 | HttpSession getSession()Возвращает объект сеанса, соответствующий запросу, или создаёт его, если он не существует |
| 6 | HttpSession getSession(boolean create)Возвращает объект сеанса, соответствующий запросу. Если его нет и параметр create равен true, возвращает новый объект сеанса. |
| 7 | Locale getLocale()Возвращает объект Locale для текущей страницы, который можно задать в ответе |
| 8 | Object getAttribute(String name)Возвращает значение атрибута с указанным именем или null, если он не существует. |
| 9 | ServletInputStream getInputStream()Возвращает входной поток запроса |
| 10 | String getAuthType()Возвращает имя схемы аутентификации, используемой для защиты сервлета, например "BASIC" или "SSL", или null, если для JSP не установлены меры защиты. |
| 11 | String getCharacterEncoding()Возвращает имя кодировки символов запроса |
| 12 | String getContentType()Возвращает MIME-тип тела запроса или null, если он неизвестен |
| 13 | String getContextPath()Возвращает путь контекста, указанный в URI запроса |
| 14 | String getHeader(String name)Возвращает заголовок, заданный параметром name |
| 15 | String getMethod()Возвращает метод HTTP данного запроса, например GET, POST или PUT |
| 16 | String getParameter(String name)Возвращает параметр с указанным именем в этом запросе или null, если он не существует |
| 17 | String getPathInfo()Возвращает любую дополнительную информацию о пути, связанную с URL этого запроса |
| 18 | String getProtocol()Возвращает имя и версию протокола, используемого этим запросом |
| 19 | String getQueryString()Возвращает строку запроса, содержащуюся в URL этого запроса |
| 20 | String getRemoteAddr()Возвращает IP-адрес клиента |
| 21 | String getRemoteHost()Возвращает полное имя клиента |
| 22 | String getRemoteUser()Возвращает пользователя, аутентифицированного посредством входа на клиенте, или null, если пользователь не аутентифицирован |
| 23 | String getRequestURI()Возвращает URI запроса |
| 24 | String getRequestedSessionId()Возвращает идентификатор сессии, указанный в запросе |
| 25 | String getServletPath()⟧Возвращает путь сервлета запрошенного сервлетаReturns the servlet path of the requested servlet |
| 26 | String[] getParameterValues(String name)Возвращает все значения параметра с указанным именем или null, если он не существует |
| 27 | boolean isSecure()Возвращает, использовал ли запрос защищенный канал, например HTTPS |
| 28 | int getContentLength()Возвращает количество байтов, содержащихся в теле запроса, или -1, если неизвестно |
| 29 | int getIntHeader(String name)Возвращает значение заголовка запроса с указанным именем |
| 30 | int getServerPort()Возвращает номер порта сервера |
Пример HTTP-заголовка
В этом примере мы будем использовать метод getHeaderNames() класса HttpServletRequest для чтения HTTP-заголовков. Этот метод возвращает информацию о заголовках текущего HTTP-запроса в виде перечисления.
После получения объекта Enumeration обходите объект Enumeration стандартным способом, используйте метод hasMoreElements() для определения момента остановки и метод nextElement() для получения имени каждого параметра.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h2>HTTP 头部请求实例</h2>
<table width="100%" border="1" align="center">
<tr bgcolor="#949494">
<th>Header Name</th><th>Header Value(s)</th>
</tr>
<%
Enumeration 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>
</body>
</html>
При посещении main.jsp будет получен следующий результат:

Вы можете попробовать другие методы класса HttpServletRequest в приведенном выше коде.
Другие расширения