Servlets y JSP

Si llegamos a los servlets Java desde CGI tradicional, probablemente usaremos la idea de "Variables CGI". Estas son una forma ecl�ctica de colecci�n de informaci�n sobre la petici�n. Algunas se derivan de la l�nea de petici�n HTTP y las cabeceras, otras est�n derivadas desde el propio socket (como el nombre y la direcci�n IP del host peticionario), y otras derivadas de los par�metros de instalaci�n del servidor (como el mapeo de URLs a los paths actuales).

.�Equivalentes Servlet a la Variables Est�ndards CGI

Aunque probablemente tiene m�s sentido pensar en diferentes fuentes de datos (datos de petici�n, datos de servidor, etc.) como distintas, los programadores experimentados en CGI podr�an encontrar muy �til la siguiente tabla. Asumimos que request es el HttpServletRequest suministrado a los m�todos doGet y doPost.

Variable CGI Significado Acceso desde doGet o doPost
AUTH_TYPE Si se suministr� una cabecera Authorization, este es el esquema especificado (basic o digest) request.getAuthType()
CONTENT_LENGTH S�lo para peticiones POST, el n�mero de bytes env�ados. Tecnicamente, el equivalente es String.valueOf(request.getContentLength()) un String) pero probablemente querremos s�lo llamar a request.getContentLength(), que devuelve un int.
CONTENT_TYPE El tipo MIME de los datos adjuntos, si se espec�fica. request.getContentType()
DOCUMENT_ROOT Path al directorio que corresponde con http://host/ getServletContext().getRealPath("/") Observa que era request.getRealPath("/") en especificaciones servlet anteriores.
HTTP_XXX_YYY Acceso a cabeceras arbitrarias HTTP request.getHeader("Xxx-Yyy")
PATH_INFO Informaci�n de Path adjunto a la URL. Como los servlets, al contrario que los programas est�ndards CGI, pueden hablar con el servidor, no necesitan tratar esto de forma separada. La informaci�n del path podr�a ser enviada como parte normal de los datos de formulario. request.getPathInfo()
PATH_TRANSLATED La informaci�n del path mapeado al path real en el servidor. De nuevo, los Servlets no necesitan tener un caso especial para esto. request.getPathTranslated()
QUERY_STRING Para peticiones GET, son los datos adjuntos como un gran string, con los valores codificados. Raramente querremos una fila de datos en los servlets; en su lugar, usaremos request.getParameter para acceder a par�metros individuales. request.getQueryString()
REMOTE_ADDR La direcci�n IP del cliente que hizo la petici�n, por ejemplo "192.9.48.9". request.getRemoteAddr()
REMOTE_HOST El nombre de dominio totalmente cualificado (por ejemplo "java.sun.com") del cliente que hizo la petici�n. Se devuelve la direcci�n IP si no se puede determinar. request.getRemoteHost()
REMOTE_USER Si se suministr� una cabecera Authorization, la parte del usuario. request.getRemoteUser()
REQUEST_METHOD El tipo de petici�n, que normalmente es GET o POST, pero ocasionalmente puede ser HEAD, PUT, DELETE, OPTIONS, o TRACE request.getMethod()
SCRIPT_NAME Path del servlet. request.getServletPath()
SERVER_NAME Nombre del Servidor Web. request.getServerName()
SERVER_PORT Puerto por el que escucha el servidor. Tecnicamente, el equivalente es String.valueOf(request.getServerPort()), que devuelve un String. Normalmente s�lo querremos llamar a request.getServerPort(), que devuelve un int
SERVER_PROTOCOL Nombre y versi�n usada en la l�nea de petici�n (por ejemplo HTTP/1.0 o HTTP/1.1). request.getProtocol()
SERVER_SOFTWARE Informaci�n identificativa del servidor Web. getServletContext().getServerInfo()

.�Ejemplo: Leer las Variables CGI

Aqu� tenemos un servelt que crea una tabla que muestra los valores de todas las variables CGI distintas a HTTP_XXX_YYY, que son s�lo cabeceras de petici�n HTTP que se mostraron en la p�gina anterior.

.�ShowCGIVariables.java

Tambi�n puedes descargar el c�digo fuente.

package hall;

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

/** Creates a table showing the values of all the CGI variables.
 *  
 *  Part of tutorial on servlets and JSP that appears at
 *  http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
 *  1999 Marty Hall; may be freely used or adapted.
 */

public class ShowCGIVariables extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String[][] variables =
      { { "AUTH_TYPE", request.getAuthType() },
        { "CONTENT_LENGTH", String.valueOf(request.getContentLength()) },
        { "CONTENT_TYPE", request.getContentType() },
        { "DOCUMENT_ROOT", getServletContext().getRealPath("/") },
        { "PATH_INFO", request.getPathInfo() },
        { "PATH_TRANSLATED", request.getPathTranslated() },
        { "QUERY_STRING", request.getQueryString() },
        { "REMOTE_ADDR", request.getRemoteAddr() },
        { "REMOTE_HOST", request.getRemoteHost() },
        { "REMOTE_USER", request.getRemoteUser() },
        { "REQUEST_METHOD", request.getMethod() },
        { "SCRIPT_NAME", request.getServletPath() },
        { "SERVER_NAME", request.getServerName() },
        { "SERVER_PORT", String.valueOf(request.getServerPort()) },
        { "SERVER_PROTOCOL", request.getProtocol() },
        { "SERVER_SOFTWARE", getServletContext().getServerInfo() }
      };
    String title = "Servlet Example: Showing CGI Variables";
    out.println(ServletUtilities.headWithTitle(title) +
                "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
                "<TABLE BORDER=1 ALIGN=CENTER>\n" +
                "<TR BGCOLOR=\"#FFAD00\">\n" +
                "<TH>CGI Variable Name<TH>Value");
    for(int i=0; i<variables.length; i++) {
      String varName = variables[i][0];
      String varValue = variables[i][1];
      if (varValue == null)
        varValue = "<I>Not specified</I>";
      out.println("<TR><TD>" + varName + "<TD>" + varValue);
    }
    out.println("</TABLE></BODY></HTML>");
  }

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

.�Salida de ShowCGIVariables

Salida de ShowCGIVariables

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR