JSP Respuesta del servidor

El objeto de respuesta, Response, se encarga principalmente de devolver al cliente el resultado procesado por el contenedor JSP. Se puede utilizar la variable response para establecer el estado HTTP y enviar datos al cliente, como cookies, información de cabeceras HTTP, etc.

Una respuesta típica se ve así:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (空行)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

La línea de estado contiene información de la versión HTTP, como HTTP/1.1, un código de estado, como 200, y un mensaje muy corto correspondiente al código de estado, como OK.

La siguiente tabla resume las partes más útiles de las cabeceras de respuesta HTTP1.1; las verá a menudo en la programación de redes.

Cabecera de respuesta Descripción
Allow Especifica los métodos de solicitud (request) que soporta el servidor (GET, POST, etc.)
Cache-Control Especifica en qué circunstancias el documento de respuesta puede almacenarse en caché de forma segura. Normalmente toma valorespublic,privateono-cacheetc. Public significa que el documento se puede almacenar en caché, Private significa que el documento sirve solo a un único usuario y solo puede usar caché privada. No-cache significa que el documento no se almacena en caché.
Connection Indica al navegador si debe usar una conexión HTTP persistente.closeValorIndica al navegador que no use una conexión HTTP persistente; keep-alive significa usar una conexión persistente.
Content-Disposition Hace que el navegador solicite al usuario guardar la respuesta en el disco con el nombre indicado.
Content-Encoding Especifica la codificación de la página al ser transmitida.
Content-Language Indica el idioma utilizado por el documento, como en, en-us, ru, etc.
Content-Length Indica el número de bytes de la respuesta. Solo es útil cuando el navegador usa una conexión HTTP persistente (keep-alive).
Content-Type Indica el tipo MIME utilizado por el documento.
Expires Indica cuándo expira y se elimina de la caché.
Last-Modified Indica la hora de la última modificación del documento. El cliente puede almacenar en caché el documento y, en solicitudes posteriores, proporcionar una...If-Modified-SinceCabecera de solicitud
Location En 300 segundos, contiene una dirección de respuesta con un código de estado; el navegador se reconectará automáticamente y recuperará el nuevo documento.
Refresh Indica cada cuánto tiempo el navegador solicita una actualización de la página.
Retry-After Se usa junto con 503 (Service Unavailable) para indicarle al usuario cuánto tiempo pasará hasta que la solicitud reciba una respuesta.
Set-Cookie Indica la cookie correspondiente a la página actual.

Clase HttpServletResponse

El objeto response es una instancia de la clase javax.servlet.http.HttpServletResponse. Así como el servidor crea el objeto request, también crea una respuesta para el cliente.

El objeto response define la interfaz para procesar la creación de cabeceras HTTP. Mediante este objeto, los desarrolladores pueden añadir nuevas cookies o marcas de tiempo, así como códigos de estado HTTP, etc.

La siguiente tabla enumera los métodos para establecer cabeceras de respuesta HTTP, proporcionados por la clase HttpServletResponse:

S.N. Método & Descripción
1 String encodeRedirectURL(String url)Codifica la URL utilizada por el método sendRedirect().
2 String encodeURL(String url)Codifica la URL y devuelve la URL que contiene el ID de sesión.
3 boolean containsHeader(String name)Devuelve si existe la cabecera de respuesta especificada.
4 boolean isCommitted()Devuelve si la respuesta ya se ha enviado al cliente.
5 void addCookie(Cookie cookie)Añade la cookie especificada a la respuesta.
6 void addDateHeader(String name, long date)Añade una cabecera de respuesta con el nombre y el valor de fecha especificados.
7 void addHeader(String name, String value)Añade una cabecera de respuesta con el nombre y el valor especificados.
8 void addIntHeader(String name, int value)Añade una cabecera de respuesta con el nombre especificado y un valor int.
9 void flushBuffer()Escribe al cliente cualquier contenido del búfer.
10 void reset()Limpia todos los datos del búfer, incluidos el código de estado y las cabeceras de respuesta.
11 void resetBuffer()Limpia los datos del búfer, excluyendo las cabeceras de respuesta y el código de estado.
12 void sendError(int sc)Envía al cliente una respuesta de error con el código de estado especificado y luego limpia el búfer.
13 void sendError(int sc, String msg)Envía al cliente una respuesta de error con el código de estado y el mensaje especificados.
14 void sendRedirect(String location)Envía al cliente una respuesta de redirección temporal usando la URL especificada.
15 void setBufferSize(int size)Establece el tamaño del búfer del cuerpo de la respuesta.
16 void setCharacterEncoding(String charset)Especifica la codificación de la respuesta (juego de caracteres MIME), como UTF-8.
17 void setContentLength(int len)Especifica la longitud del contenido de la respuesta en servlets HTTP; este método se usa para establecer la cabecera HTTP Content-Length.
18 void setContentType(String type)Establece el tipo de contenido de la respuesta, si la respuesta aún no se ha enviado.
19 void setDateHeader(String name, long date)Establece una cabecera de respuesta con el nombre y el valor de fecha especificados.
20 void setHeader(String name, String value)Establece una cabecera de respuesta con el nombre y el valor especificados.
21 void setIntHeader(String name, int value)Establece un valor de tipo int en la cabecera con el nombre especificado.
22 void setLocale(Locale loc)Establece la configuración regional (locale) de la respuesta, si la respuesta aún no se ha enviado.
23 void setStatus(int sc)Establece el código de estado de la respuesta.

Ejemplo de programa de cabeceras de respuesta HTTP

El siguiente ejemplo utiliza los métodos setIntHeader() y setRefreshHeader() para simular un reloj digital:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ejemplo(example.com)</title>
</head>
<body>
<h2>自动刷新实例</h2>
<%
   // 设置每隔5秒自动刷新
   response.setIntHeader("Refresh", 5);
   // 获取当前时间
   Calendar calendar = new GregorianCalendar();
   String am_pm;
   int hour = calendar.get(Calendar.HOUR);
   int minute = calendar.get(Calendar.MINUTE);
   int second = calendar.get(Calendar.SECOND);
   if(calendar.get(Calendar.AM_PM) == 0)
      am_pm = "AM";
   else
      am_pm = "PM";
   String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
   out.println("当前时间: " + CT + "\n");
%>
</body>
</html>

Guarde el código anterior como main.jsp y luego acceda a él mediante el navegador. Mostrará la hora actual del sistema cada 5 segundos.

Podemos ver la siguiente imagen de demostración GIF:

También puede modificar el código anterior por su cuenta y probar otros métodos; así obtendrá una comprensión más profunda.

Otras extensiones