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

Respuesta HTTP del servidor Servlet

Como se discutió en los capítulos anteriores, cuando un servidor web responde a una solicitud HTTP, la respuesta generalmente incluye una línea de estado, algunas cabeceras de respuesta, una línea en blanco y el documento. Un ejemplo típico de respuesta es el siguiente:

HTTP/1La tabla a continuación resume los más útiles HTTP desde el servidor web hasta el navegador:1 200 OK
Content-text/Type: ...
html2Encabezado
<body>
: ...
  HeaderN: ...
(Línea en blanco)
<!doctype ...>
<html>/<head>...
head>
<body>
</...
</body>

html>/1La tabla a continuación resume los más útiles HTTP desde el servidor web hasta el navegador:1La línea de estado incluye la versión de HTTP (en este ejemplo, HTTP 2)、un código de estado (en este ejemplo,

(00) y un mensaje corto correspondiente al código de estado (en este ejemplo, OK). 1La tabla a continuación resume los más útiles HTTP desde el servidor web hasta el navegador:1 .

Encabezado de respuesta, que utilizará con frecuencia en programación web:Encabezado
DescripciónAllow
Esta información de encabezado especifica los métodos de solicitud que admite el servidor (GET, POST, etc.).-CacheControlEsta información de encabezado especifica en qué condiciones el documento de respuesta puede almacenarse en caché de manera segura. Los valores posibles son: public, private o-no Public significa que el documento es cachable, Private significa que el documento es un documento de uso privado de un solo usuario y debe almacenarse solo en caché privada (no compartida), no-cache significa que el documento no debe almacenarse en caché.
ConnectionEsta información de encabezado indica si el navegador utiliza una conexión HTTP persistente. Valor close indica que el navegador no utiliza una conexión HTTP persistente, valor keep-alive significa que se utiliza una conexión persistente.
Content-DispositionEsta información de encabezado permite al navegador solicitar al usuario que guarde la respuesta en disco con el nombre dado.
Content-EncodingDurante la transmisión, esta información de encabezado especifica el modo de codificación de la página.
Content-LanguageEsta información de encabezado indica el idioma utilizado para escribir el documento. Por ejemplo, en, en-us, ru, etc.
Content-LengthEsta información de encabezado indica el número de bytes en la respuesta. Sólo cuando el navegador utiliza una conexión persistente (keep-alive)-sólo es necesario esta información en conexiones HTTP activas (keep-alive).
Content-TypeEsta información de encabezado proporciona el tipo MIME (Multipurpose Internet Mail Extension) del documento de respuesta.
ExpiresEsta información de encabezado especifica el tiempo de expiración del contenido, después del cual el contenido ya no se almacenará en caché.
Last-ModifiedEsta información de encabezado indica la última modificación del documento. Luego, el cliente puede cachear el archivo y, en futuras solicitudes, puede hacerlo a través de Si-Modified-Desde La información de encabezado de solicitud proporciona una fecha.
LocationEsta información de encabezado debe incluirse en todas las respuestas con códigos de estado. En 3Dentro de 00s, esto notificará al navegador la dirección del documento. El navegador se conectará automáticamente a esta ubicación y obtendrá el nuevo documento.
RefreshEsta información de encabezado especifica cómo el navegador debe solicitar rápidamente la página actualizada. Puede especificar el número de segundos para refrescar la página.
Retry-AfterEsta información de encabezado puede usarse con 503Usado junto con el código de respuesta (Service Unavailable - Servicio no disponible), esto informará al cliente cuánto tiempo puede repetir su solicitud.
Set-CookieEsta información de encabezado especifica un cookie asociado con la página.

Métodos para configurar encabezados de respuesta HTTP

Los siguientes métodos se pueden usar para configurar encabezados de respuesta HTTP en programas Servlet. Estos métodos a través de HttpServletResponse Objeto disponible.

Número de ordenMétodo & Descripción
1String encodeRedirectURL(String url)
Codificar la URL especificada para el método sendRedirect, o si la codificación no es necesaria, devolver la URL sin cambios.
2String encodeURL(String url)
Codificar la URL especificada que contiene el ID de sesión de la sesión, o si la codificación no es necesaria, devolver la URL sin cambios.
3boolean containsHeader(String name)
Devolver un valor booleano que indique si se ha configurado el encabezado de respuesta nombrado.
4boolean isCommitted()
Devolver un valor booleano que indique si la respuesta ya se ha comprometido.
5void addCookie(Cookie cookie)
Agregar el cookie especificado a la respuesta.
6void addDateHeader(String name, long date)
Agregar un encabezado de respuesta con un nombre y valor de fecha dados.
7void addHeader(String name, String value)
Agregar un encabezado de respuesta con un nombre y valor dados.
8void addIntHeader(String name, int value)
Agregar un encabezado de respuesta con un nombre y valor enteros dados.
9void flushBuffer()
Forzar que cualquier contenido en el búfer se escriba en el cliente.
10void reset()
Limpiar cualquier dato existente en el búfer, incluyendo el código de estado y los encabezados.
11void resetBuffer()
Limpiar el contenido del búfer base de la respuesta, sin limpiar el código de estado y los encabezados.
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")
//extender la clase HttpServlet
public class Refresh extends HttpServlet {
    // método para manejar solicitudes GET
      public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
                lanza ServletException, IOException
      {
          // establecer el tiempo de recarga automática 5 segundos
          response.setIntHeader("Refresh", 5);
          // establecer el tipo de contenido de la respuesta
          response.setContentType("text/html;charset=UTF-8";
         
          //obtener un calendario con la zona horaria predeterminada y el ambiente de idioma  
          Calendar cale = Calendar.getInstance();  
          //conversión de tipo Calendar a Date  
          Date tasktime=cale.getTime();  
          //establecer el formato de salida de fechas  
          SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
          //formateo de salida  
          String nowTime = df.format(tasktime);
          PrintWriter out = response.getWriter();
          String title = "auto-refrescante Header configuración" - 基础教程网示例";
          String docType =
          "<!DOCTYPE html>\n";
          out.println(docType +
            "<html>\n" +
            "<head><title>" + title + "</title></head>\n"+
            "<body bgcolor=\"#f0f0f0\">\n" +
            "<h1 align="center">" + title + "</h1>\n" +
            "<p>La hora actual es:" + nowTime + "</p>\n");
      }
      // método para manejar solicitudes de método POST
      public void doPost(HttpServletRequest request,
                         HttpServletResponse response)
          throws ServletException, IOException {
         doGet(request, response);
      }
}

El siguiente ejemplo de prueba está ubicado en el proyecto TomcatTest, la configuración de web.xml correspondiente es la siguiente:

<?xml version="1.0" encoding="UTF-8"?>  
<web-app>  
  <servlet  
     <!-- Nombre de la clase -->  
    <servlet-name>Refresh</servlet-name>  
    <!-- paquete en el que se encuentra -->  
    <servlet-class>com.w3codebox.test.Refresh</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>Refresh</servlet-name>  
    <!-- Sitio web visitado -->  
    <url-pattern>/TomcatTest/Refresh</url-pattern>  
    </servlet-mapping>  
</web-app>

Ahora, llama al Servlet superior, cada 5 Los segundos mostrarán la hora actual del sistema. Tan solo ejecuta Servlet y espera un momento, verás el siguiente resultado: