English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

HTTP-запросы клиентов Servlet

Когда браузер запрашивает веб-страницу, он отправляет определенную информацию на веб-сервер, которая не может быть напрямую прочитана,因为这些 данные передаются в виде части заголовка HTTP-запроса. Вы можете проверить Протокол HTTP Узнать больше информации.

Вот важные заголовки, которые могут быть получены от браузера, и которые часто используются в веб-программировании:

ЗаголовкиОписание
AcceptЭта заголовочная информация specifies the MIME type that the browser or other client can handle. Значение image/png или image/jpeg Это наиболее распространенные два возможных значения.
Accept-CharsetЭта заголовочная информация specifies the character set that the browser can use to display information. Например, ISO-8859-1.
Accept-EncodingЭта заголовочная информация specifies the encoding type that the browser knows how to handle. Значение gzip или compress Это наиболее распространенные два возможных значения.
Accept-LanguageЭта заголовочная информация specifies the preferred language of the client, in which case the servlet will produce results in multiple languages. Например, en, en-us, ru и т.д.
AuthorizationЭта заголовочная информация используется для того, чтобы клиент мог идентифицировать себя при доступе к веб-странице, защищенной паролем.
ConnectionЭта заголовочная информация indicates whether the client can handle a persistent HTTP connection. Persistent connections allow clients or other browsers to retrieve multiple files through a single request. Значение Keep-Alive Это означает, что используется продолжительный соединение.
Content-LengthЭта заголовочная информация относится только к запросам POST и specifies the size of the POST data in bytes.
CookieЭта заголовочная информация возвращает cookies, которые были отправлены браузеру, на сервер.
HostЭта заголовочная информация specifies the host and port in the original URL.
If-Modified-SinceЭта заголовочная информация означает, что клиент хочет страницу, которая была изменена после указанной даты. Если нет новых результатов, которые можно использовать, сервер будет отправлять код 304, что означает Not Modified Заголовки
If-Unmodified-SinceЭта заголовочная информация является противоположностью If-Modified-Since и specifies that the operation will only be successful if the document is earlier than the specified date.
RefererЭта заголовочная информация указывает на URL веб-страницы, к которой она относится. Например, если вы находитесь на странице 1 и нажимаете ссылку на страницу 2, когда браузер запрашивает страницу 2, URL страницы 1 будет включен в заголовок Referer.
User-AgentЭтот заголовок информации identifies the browser or other client that issued the request and can return different content to different types of browsers.

Методы чтения HTTP-заголовков

Ниже перечислены методы, доступные в Servlet-программе для чтения HTTP-заголовков. Эти методы через HttpServletRequest Объект доступен.

НомерМетод & Описание
1Cookie[] getCookies()
Возвращает массив, содержащий все Cookie-объекты, отправленные клиентом в этот запрос.
2Enumeration getAttributeNames()
Возвращает объект Enumeration, содержащий имена свойств, предоставленных для этого запроса.
3Enumeration getHeaderNames()
Возвращает объект Enumeration, содержащий все заголовки, включенные в этот запрос.
4Enumeration getParameterNames()
Возвращает объект Enumeration, содержащий имена параметров, включенных в этот запрос.
5HttpSession getSession()
Возвращает текущий session, связанный с этим запросом, или если запрос не имеет сессии, то создает новую.
6HttpSession getSession(boolean create)
Возвращает текущий HttpSession, связанный с этим запросом, или если текущей сессии нет и значение create равно true, то возвращает новую сессию.
7Locale getLocale()
На основе заголовка Accept-Language возвращает предпочтительный регион для клиента, который принимает содержимое.
8Object getAttribute(String name)
Возвращает значение свойства с именем, указанным в качестве аргумента, в виде объекта; если свойство с указанным именем не существует, то возвращает null.
9ServletInputStream getInputStream()
Используя ServletInputStream, retrieves the body of the request in binary data form.
10String getAuthType()
Возвращает имя алгоритма аутентификации, используемого для защиты Servlet, например, "BASIC" или "SSL", если JSP не защищена, то возвращает null.
11String getCharacterEncoding()
Возвращает имя кодировки символов, используемой в теле запроса.
12String getContentType()
Возвращает MIME тип тела запроса, если тип не известен,则在озвращает null.
13String getContextPath()
Возвращает часть запрос URI, указывающую контекст запроса.
14String getHeader(String name)
Возвращает значение указанного заголовка запроса в виде строки.
15String getMethod()
Возвращает имя HTTP метода запроса, например, GET, POST или PUT.
16String getParameter(String name)
Возвращает значение параметра запроса в виде строки или null, если параметр не существует.
17String getPathInfo()
Возвращает любое дополнительное путь информации, связанное с URL, отправленным клиентом, когда запрос был отправлен.
18String getProtocol()
Возвращает имя и версию протокола запроса.
19String getQueryString()
Возвращает строку запроса, содержащуюся в URL после пути.
20String getRemoteAddr()
Возвращает IP-адрес клиента, который отправил запрос.
21String getRemoteHost()
Возвращает полное ограниченное имя клиента, который отправил запрос.
22String getRemoteUser()
Возвращает имя пользователя, который отправил запрос, если пользователь уже прошел аутентификацию, или null, если пользователь не прошел аутентификацию.
23String getRequestURI()
Возвращает часть URL запроса от имени протокола до первой строки запроса HTTP.
24String getRequestedSessionId()
Возвращает сеансовый идентификатор, указанный клиентом.
25String getServletPath()
Возвращает часть URL запроса, которая является частью вызова JSP.
26String[] getParameterValues(String name)
Возвращает массив строковых объектов, содержащий значения всех предоставленных параметров запроса, если параметр не существует,则在озвращает null.
27boolean isSecure()
Возвращает булево значение, указывающее, используется ли безопасный канал для запроса, например HTTPS.
28int getContentLength()
以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。
29int getIntHeader(String name)
返回指定的请求头的值为一个 int 值。
30int getServerPort()
返回接收到这个请求的端口号。
31int getParameterMap()
将参数封装成 Map 类型。

HTTP Header 请求示例

下面的示例使用 HttpServletRequest 的 getHeaderNames() 方法读取 HTTP 头信息。该方法返回一个枚举,包含与当前的 HTTP 请求相关的头信息。

一旦我们有一个枚举,我们可以以标准方式循环枚举,使用 hasMoreElements() 方法来确定何时停止,使用 nextElement() 方法来获取每个参数的名称。

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/DisplayHeader")
//扩展 HttpServlet 类
public class DisplayHeader extends HttpServlet {
    // 处理 GET 方法请求的方法
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String title = "HTTP Header запрос пример - Основной учебник сеть пример";
        String docType =
            "<!DOCTYPE html> \n"
            out.println(docType +
            "<html>\n"+
            "<head><meta charset=\"utf-8\"><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>Название заголовка</th><th>Значение заголовка</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>");
    }
    // Обработка метода запроса POST
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

Этот тестовый пример находится в проекте TomcatTest, соответствующие настройки web.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet>  
    <!-- Имя класса -->  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- Расположение пакета -->  
    <servlet-class>com.w3codebox.test.DisplayHeader</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>DisplayHeader</servlet-name>  
    <!-- Адрес посещения -->  
    <url-pattern>/TomcatTest/DisplayHeader</url-pattern>  
  </servlet-mapping>  
</web-app>

Теперь вызовите上面的 Servlet, чтобы访问 http://localhost:8080/TomcatTest/DisplayHeader Это会产生以下结果: