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

Resposta HTTP do Servidor Servlet

Como discutido nos capítulos anteriores, quando um servidor web responde a um pedido HTTP, a resposta geralmente inclui uma linha de estado, alguns cabeçalhos de resposta, uma linha em branco e o documento. Uma resposta típica é como segue:

HTTP/1A tabela a seguir resume os mais úteis HTTP1 200 OK
Content-Type: text/Type: text
html2Header
<body>
: ...
  HeaderN: ...
(Linha em branco)
<!doctype ...>
<html>/<head>...
head>
<body>
</...
</body>

html>/1A tabela a seguir resume os mais úteis HTTP1linha de status inclui a versão HTTP (no exemplo, HTTP 2)、um código de status (no exemplo,

00) e uma mensagem curta correspondente ao código de status (no exemplo, OK). 1A tabela a seguir resume os mais úteis HTTP1 .

Os cabeçalhos de resposta, que você usará frequentemente em programação web:cabeçalhos
DescriçãoAllow
Este cabeçalho especifica os métodos de solicitação suportados pelo servidor (GET, POST, etc.).-CacheControlEste cabeçalho especifica em que condições o documento de resposta pode ser armazenado em cache de forma segura. Valores possíveis incluem: public, private ou-no etc. Public significa que o documento é cacheável, Private significa que o documento é um documento de uso privado de um único usuário e pode ser armazenado apenas em cache privado (não compartilhado), no-cache significa que o documento não deve ser armazenado em cache.
ConnectionEste cabeçalho indica se o navegador deve usar conexão HTTP persistente. Valor close indica que o navegador não deve usar conexão HTTP persistente, valor keep-alive significa que usa conexão persistente.
Content-DispositionEste cabeçalho permite que você peça ao navegador para salvar a resposta em disco com o nome dado.
Content-EncodingDurante a transmissão, este cabeçalho especifica o modo de codificação da página.
Content-LanguageEste cabeçalho representa o idioma usado para escrever o documento. Por exemplo, en, en-us, ru e outros.
Content-LengthEste cabeçalho indica o número de bytes na resposta. Apenas quando o navegador usar conexão persistente (keep-apenas em conexões HTTP ativas (keep-alive).
Content-TypeEste cabeçalho fornece o tipo MIME (Multipurpose Internet Mail Extension) do documento de resposta.
ExpiresEste cabeçalho especifica o tempo de expiração do conteúdo, após o qual o conteúdo não é mais armazenado em cache.
Last-ModifiedEste cabeçalho indica o horário da última modificação do documento. Em seguida, o cliente pode armazenar o arquivo em cache e, em futuras solicitações, passar Se-Modified-Desde Os cabeçalhos de solicitação fornecem uma data.
LocationEsta informação de cabeçalho deve ser incluída em todas as respostas com código de status. Em 3Dentro de 00s, isso notifica o navegador do endereço do documento. O navegador se reconnectará automaticamente a essa posição e obtendrá o novo documento.
RefreshEste cabeçalho informa como o navegador deve solicitar a atualização da página o mais rápido possível. Você pode especificar o número de segundos para atualizar a página.
Retry-AfterEste cabeçalho pode ser usado em conjunto com 503Usado em combinação com o código de resposta (Service Unavailable - Serviço Indisponível), que informa ao cliente quanto tempo pode passar antes de repetir sua solicitação.
Set-CookieEste cabeçalho informa um cookie associado à página.

Métodos de configuração de cabeçalhos de resposta HTTP

Os seguintes métodos podem ser usados para configurar cabeçalhos de resposta HTTP em programas Servlet. Esses métodos são HttpServletResponse Objeto disponível.

NúmeroMétodo & Descrição
1String encodeRedirectURL(String url)
Codificar a URL especificada para uso no método sendRedirect, ou retornar a URL inalterada se a codificação não for necessária.
2String encodeURL(String url)
Codificar a URL especificada contendo o ID de sessão da sessão, ou retornar a URL inalterada se a codificação não for necessária.
3boolean containsHeader(String name)
Retornar um valor booleano que indica se já foi configurado um cabeçalho de resposta nomeado.
4boolean isCommitted()
Retornar um valor booleano que indica se a resposta já foi comprometida.
5void addCookie(Cookie cookie)
Adicionar o cookie especificado à resposta.
6void addDateHeader(String name, long date)
Adicionar um cabeçalho de resposta com um nome e valor de data dados.
7void addHeader(String name, String value)
Adicionar um cabeçalho de resposta com um nome e valor dados.
8void addIntHeader(String name, int value)
Adicionar um cabeçalho de resposta com um nome e valor inteiros dados.
9void flushBuffer()
Forçar qualquer conteúdo no buffer a ser escrito para o cliente.
10void reset()
Limpar todos os dados existentes no buffer, incluindo o código de status e os cabeçalhos.
11void resetBuffer()
Limpar o conteúdo do buffer básico da resposta, sem limpar o código de status e os cabeçalhos.
12void sendError(int sc)
使用指定的状态码发送错误响应到客户端,并清除缓冲区。
13void sendError(int sc, String msg)
使用指定的状态发送错误响应到客户端。
14void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。
15void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。
16void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
17void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。
18void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。
19void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。
20void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。
21void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。
22void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。
23void setStatus(int sc)
为该响应设置状态码。

HTTP Header 响应示例

您已经在前面的示例中看到 setContentType() 方法,下面的示例也使用了同样的方法,此外,我们会用 setIntHeader() 方法来设置 Refresh 头。

//导入必需的 java 库
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
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("/Refresh")
//扩展 HttpServlet 类
public class Refresh extends HttpServlet {
    // 处理 GET 方法请求的方法
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                throws ServletException, IOException
      {
          // 设置刷新自动加载时间为 5 秒
          response.setIntHeader("Refresh", 5);
          // 设置响应内容类型
          response.setContentType("text/html;charset=UTF-8");
         
          //使用默认时区和语言环境获得一个日历  
          Calendar cale = Calendar.getInstance();  
          //将Calendar类型转换成Date类型  
          Date tasktime=cale.getTime();  
          //设置日期输出的格式  
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
          //格式化输出  
          String nowTime = df.format(tasktime);
          PrintWriter out = response.getWriter();
          String title = "自动刷新 Header 设置 - 基础教程网示例";
          String docType =
          "<!DOCTYPE html>\n";
          out.println(docType +
            "<html>\n" +
            "<head><title>" + título + "</title></head>\n"+
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 alinhamento="center">" + título + "</h1>\n" +
            "<p>Atualmente é: " + nowTime + "</p>\n");
      }
      // método para lidar com solicitações de método POST
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

Os exemplos de teste acima estão localizados no projeto TomcatTest, a configuração correspondente web.xml é a seguinte:

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

Agora, chame o Servlet acima, a cada 5 Os segundos mostram o tempo atual do sistema. Basta executar o Servlet e esperar um pouco, você verá o seguinte resultado: