Servelts y JSP

Leer Cabeceras de Solicitud HTTP


  1. Introducción a las Cabeceras de Solicitud
  2. Leer Cabeceras de Solicitud desde Servlets
  3. Ejemplo: Imprimir todas la Cabeceras

1. Introducción a las Cabeceras de Solicitud

Cuando un cliente HTTP (por ejemplo, un navegador) envía una petición, se pide que suministre una línea de petición (normalmente GET o POST). Si se quiere también puede enviar un número de cabeceras, que son opcionales excepto Content-Length, que es requerida sólo para peticiones POST. Aquí tenemos las cabecers más comunes: Para ver todos los detalles sobre las cabeceras HTTP, puedes ver las especificaciones en http://www.w3.org/Protocols/.

2. Leer Cabeceras de Solicitud desde Servlets

Leer cabeceras es muy sencillo, sólo llamamos al método getHeader de HttpServletRequest, que devuelve un String si se suministró la cebecera en esta petición, y null si no se suministró. Sin embargo, hay un par de cabeceras que se usan de forma tan común que tienen métodos de acceso especiales. El método getCookies devuelve el contenido de la cabecera Cookie, lo analiza y lo almacena en un array de objetos Cookie. Los métodos getAuthType y getRemoteUser dividen la cabecera Authorization en su componentes. Los métodos getDateHeader y getIntHeader leen la cabecera específica y la convierten a valores Date e int, respectivamente.

En vez de buscar una cabecera particular, podemos usar el getHeaderNames para obtener una Enumeration de todos los nombres de cabecera de esta petición particular.

Finalmente, además de buscar las cabeceras de petición, podemos obtener información sobre la propia línea de petición principal. El método getMethod devuelve el método de petición principal (normalmente GET o POST, pero son posibles cosas como HEAD, PUT, y DELETE). El método getRequestURI devuelve la URI (la parte de la URL que viene después del host y el puerto, pero antes de los datos del formulario). El getRequestProtocol devuelve la tercera parte de la línea de petición que generalmente es "HTTP/1.0" o "HTTP/1.1".

3. Ejemplo: Imprimir todas las Cabeceras

Aquí tenemos un servelt que simplemente crea una tabla con todas las cabeceras recibidas, junto con sus valores asociados. También imprime los tres componentes de la línea de petición principal (método, URI y protocolo).

3.1 ShowRequestHeaders.java

También puedes descargar el código fuente
package hall;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class ShowRequestHeaders extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String title = "Servlet Example: Showing Request Headers";
    out.println(ServletUtilities.headWithTitle(title) +
                "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
                "<B>Request Method: </B>" +
                request.getMethod() + "<BR>\n" +
                "<B>Request URI: </B>" +
                request.getRequestURI() + "<BR>\n" +
                "<B>Request Protocol: </B>" +
                request.getProtocol() + "<BR><BR>\n" +
                "<TABLE BORDER=1 ALIGN=CENTER>\n" +
                "<TR BGCOLOR=\"#FFAD00\">\n" +
                "<TH>Header Name<TH>Header Value");
    Enumeration headerNames = request.getHeaderNames();
    while(headerNames.hasMoreElements()) {
      String headerName = (String)headerNames.nextElement();
      out.println("<TR><TD>" + headerName);
      out.println("    <TD>" + request.getHeader(headerName));
    }
    out.println("</TABLE>\n</BODY></HTML>");
  }

  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
    doGet(request, response);
  }
}

3.2 Salida de ShowRequestHeaders

Aquí están los resultados de dos peticiones típicas, una de Netscape y otra de Internet Explorer. Veremos la razón por la que Netscape muestra una cabecera Cookie cuando lleguemos a la sección Cookies.



Ozito