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 в приведенном выше коде.

Другие расширения