Вы находитесь на странице: 1из 41

Servlets

Roberto Moriyn

Servlets, I
Objetos java, componentes web contenidas en un servidor (contenedor de servlets) que los reutiliza, que reciben peticiones mediante una URL y generan respuestas Mantienen informacin mediante cookies HTTP, objetos de sesin y de aplicacin y reescritura de la URL Normalmente generan cdigo HTML

Servlets, II
Los servlets no son aplicaciones, sino partes de aplicaciones que gestionan informacin que puede tener un contexto ms amplio que el del cdigo escrito por el desarrollador (contexto de sesin o de aplicacin). Los servlets proporcionan medios para almacenar informacin vlida en los contextos de sesin y de aplicacin y para acceder a ella.

Contenedores: Optimizaciones
Los contenedores no crean y destruyen objetos constantemente, sino que los reaprovechan mediante pools o caches.
Los contenedores se pueden configurar especificando el nmero de items en caches y pools de objetos almacenados para su reutilizacin

Tecnologas previas, como CGI, crean un proceso por cada solicitud

Procesamiento de una peticin http


URL de la peticin: http://serverId/applId/servletPath?params Servidor: (crea objetos si hace falta)
Asocia applId/servletPath a objeto Servlet Prepara objetos request y response Llama al mtodo doGet(req, resp) o doPost(req, resp) del Servlet resp escribe en su Writer

Enva el texto acumulado en el Writer

Procesamiento de la informacin en una peticin http


Las cuestiones marcadas en rojo tienen que ser programadas (en Java o mediante fichero de configuracin) Los parmetros de la peticin estn disponibles en el objeto HttpServletRequest. Otros datos como la direccin del cliente (remoteAddr) y la URL de la peticin (requestURL) tambin.

Servlets, III
Corresponden a una subclase de HttpServlet Su fichero compilado se guarda en un subdirectorio WEB-INF/class

Mtodos esenciales:
doGet(request, response) doPost(request, response) PrintWriter response.getWriter() String request.getParameter(String)

Servlets, IV
Los atributos no estticos de una subclase de HttpServlet no tienen utilidad en general. Puede ser til definir mtodos especficos de la subclase, llamados por doGet o doPost.

Servlets, IV
HttpServlet

request (parmetros) remoteAddr

response

requestURL

writer

Ejemplo: SimpleServlet.zip, I
public class SimpleServlet extends HttpServlet { protected void doGet (HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html> <head><title>Simple</title></head>"); out.println("<body><h1>Hello, + request.getRemoteAddr () + .</h1> </body> </html>); out.close(); } }

Ejemplo: SimpleServlet, II
Ejecucin: http://localhost:8080/Simple/
Hello, 127.0.0.1.

Ficheros relevantes: web.xml + SimpleServlet.java Configuracin (web.xml):


Entrada: SimpleServlet

Desarrollo y despliegue de aplicaciones web


Complejidad: rbol de directorios Fases:
Compilacin .class Construccin .war, .ear, Despliegue aplicacin/mdulo en servidor

Despliegue y pliegue de aplicaciones web


Despliegue: alternativas
Copiar fichero .war en <JEE_HOME>/domains/domain1/autodeploy Ejecucin de un objetivo Ant (script, build.xml) Ejecutar deploy (o run)desde NetBeans

Pliegue
asadmin undeploy <nombre_contexto> http://localhost:4848/asadmin -> Aplicaciones Web -> Anular implementacin

ANT
Script: build.xml Objetivos (Compilar, desplegar, )
Pueden estar satisfechos Pueden depender de otros objetivos Pueden utilizar variables

ant deploy

NetBeans
Proyecto (mdulo)
Categora: Java Web, Web Application Nombre (context path) Servidor (GlassFish 3) Versin Java EE: 6

Acciones: Build (compila y genera *.war), Deploy (despliega), Run, Generate JavaDoc, (usan fichero Ant generado automticamente) Crea fichero build.xml y directorio de configuracin nbproject

Configuracin de mdulos web


Los Servlets se crean y destruyen por iniciativa del contenedor web, que tambin activa sus mtodos. Un fichero de configuracin permite especificar estos procesos. El fichero web.xml contiene informacin utilizada por el servidor de aplicaciones y el contenedor web en su funcionamiento.

Informacin de configuracin de mdulos web


Inicializacin de parmetros de la aplicacin Lista de servlets y otras componentes Inicializacin de parmetros de las componentes Asociacin de URLs a componentes

Estructura bsica de fichero de configuracin Web.xml


Ttulo Servlets: Nombre Clase URLs (plantillas) // <web-app > // <display-name> // <servlet> // <servlet-name> // <servlet-class> // <servlet-mapping> // <servlet-name> // <url-pattern>

Ejemplo de fichero de configuracin web.xml


<?xml version= ?> <web-app version=> <servlet> <servlet-name>Simple</servlet-name> <servlet-class>servlets.Simple</servlet-class> </servlet> <servlet-mapping> <servlet-name>Simple</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

Ejercicios
[NombreYClub] Desarrollar una aplicacin

web que incluya la pgina HTML del ejercicio STATIC as como un servlet que conteste a la URL
UUU:8080/NombreYClub?nombre=XXX&club=YYY

con una pgina que diga Hola XXX, Viva el YYY!

Ejercicios, II
[SERV1] Escribir una aplicacin web que

complete el ejemplo visto como sigue:


El servlet SimpleServlet saluda al usuario utilizando su IP y utiliza un formulario para pedirle el nombre El servlet adicional NameServlet saluda al usuario utilizando su nombre [SERV2] Aplicacin web con un servlet que

evala operaciones numricas (sumas, restas, productos y divisiones)

Ejercicios, III
[SERV3] Aplicacin web con un servlet que pide un nmero y se llama a s mismo de nuevo. Adems, el servlet muestra la suma de las cantidades introducidas hasta el momento por todos los usuarios.

Recordatorio
Los servlets no son aplicaciones, sino partes de aplicaciones con informacin que puede tener un contexto ms amplio que el del cdigo escrito por el desarrollador (contexto de sesin o de aplicacin). Los servlets proporcionan medios para almacenar informacin vlida en los contextos de sesin y de aplicacin y para acceder a ella.

Contextos
Aplicacin: javax.servlet.ServletContext HttpServlet.getServletContext() Sesin: javax.servlet.http.HttpSession HttpServletRequest.getSession() HttpServletRequest.getSession(t) Peticin: javax.servlet.HttpServletRequest

Contextos, II
Los contextos son objetos que pueden guardar informacin en atributos (un mapa de asociacin) mediante los mtodos Object getAttribute(String) void setAttribute(String, Object) El contexto de aplicacin se pierde si el servidor se apaga. Hay mecanismos para guardarlos y cargarlos automticamente, basados en eventos. Se pueden definir para eventos ms generales.

Ejercicios
[SERVCONT1] Aplicacin web que pide una lista de nmeros y muestra la suma de ellos pidiendo a la vez otra lista, as como la suma de todos los que se han introducido en la misma sesin y de los que se han introducido desde que se arranc la aplicacin. [SERVCONT2] (Voluntario) Aplicacin web que permite guardar dos listas de objetos: una que se mantiene y se puede modificar durante una sesin y otra comn que se mantiene y se puede modificar en cualquier momento y por cualquier usuario.

Ejercicios, II
[SERVEMAILS] (Voluntario) Aplicacin web

con tres funcionalidades accesibles a travs de URLs diferentes: aadir personas y direcciones de correo electrnico a una lista comn, ver la lista de personas y correos electrnicos y pedir la direccin de correo electrnico correspondiente a un nombre.

Servlets, III
Servlet

Request (atributos) Session (parmetros) RemoteAddr

Response

ServletContext (atributos) (parmetros)

PrintWriter RequestURL EncodeURL (atributos)

RequestDispatcher

forward()

include()

Invocacin de otros recursos


ServletContext.getRequestDispatcher(String url) [Prepara un recurso de la aplicacin para su utilizacin subsiguiente en la sesin] RequestDispatcher.forward(request, response) [Reenva la solicitud. Antes de escribir en el PrintWriter de la respuesta] RequestDispatcher.include(request, response) [Solicita la respuesta y la aade a la propia] HttpServletResponse.sendRedirect(String url) [Reenvia la solicitud a un recurso externo]

Ejercicios
[SERVRED] Aplicacin web que pide una

URL y si es de la UAM la muestra y si no, no. [SERVFILTER] (Voluntario) Aplicacin web que permite gestionar un filtro de acceso a dominios de Internet.

Eventos en el ciclo de vida de Servlets


Cada vez que se crea o se destruye un contexto (ServletContext, HttpSession o ServletRequest) o se modifica uno de sus atributos, se emite un evento que reciben los objetos (listeners) registrados para ello, ejecutando acciones especificadas en el programa. Por ejemplo, un listener puede hacer que al crearse una sesin se cree una conexin a una base de datos y que todo cambio en un atributo se traslade a ella. Los mecanismos anteriores se configuran mediante el fichero web.xml.

Eventos en el ciclo de vida de Servlets, II


ServletContext Iniciacin, destruccin: ServletContextListener ServletContextEvent Session Creacin, invalidacin, activacin, pasivacin: HttpSessionListener HttpSessionEvent
HttpSessionActivationListener

Request Comienzo de procesamiento: ServletRequestListener ServletRequestEvent Creacin, borrado o cambio de atributo:


ServletRequestAttributeListener ServletRequestAttributeEvent

Creacin, borrado o cambio de atributo:


ServiceContextAttributeListener ServiceContextAttributeEvent

Creacin, borrado o cambio de atributo:


HttpSessionAttributeListener HttpSessionAttributeBindingEvent

Eventos en el ciclo de vida de Servlets, III


<listener> <description>MyKewlListener</description> <display-name>MyKewlListener</display-name> <listener-class> com.examscam.web.listener.MyKewlListener </listener-class> </listener> .

Filtros
Permiten hacer acciones sobre la peticin (Request) y la respuesta previas al tratamiento de la peticin. Ejemplo: Mantenimiento de un contador de usuarios e insercin de su valor como atributo de la respuesta. Pueden servir para varios servlets simultneamente. Los ficheros se configuran mediante el fichero web.xml.

Configuracin de filtros
<filter> <filter-name>Timer</filter-name> <filter-class>kief.FD.TimerF</filter-class> <description> Servlet timing. </description> </filter> <filter-mapping> <filter-name>Timer</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

Otros aspectos configurables en aplicaciones web (web.xml)


Escuchas (Listeners) Filtros (Filters) Duracin de la sesin Parmetros de contexto Pginas de inicio y error Pginas JSP Lista de pginas JSP especiales Propiedades de grupos de pginas JSP Recursos (bases de datos, enlaces, ) Seguridad

Ejercicios opcionales
[BLINDAEMAIL] Blindar la aplicacin de

gestin de contactos comunes por correo electrnico contra fallos en el servidor. [ SERVUTILS] Extraer clases tiles para otros programas.

Concurrencia: Precauciones
Si un servidor recibe varias peticiones dirigidas a la misma URL que corresponde a un servlet, el contenedor de servlets ejecuta en hilos diferentes el mtodo doGet o doPost sobre el mismo objeto de la clase correspondiente en vez de crear una instancia para cada peticin. Como consecuencia de lo anterior, los atributos de la clase del servlet son compartidos por todas las peticiones.

Concurrencia: Precauciones, II
Cualquier variable o recurso cuyo estado tenga un mbito ms amplio para la aplicacin que la ejecucin del mtodo doGet o doPost tiene que ser sincronizada explcitamente Ejemplo: Saldo de una cuenta corriente (independientemente de que se guarde en el servlet o en una base de datos) No es recomendable usar atributos de servlets para informacin actualizable

Control de la sincronizacin en Java


Todo objeto tiene un candado. Si un bloque de cdigo se declara como sincronizado con x, se ejecuta cuando x deja de estar bloqueado y lo bloquea durante su ejecucin. Ejemplo: f(); synchronized(x) { g(); } h();

Ejercicios
[SERVCONC1] Reescribir la aplicacin web del ejercicio [SERVCONT1] para evitar

problemas de concurrencia. [SERVCONC2] (Voluntario) Reescribir la aplicacin web del ejercicio [SERVCONT2] para evitar problemas de concurrencia. [SERVCONC3] (Voluntario) Reescribir la aplicacin web del ejercicio [SERVEMAILS] para evitar problemas de concurrencia.

Вам также может понравиться