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