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

Requisição HTTP do Cliente Servlet

Quando o navegador solicita uma página da web, ele envia informações específicas para o servidor da Web, essas informações não podem ser lidas diretamente porque são transmitidas como parte da cabeça da solicitação HTTP. Você pode ver Protocolo HTTP Saiba mais informações.

A seguir estão algumas cabeçalhas importantes provenientes do lado do navegador, que você pode usar frequentemente em programação Web:

CabeçalhaDescrição
AceitarEsta cabeçalha especifica o tipo de MIME que o navegador ou outro cliente pode manipular. Valor image/png ou image/jpeg São os dois valores mais comuns.
Aceitar-Conjunto de caracteresEsta cabeçalha especifica o conjunto de caracteres que o navegador pode usar para exibir informações. Por exemplo, ISO-8859-1.
Aceitar-CodificaçãoEsta cabeçalha especifica o tipo de codificação que o navegador sabe como manipular. Valor gzip ou compress São os dois valores mais comuns.
Aceitar-IdiomaEsta cabeçalha especifica o idioma preferido do cliente, neste caso, o Servlet gerará resultados em múltiplos idiomas. Por exemplo, en, en-us, ru e outros.
AutorizaçãoEsta cabeçalha é usada pelo cliente para identificar sua identidade ao acessar uma página da web protegida por senha.
ConexãoEsta cabeçalha indica se o cliente pode manipular a conexão HTTP persistente. A conexão persistente permite que o cliente ou outro navegador recupere vários arquivos através de uma única solicitação. Valor Manter-Alive significa que foi usado uma conexão persistente.
Content-LengthEssa informação de cabeçalho só se aplica a solicitações POST e informa o tamanho dos dados POST (em bytes).
CookieEssa informação de cabeçalho retorna os cookies anteriormente enviados ao navegador para o servidor.
HostEssa informação de cabeçalho especifica o host e o porta do URL original.
If-Modified-SinceEssa informação de cabeçalho especifica que o cliente deseja a página que estava disponível no URL original na data especificada. Se não houver novos resultados disponíveis, o servidor enviará um 304 código, representando Not Modified cabeçalho.
If-Unmodified-SinceEssa informação de cabeçalho é If-Modified-O oposto de Since, ele especifica que a operação só será bem-sucedida se o documento for anterior à data especificada.
Refereressa informação de cabeçalho indica o URL da Web page para a qual está apontando. Por exemplo, se você estiver na página 1ao 2quando o navegador solicitar a página 2 ao 1 do URL estará incluído na cabeçalho Referer.
User-AgentEssa informação de cabeçalho identifica o navegador ou outro cliente que está fazendo a solicitação e pode retornar diferentes conteúdos para diferentes tipos de navegadores.

Métodos para Ler Cabeçalhos HTTP

Os seguintes métodos estão disponíveis no Servlet para ler cabeçalhos HTTP. Eles são acessados por HttpServletRequest Objeto Disponível

Número de OrdemMétodo & Descrição
1getCookies()
Retorna um array contendo todos os Cookie objects enviados pelo cliente para esta solicitação.
2getAttributeNames()
Retorna um enumeração contendo os nomes dos atributos disponíveis para a solicitação.
3getHeaderNames()
Retorna um enumeração contendo todos os nomes de cabeçalho contidos na solicitação.
4getParameterNames()
Retorna um enumeração de String, contendo os nomes dos parâmetros contidos na solicitação.
5getSession()
Retorna a HttpSession associada à solicitação atual ou cria uma se houver solicitação sem sessão.
6getSession(boolean create)
Retorna a HttpSession associada à solicitação atual ou, se não houver sessão atual e criar for verdadeiro, retorna uma nova sessão de session.
7getLocale()
Baseado em Accept-Cabeçalho de idioma, retorna o conjunto de preferências de regionalização preferido do cliente para aceitar conteúdo.
8Object getAttribute(String name)
Retorna o valor da propriedade nomeada em forma de objeto, ou null se não existir a propriedade com o nome fornecido.
9ServletInputStream getInputStream()
Usa ServletInputStream para recuperar o corpo da solicitação em forma de dados binários.
10String getAuthType()
Retorna o nome do esquema de autenticação usado para proteger o Servlet, por exemplo, "BASIC" ou "SSL", ou null se o JSP não estiver protegido.
11String getCharacterEncoding()
Retorna o nome da codificação de caracteres usada no corpo da solicitação.
12String getContentType()
Retorna o tipo MIME do corpo da solicitação, ou null se o tipo não for conhecido.
13String getContextPath()
Retorna a parte do URI da solicitação que indica o contexto da solicitação.
14String getHeader(String name)
Retorna a string do valor do cabeçalho da solicitação especificado.
15String getMethod()
Retorna o nome do método HTTP da solicitação, por exemplo, GET, POST ou PUT.
16String getParameter(String name)
Retorna o valor do parâmetro da solicitação em forma de string, ou null se o parâmetro não existir.
17String getPathInfo()
Retorna qualquer informação adicional de caminho relacionada ao URL enviado pelo cliente quando a solicitação foi emitida.
18String getProtocol()
Retorna o nome e a versão do protocolo da solicitação.
19String getQueryString()
Retorna a string de consulta contida na URL do pedido após o caminho.
20String getRemoteAddr()
Retorna o endereço IP (IP) do cliente que enviou a solicitação.
21String getRemoteHost()
Retorna o nome completo do cliente que enviou a solicitação.
22String getRemoteUser()
Retorna o usuário que fez a solicitação, se o usuário já foi autenticado, ou null se o usuário não foi autenticado.
23String getRequestURI()
Parte da URL do pedido que é retornada no query string da primeira linha da solicitação HTTP até o nome do protocolo.
24String getRequestedSessionId()
返回由客户端指定的 session 会话 ID。
25String getServletPath()
返回调用 JSP 的请求的 URL 的一部分。
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>Header 名称</th><th>Header 值</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>");
    }
    // Método para lidar com solicitações de método POST
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

Este exemplo de teste é localizado no projeto TomcatTest, a configuração correspondente web.xml é:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet  
    <!-- nome da classe -->  
    <servlet-nome>DisplayHeader</servlet-nome>  
    <!-- o pacote em que está -->  
    <servlet-classe>com.w3codebox.test.DisplayHeader</servlet-classe>  
  </servlet>  
  <servlet-mapeamento>  
    <servlet-nome>DisplayHeader</servlet-nome>  
    <!-- endereço de acesso -->  
    <url-padrão>/TomcatTest/DisplayHeader</url-padrão>  
  </servlet-mapeamento>  
</web-app>

Agora, chame o Servlet acima, acesse http://localhost:8080/TomcatTest/DisplayHeader Produzirá o seguinte resultado: