Сервлеты - HTTP-запрос клиента
Когда браузер запрашивает веб-страницу, он отправляет на веб-сервер много информации, которую нельзя прочитать напрямую, поскольку эта информация передается как часть заголовка HTTP-запроса. Вы можете проверить протокол HTTP для получения дополнительной информации об этом.
Ниже приводится важная информация заголовка, которая поступает со стороны браузера, и вы очень часто будете использовать ее в веб-программировании.
Sr.No. | Заголовок и описание |
---|---|
1 | Accept Этот заголовок определяет типы MIME, которые могут обрабатывать браузер или другие клиенты. Ценностиimage/png или же image/jpeg это две наиболее распространенные возможности. |
2 | Accept-Charset Этот заголовок определяет наборы символов, которые браузер может использовать для отображения информации. Например ISO-8859-1. |
3 | Accept-Encoding Этот заголовок определяет типы кодировок, которые браузер умеет обрабатывать. Ценностиgzip или же compress это две наиболее распространенные возможности. |
4 | Accept-Language В этом заголовке указываются предпочтительные языки клиента на случай, если сервлет может выдавать результаты на нескольких языках. Например en, en-us, ru и т. Д. |
5 | Authorization Этот заголовок используется клиентами для идентификации себя при доступе к веб-страницам, защищенным паролем. |
6 | Connection Этот заголовок указывает, может ли клиент обрабатывать постоянные HTTP-соединения. Постоянные соединения позволяют клиенту или другому браузеру получать несколько файлов с помощью одного запроса. ЦенностьKeep-Alive означает, что следует использовать постоянные соединения. |
7 | Content-Length Этот заголовок применим только к запросам POST и дает размер данных POST в байтах. |
8 | Cookie Этот заголовок возвращает файлы cookie на серверы, которые ранее отправляли их в браузер. |
9 | Host В этом заголовке указываются хост и порт, как указано в исходном URL-адресе. |
10 | If-Modified-Since Этот заголовок указывает, что клиенту нужна страница только в том случае, если она была изменена после указанной даты. Сервер отправляет код 304, что означаетNot Modified заголовок, если более новый результат недоступен. |
11 | If-Unmodified-Since Этот заголовок противоположен If-Modified-Since; он указывает, что операция должна быть успешной, только если документ старше указанной даты. |
12 | Referer Этот заголовок указывает URL-адрес ссылающейся веб-страницы. Например, если вы находитесь на веб-странице 1 и нажимаете ссылку на веб-страницу 2, URL-адрес веб-страницы 1 включается в заголовок реферера, когда браузер запрашивает веб-страницу 2. |
13 | User-Agent Этот заголовок идентифицирует браузер или другого клиента, выполняющего запрос, и может использоваться для возврата разного контента в разные типы браузеров. |
Методы чтения HTTP-заголовка
Существуют следующие методы, которые можно использовать для чтения HTTP-заголовка в вашей программе сервлета. Эти методы доступны с объектом HttpServletRequest.
Sr.No. | Метод и описание |
---|---|
1 | Cookie[] getCookies() Возвращает массив, содержащий все объекты Cookie, отправленные клиентом с этим запросом. |
2 | Enumeration getAttributeNames() Возвращает перечисление, содержащее имена атрибутов, доступных для этого запроса. |
3 | Enumeration getHeaderNames() Возвращает перечисление всех имен заголовков, содержащихся в этом запросе. |
4 | Enumeration getParameterNames() Возвращает список объектов String, содержащий имена параметров, содержащихся в этом запросе. |
5 | HttpSession getSession() Возвращает текущий сеанс, связанный с этим запросом, или, если запрос не имеет сеанса, создает его. |
6 | HttpSession getSession(boolean create) Возвращает текущий HttpSession, связанный с этим запросом, или, если текущего сеанса нет и значение create равно true, возвращает новый сеанс. |
7 | Locale getLocale() Возвращает предпочтительный языковой стандарт, в котором клиент будет принимать контент, на основе заголовка Accept-Language. |
8 | Object getAttribute(String name) Возвращает значение названного атрибута как Object или null, если атрибут с данным именем не существует. |
9 | ServletInputStream getInputStream() Извлекает тело запроса в виде двоичных данных с помощью ServletInputStream. |
10 | String getAuthType() Возвращает имя схемы аутентификации, используемой для защиты сервлета, например, «BASIC» или «SSL», или null, если JSP не был защищен. |
11 | String getCharacterEncoding() Возвращает имя кодировки символов, использованной в теле этого запроса. |
12 | String getContentType() Возвращает MIME-тип тела запроса или null, если тип неизвестен. |
13 | String getContextPath() Возвращает часть URI запроса, которая указывает контекст запроса. |
14 | String getHeader(String 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() Возвращает часть URL-адреса этого запроса от имени протокола до строки запроса в первой строке HTTP-запроса. |
24 | String getRequestedSessionId() Возвращает идентификатор сеанса, указанный клиентом. |
25 | String getServletPath() Возвращает часть URL-адреса этого запроса, которая вызывает JSP. |
26 | String[] getParameterValues(String name) Возвращает массив объектов String, содержащий все значения, которые имеет данный параметр запроса, или 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 (), чтобы получить имя каждого параметра.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "HTTP Header Request Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<table width = \"100%\" border = \"1\" align = \"center\">\n" +
"<tr bgcolor = \"#949494\">\n" +
"<th>Header Name</th><th>Header Value(s)</th>\n"+
"</tr>\n"
);
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");
}
out.println("</table>\n</body></html>");
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Теперь вызов вышеуказанного сервлета сгенерирует следующий результат:
HTTP Header Request Example
Header Name
Header Value(s)
accept
*/*
accept-language
en-us
user-agent
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8)
accept-encoding
gzip, deflate
host
localhost:8080
connection
Keep-Alive
cache-control
no-cache