Servlets: respuesta HTTP del servidor
Como se discutió en el capítulo anterior, cuando un servidor web responde a una solicitud HTTP, la respuesta generalmente consiste en una línea de estado, algunos encabezados de respuesta, una línea en blanco y el documento. Una respuesta típica se ve así:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
La línea de estado consta de la versión HTTP (HTTP / 1.1 en el ejemplo), un código de estado (200 en el ejemplo) y un mensaje muy corto correspondiente al código de estado (OK en el ejemplo).
A continuación se muestra un resumen de los encabezados de respuesta HTTP 1.1 más útiles que regresan al navegador desde el servidor web y los usaría con mucha frecuencia en la programación web:
No Señor. | Encabezado y descripción |
---|---|
1 | Allow Este encabezado especifica los métodos de solicitud (GET, POST, etc.) que admite el servidor. |
2 | Cache-Control Este encabezado especifica las circunstancias en las que el documento de respuesta se puede almacenar en caché de forma segura. Puede tener valorespublic, private o no-cache etc. Público significa que el documento se puede almacenar en caché, Privado significa que el documento es para un solo usuario y solo se puede almacenar en cachés privados (no compartidos) y sin caché significa que el documento nunca debe almacenarse en caché. |
3 | Connection Este encabezado indica al navegador si debe usar persistente en las conexiones HTTP o no. Un valor declose indica al navegador que no utilice conexiones HTTP persistentes y keepalive significa usar conexiones persistentes. |
4 | Content-Disposition Este encabezado le permite solicitar que el navegador le pida al usuario que guarde la respuesta en el disco en un archivo con el nombre dado. |
5 | Content-Encoding Este encabezado especifica la forma en que se codificó la página durante la transmisión. |
6 | Content-Language Este encabezado significa el idioma en el que está escrito el documento. Por ejemplo, en, en-us, ru, etc. |
7 | Content-Length Este encabezado indica el número de bytes en la respuesta. Esta información es necesaria solo si el navegador está utilizando una conexión HTTP persistente (mantener viva). |
8 | Content-Type Este encabezado proporciona el tipo MIME (Extensión multipropósito de correo de Internet) del documento de respuesta. |
9 | Expires Este encabezado especifica el momento en el que el contenido debe considerarse obsoleto y, por lo tanto, ya no debe almacenarse en caché. |
10 | Last-Modified Este encabezado indica cuándo se modificó por última vez el documento. Luego, el cliente puede almacenar en caché el documento y proporcionar una fechaIf-Modified-Since encabezado de solicitud en solicitudes posteriores. |
11 | Location Este encabezado debe incluirse con todas las respuestas que tengan un código de estado en los 300. Esto notifica al navegador de la dirección del documento. El navegador se vuelve a conectar automáticamente a esta ubicación y recupera el nuevo documento. |
12 | Refresh Este encabezado especifica qué tan pronto el navegador debe solicitar una página actualizada. Puede especificar el tiempo en segundos después del cual se actualizará una página. |
13 | Retry-After Este encabezado se puede usar junto con una respuesta 503 (Servicio no disponible) para decirle al cliente qué tan pronto puede repetir su solicitud. |
14 | Set-Cookie Este encabezado especifica una cookie asociada con la página. |
Métodos para establecer el encabezado de respuesta HTTP
Existen los siguientes métodos que se pueden utilizar para configurar el encabezado de respuesta HTTP en su programa de servlet. Estos métodos están disponibles con el objeto HttpServletResponse .
No Señor. | Método y descripción |
---|---|
1 | String encodeRedirectURL(String url) Codifica la URL especificada para usarla en el método sendRedirect o, si no se necesita codificación, devuelve la URL sin cambios. |
2 | String encodeURL(String url) Codifica la URL especificada al incluir la ID de sesión en ella o, si no se necesita codificación, devuelve la URL sin cambios. |
3 | boolean containsHeader(String name) Devuelve un booleano que indica si el encabezado de respuesta con nombre ya se ha establecido. |
4 | boolean isCommitted() Devuelve un booleano que indica si la respuesta se ha confirmado. |
5 | void addCookie(Cookie cookie) Agrega la cookie especificada a la respuesta. |
6 | void addDateHeader(String name, long date) Agrega un encabezado de respuesta con el nombre dado y el valor de la fecha. |
7 | void addHeader(String name, String value) Agrega un encabezado de respuesta con el nombre y el valor proporcionados. |
8 | void addIntHeader(String name, int value) Agrega un encabezado de respuesta con el nombre dado y el valor entero. |
9 | void flushBuffer() Obliga a que cualquier contenido del búfer se escriba en el cliente. |
10 | void reset() Borra todos los datos que existen en el búfer, así como el código de estado y los encabezados. |
11 | void resetBuffer() Borra el contenido del búfer subyacente en la respuesta sin borrar los encabezados ni el código de estado. |
12 | void sendError(int sc) Envía una respuesta de error al cliente utilizando el código de estado especificado y limpiando el búfer. |
13 | void sendError(int sc, String msg) Envía una respuesta de error al cliente utilizando el estado especificado. |
14 | void sendRedirect(String location) Envía una respuesta de redireccionamiento temporal al cliente utilizando la URL de ubicación de redireccionamiento especificada. |
15 | void setBufferSize(int size) Establece el tamaño de búfer preferido para el cuerpo de la respuesta. |
dieciséis | void setCharacterEncoding(String charset) Establece la codificación de caracteres (juego de caracteres MIME) de la respuesta que se envía al cliente, por ejemplo, en UTF-8. |
17 | void setContentLength(int len) Establece la longitud del cuerpo del contenido en la respuesta. En los servlets HTTP, este método establece el encabezado HTTP Content-Length. |
18 | void setContentType(String type) Establece el tipo de contenido de la respuesta que se envía al cliente, si la respuesta aún no se ha confirmado. |
19 | void setDateHeader(String name, long date) Establece un encabezado de respuesta con el nombre dado y el valor de fecha. |
20 | void setHeader(String name, String value) Establece un encabezado de respuesta con el nombre y el valor proporcionados. |
21 | void setIntHeader(String name, int value) Establece un encabezado de respuesta con el nombre dado y el valor entero |
22 | void setLocale(Locale loc) Establece la configuración regional de la respuesta, si la respuesta aún no se ha confirmado. |
23 | void setStatus(int sc) Establece el código de estado para esta respuesta |
Ejemplo de respuesta de encabezado HTTP
Ya ha visto el método setContentType () funcionando en ejemplos anteriores y el siguiente ejemplo también usaría el mismo método, además, usaríamos setIntHeader() método para configurar Refresh encabezamiento.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class Refresh extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
// Set response content type
response.setContentType("text/html");
// Get current time
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;
PrintWriter out = response.getWriter();
String title = "Auto Refresh Header Setting";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p>Current Time is: " + CT + "</p>\n"
);
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Ahora, llamar al servlet anterior mostraría la hora actual del sistema después de cada 5 segundos de la siguiente manera. Simplemente ejecute el servlet y espere a ver el resultado:
Auto Refresh Header Setting
Current Time is: 9:44:50 PM