Vous êtes sur la page 1sur 19

Servlets

Servlets son mdulos que extienden a servidores java-enabled orientados a


request/response, como por ejemplo Servidores Web
Un servlet puede ser el responsable de tomar datos de una forma HTML y aplicar un
mtodo para actualizar las bases de datos de la una compaa de acuerdo a ellos.

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()

doGet(HttpServletRequest req, HttpServletResponse res)


throws ServletException, IOException

se llama cuando el servlet es invocado con una peticin Http GET,


que es la normal cuando se contacta un serv.
doPost(HttpServletRequest req, HttpServletResponse
res) throws ServletException, IOException

se ejecuta cuando el servlet fue invocado con una peticin Http POST

Anatoma de un servlet

Una peticin GET se genera siempre cuando una peticin


http es ingresada en el browser
Por ejemplo, http://www.yahoo.com implica mandar al
servidor web un string con el comando GET index.html
Httpx.x
Cuando el servlet se llama por primera vez, se inicializa y
4-6 threads son levantados para atender a cleintes en
paralelo cuando vayan apareciendo, Para ahorrar tiempo
En la mayora de los casos los servlets son contactados a
travs de forms en pginas html. En estos casos es posible
especificar en los parmetros una peticin POST

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

Esto causar que el mtodo doGet sea llamado


El servlet responder escribiendo en la pagina del
browser que lo invoc una frase pequea

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

Usando parmetros de inicializacin


del archivo de configuracin
En todos los servidores hay un archivo de configuracin
escrito en XML
Este se edita a mano o con una herramienta apropiada
En este archivo se pueden especifcar parmetros para los
servlets
Permiten parametrizar servlets sin recompilarlos
En Tomcat 4.1 este archivo se ubica en

webapps\examples\WEB-INF\web.xml
ver ShowParameters.java

Parmetros desde el cliente


Es posible pasar parmetros en la lnea de invocacin URL
http://host:port/servlet?param1=value1&param2=value2..

El servlet puede preguntar por los valores de los parmetros


si conoce el nombre de ellos de la siguente manera:
String value = req.getParameter(param1);
String[] value = req.getParameterValues(param1)
String value = req.getParameterValues(param1)[0] es equivalente a lo
primero si es un parmetro de un solo valor o se recuperar el primero de los
valores de un parmetro multivalorado

Parmetros pueden ser solamente strings


ver ServletParameter1.java invocarlo con
http://host:port/ServletParameter1?name=nelson

Lo ideal es hacerlo con Forms


Una Form es una pgina html que puede contener objetos
grficos para recolectar informacin la que manda al servidor
como una URL:
Podemos usar el mismo servlet !!!!
mirar ServletParameter1.html
Ejemplo 1:
ShowParametersRequest.java invocado por
ShowParametersPostForm.html
Ejemplo 2:
SubmitResume.java invocado por SubmitResume.html

Obteniendo informacin acerca


del cliente
...que contact al servlet como por
ejemplo:

URL request
host del cliente
nombres de parmetros y valores
Header del request
etc

Ver SnoopServlet?par1=val1&par2=val2

Session Tracking

Session tracking es un mecanismo que pueden los


servlets para mantener informacin acerca del estado de
los requests de un usuario durante una sesin
Una sesin es un dilogo de una instancia de un browser
cliente con el server en un perodo de tiempo limitado
(normalmente 30 minutos).
Se pueden asociar objetos de informacin a la sesin, los
cuales se conservan en el servlet
La sesin no la maneja el programador sino el el servidor
web, el programador la consulta
Ver SessionServlet

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

Para recuperar la informacin de una cookie,


1. Recuperar todas las cookies del cliente
2. Encontrar la cookie que se necesita por su nombre
3. Recuperar su valor

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

Vous aimerez peut-être aussi