Borrar Mensaje Julio Inojosa

Fecha  6/04/2003 19:45
inojosajulio@hotmail.com 

Procedente de:
   200.44.20.3

Navegador:
   Internet Explorer 5.x

Sistema Operativo:
   Windows 2000

 
 


 ESTRUCTURA BÁSICA DE UN SERVLET
Aquí tenemos un servlet básico que maneja peticiones GET. Las peticiones GET, para aquellos que no estemos familiarizados con HTTP, son peticiones hechas por el navegador cuando el usuario teclea una URL en la línea de direcciones, sigue un enlace desde una página Web, o rellena un formulario que no especifica un METHOD. Los Servlets también pueden manejar peticiones POST muy fácilmente, que son generadas cuando alguien crea un formulario HTML que especifica METHOD="POST".


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

public class SomeServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

// Use "request" to read incoming HTTP headers (e.g. cookies)
// and HTML form data (e.g. data the user entered and submitted)

// Use "response" to specify the HTTP response line and headers
// (e.g. specifying the content type, setting cookies).

PrintWriter out = response.getWriter();
// Use "out" to send content to browser
}
}

Para ser un servlet, una clase debería extender HttpServlet y sobreescribir doGet o doPost (o ambos), dependiendo de si los datos están siendo enviados mediante GET o POST. Estos métodos toman dos argumentos: un HttpServletRequest y un HttpServletResponse.


El HttpServletRequest tiene métodos que nos permiten encontrar información entrante como datos de un FORM, cabeceras de peticiòn HTTP, etc. El HttpServletResponse tiene métodos que nos permiten especificar líneas de respuesta HTTP (200, 404, etc.), cabeceras de respuesta (Content-Type, Set-Cookie, etc.), y, todavía más importante, nos permiten obtener un PrintWriter usado para envíar la salida de vuelta al cliente. Para servlets sencillos, la mayoría del esfuerzo se gasta en sentencias println que generan la página deseada. Observamos que doGet y doPost lanzan dos excepciones, por eso es necesario incluirlas en la declaración. También observamos que tenemos que importar las clases de los paquetes java.io (para PrintWriter, etc.), javax.servlet (para HttpServlet, etc.), y javax.servlet.http (para HttpServletRequest y HttpServletResponse). Finalmente, observamos que doGet y doPost son llamados por el método service, y algunas veces queremos sobreescribir directamente el método service, por ejemplo, para un servlet que maneje tanto peticiones GET como POST.

Si alguna vez has usado un motor de búsqueda Web, visitado un tienda de libros on-line, etc., probablemente habrás encontrado URLs de búsqueda divertidas como http://host/path?user=Marty+Hall&origin=bwi&dest=lax. La parte posterior a la interrogación (user=Marty+Hall&origin=bwi&dest=lax) es conocida como datos de formulario, y es la forma más común de obtener datos desde una página Web para un programa del lado del servidor. Puede añadirse al final de la URL después de la interrogación (como arriba) para peticiones GET o enviada al servidor en una línea separada, para peticiones POST.


Extraer la información necesaria desde estos datos de formulario es tradicionalmente una de las partes más tediosas de la programación CGI.


Primero de todo, tenemos que leer los datos de una forma para las peticiones GET (en CGI tradicional, esto se hace mediante QUERY_STRING), y de otra forma para peticiones POST (normalmente leyendo la entrada estándard).


Segundo, tenemos que separar las parejas de los ampersands, luego separar los nombres de los parámetros (a la izquierda de los signos igual) del valor del parámetro (a la derecha de los signos igual).


Tercero, tenemos que decodificar los valores. Los valores alfanuméricos no cambian, pero los espacios son convertidos a signos más y otros caracteres se convierten como %XX donde XX es el valor ASCII (o ISO Latin-1) del carácter, en hexadecimal. Por ejemplo, si alguien introduce un valor de "~hall, ~gates, y ~mcnealy" en un campo de texto con el nombre "users" en un formulario HTML, los datos serían enviados como: "users=%7Ehall%2C+%7Egates%2C+and+%7Emcnealy".


Finalmente, la cuarta razón que hace que el análisis de los datos de formulario sea tedioso es que los valores pueden ser omitidos (por ejemplo, param1=val1¶m2=¶m3=val3) y un parámetro puede tener más de un valor y que el mismo parámetro puede aparecer más de una vez (por ejemplo: param1=val1¶m2=val2¶m1=val3).


Una de las mejores características de los servlets Java es que todos estos análisis de formularios son manejados automáticamente. Simplemente llamamos al método getParameter de HttpServletRequest, y suministramos el nombre del parámetro como un argumento. Observa que los nombres de parámetros son sensibles a las mayúsculas.


Hacemos esto exactamente igual que cuando los datos son enviados mediante GET o como si los enviaramos mediante POST. El valor de retorno es un String correspondiente al valor uudecode de la primera ocurrencia del parámetro. Se devuelve un String vacío si el parámetro existe pero no tiene valor, y se devuelve null si no existe dicho parámetro. Si el parámetro pudiera tener más de un valor, como en el ejemplo anterior, deberíamos llamar a getParameterValues en vez de a getParameter. Este devuelve un array de strings.

                                                                                                                                                                                                                                                                                                                               


Respuestas (2)



Volver al foro

Responder
Nombre / Nick
EMail
Subject / Titulo
Link a tu Web
Recibir un email cuando mi mensaje sea contestado
Mensaje