Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Trabajo Preliminar
El paquete javax.servlet provee interfaces y clases que
permiten escribir y compilar servlets
No viene con el j2sdk, es necesario bajar el .jar respectivo y
hacerlo visible para compilar los programas
Por su parte, tambien los servidores deben poder saber
recibir requerimientos para servlets y saber interpretarlos
Cada servidor de servlets tiene sus propias reglas,
En la mayora de los casos hay que ponerlos en un directorio
especfico
En tomcat, por ejemplo, si se ponen en
raiz\webapps\examples\web-inf\classes pueden ser
contactadas por http://host:port/examples/servlet/servletname
Muchas veces es necesario tener un archivo (xml en tomcat)
donde se pone el alias de los servlets y sus parmetros de
inicializacin
La Anatoma de un Servlet
Un nuevo tipo (clase) de servlet es especificado extendiendo
la clase HttpServlet
Existen mtodos predefinidos:
es llamado por el servidor web cuando el servlet se sube
la primera vez (el momento en que sucede esto puede variar,
dependiendo del servidor)
init()
se ejecuta cuando el servlet fue invocado con una peticin Http POST
Anatoma de un servlet
La interfaz ServletRequest
HttpServletRequest es la clase de uno de los parmetros
con que el servidor llama a los mtodos del servlet que
implementa la interfaz ServletRequest provee acceso a:
Informacin que viene del cliente, como por ejemplo nombre de los
parmetros pasados y sus valores, el protocolo usado, el nombre del
computador del cliente y del servidor que lo atiende, etc.
El input stream, ServletInputStream. Los Servlets usan este
input stream para recibir datos de los clientes que envan con
protocolos de aplicaciones como los mtodos POST y PUT de
HTTP.
La interfaz ServletResponse
HttpServletResponse es la clase con el que
servidor llama a los mtodos del servlet.
Implementa la interfaz ServletResponse la
cual da al servlet mtodos para responder al
cliente:
Establecer el tipo MIME de la respuesta que se le
mandar al cliente
El output stream ServletOutputStream y un
Writer con el cual van a mandar datos al clientes.
Primer ejemplo
El servlet puede ser contactado directamente por
la siguente expresin en el browser:
http://grafica05.dcc.uchile.cl/examples/servlets/Simpl
eServlet
SimpleServlet
SimpleServlet extiende la clase HttpServlet la cual
implementa la interfaz Servlet.
Sobreescribe el mtodo doGet de la clase HttpServlet. doGet
es llamado por el mtodo service (no se ve) cuando el servlet fue
contactado por un GET request (default HTTP request method)
Dentro del mtodo doGet,
El request del cliente est representado por un objeto
HttpServletRequest.
La respuesta al cliente est representada por un objeto
HttpServletResponse
Como se le enviar texto al cliente, la respuesta se manda con un objeto
Writer obtenido del objeto HttpServletResponse.
Un segundo ejemplo
Vamos a implementar un web counter
Va a contabilizar cuntas veces un servlet de
esta clase ha sido creado (init)
Cuntas veces han sido llamadas todas las
instancias
Cuantas veces ha sido llamada la instancia que
se contacto
ver Count.java
webapps\examples\WEB-INF\web.xml
ver ShowParameters.java
URL request
host del cliente
nombres de parmetros y valores
Header del request
etc
Ver SnoopServlet?par1=val1&par2=val2
Session Tracking
Algunos mtodos
HttpSession sesion = request.getSession(true) crea un objeto sesin si no
exista
sesion.isNew()retorna verdadero si la sesin se cre recientemente
sesion.putAttribute/Value(String nombre, Object valor) asocia a la
sesin un par nombre-valor (value se usa hasta v2.2)
Object o = sesion.getAttribute/Value(nombre)retorna el objeto asociado a
ese nombre para la sesin
sesion.removeAttribute/Value(nombre)elimina el objeto asociado a ese nombre
para la sesin
Enumeration[]valores = sesion.getAttributeNames()
String[]valores = sesion.ValueNames() retorna un arreglo/enumeracin de
nombres de atributos/valores que hay en la sesin
long l = sesion.getCreationTime()retorna el tiempo (en milisegundos desde el
1.1.70 0:0:0 ) en que fue creada
Long l = sesion.lastAccessedTime() retorna el tiempo del ltimo acceso (en
milisegundos)
sesion.setMaxInactiveInterval(int seconds)pone el mximo intervalo antes de
que automticamente se destruya la sesin
Usando Cookies
Cookies son otra forma con la cual el servlet puede seguirle la
pista a un cliente
A travs de una cookie el selvlet puede mandar informacin al
cliente para que la guarde y la entregue cada vez que lo contacta.
Los Servlets envan cookies a los clientes agregando campos al
encabezado de respuesta Http que se enva.
Los clientes automaticamente retornan cookies cuando contactan
a un servidor mandndolo como campos adicionales en los
encabezados HTTP request.
Cookies los cookies tienen un nombre y un valor (ambos
strings) Adicionalmente puede guardar un comentario
Un server puede pasar ms de una cookie a un cliente.
Usando Cookies
Para mandar una cookie
1. Instanciar un objeto Cookie
2. Poner atributos (par nombre-valor)
3. Mandar la cookie
Ejemplos de Cookies
El primer ejemplo (Cookies.java) muestra los
tiempos cuando el cliente contact por primera vez
al servlet (va mtodo doGet) y el tiempo cuando lo
contact oprimiendo un botn que llama al mtodo
doPost
El seundo ejemplo muestra cmo se le puede poner
tiempos de permanencia (o validez) a una cookie.
Cookies o Sessions ?
Con sessions la informacin la almacena y
administra el servidor por lo que el servidor tiene un
estado que tiene que administrar cuidadosamente
Con Cookies es el cliente el que tiene la
informacin, lo que implica que esta va y viene cada
vez que se contacta al servidor
El cliente puede prohibir el uso de cookies si quiere