2. Java Servlets (J2EE) - Curso 2005-2006

64
Samuel Marrero Lorenzo [email protected] 1 Java J2EE - Servlets Diseño de aplicaciones empresariales

description

Resumen de Tutorial o Curso de Java Servlets impartido durante el curso 2005-2006, y sobre los principios de este lenguaje orientado a objetos.

Transcript of 2. Java Servlets (J2EE) - Curso 2005-2006

Page 1: 2. Java Servlets (J2EE) - Curso 2005-2006

Samuel Marrero Lorenzo [email protected] 1

Java J2EE - Servlets

Diseño de aplicaciones empresariales

Page 2: 2. Java Servlets (J2EE) - Curso 2005-2006

2

Introducción a J2EE� Es un estándar para la construcción estándar para la

construcción de aplicaciones empresariales� Es una especificación basada en estándares abiertos que

facilitan el diseño, construcción , ensamblado y puesta en producción de aplicaciones empresariales

� Está basada en componentes� Ofrece un modelo para el desarrollo de aplicaciones

distribuídas multitiered, la habilidad de reusar componentes, intercambio de datos basado en XML, un manejo de transacciones flexible y un modelo de seguridad unificado.

� Está constituido por un conjunto de tecnologías estándares: Servlets, JSP, JavaBeans, EJB, JDBC, JNDI, etc.

� Las soluciones J2EE no están atadas a productos ni a interfaces de programación de ningún fabricante

Page 3: 2. Java Servlets (J2EE) - Curso 2005-2006

3

Tecnologías Web� Aplicación web

� Aplicación que corre en al menos un servidor y a la que el usuario accede desde un cliente de propósito general (ej.: navegador web en un PC, etc.)

� La comunicación en la Web gira en torno al protocolo HTTP� Protocolo de nivel de aplicación� Funciona sobre TCP� Usa el puerto 80 por defecto� Modelo petición/respuesta� Al igual que SMTP, es un protocolo ASCII, que usa MIME

para transferir información no ASCII

Page 4: 2. Java Servlets (J2EE) - Curso 2005-2006

4

Crear una aplicación web

� Para ello vamos a utilizar lo siguiente:� Un servidor web: Apache Tomcat� Un IDE de desarrollo Java: Eclipse� Un plug-in de Eclipse para manejar Tomcat: c:\java\Herramientas\tomcatpluginV3.zip

Se pueden utilizar otros IDE’s como el NetBeans y otros servidores web

Page 5: 2. Java Servlets (J2EE) - Curso 2005-2006

5

Apache Tomcat

� Es un servidor de aplicaciones web que nos permite realizar la parte servidor de nuestras aplicaciones web. � Soporta: Servlets, JSP, acceso con JDBC y manejo de transacciones entre otras cosas.

� No soporta: En la actualidad Tomcat sólo dispone de un contenedor web por lo tanto no soporta Enterprise Java Beans (EJB)

� http://jakarta.apache.org/tomcat

Page 6: 2. Java Servlets (J2EE) - Curso 2005-2006

6

Instalación y configuración de Tomcat� Instalación: Establecer la ruta de la

plataforma Java

� Establecer la variable TOMCAT_HOME = <ruta_instalación_Tomcat>

� Configuración puerto de escucha: %TOMCAT_HOME%\conf\server.xml

� Arranque y parada de Tomcat:� Para iniciar Tomcat:

%TOMCAT_HOME%\bin\startup.bat� Para parar Tomcat:

%TOMCAT_HOME%\bin\startup.bat

Page 7: 2. Java Servlets (J2EE) - Curso 2005-2006

7

Probar Tomcat

� Acceder a un navegador web y escribir la siguiente URL:� http://maquina:puerto� Siendo la máquina aquella donde estásirviendo Tomcat y el puerto TCP por el que escucha.

� El resultado será la página de bienvenida de Tomcat

Page 8: 2. Java Servlets (J2EE) - Curso 2005-2006

8

Despliegue de aplicaciones web en Tomcat� Para que Apache Tomcat pueda servir los

componentes de una aplicación web (páginas HTML, JSP, servlets, etc.) hay que desplegar la aplicación web.� Una vez desplegada la aplicación web podremos acceder a

ella desde un cliente web o navegador.� Para ello accedemos al /manager de Tomcat,

localizado en la página principal.� Y escribimos el directorio o fichero WAR donde se halla la

aplicación web que queremos desplegar. � Pulsamos en Desplegar� Hacemos click en el enlace a nuestra aplicación para poder

acceder a ella y así probar su funcionamiento

Page 9: 2. Java Servlets (J2EE) - Curso 2005-2006

9

Configuración de Tomcat[root@servidor1 bin]# ./catalina.sh run� Using TOMCAT_HOME: /usr/local/tomcat

� Directorio base de Tomcat

� Using CATALINA_HOME: /usr/local/tomcat� Directorio donde van a estar las aplicaciones web

� Using CATALINA_TMPDIR: /usr/local/tomcat/temp� Directorio de ficheros temporales de Tomcat

� Using JAVA_HOME: /usr/local/jdk� Ruta del kit de desarrollo Java

Page 10: 2. Java Servlets (J2EE) - Curso 2005-2006

10

Configuración de Tomcatserver.xml

� server.xml es el archivo principal de configuración para Tomcat, al igual que otros archivos de configuración para productos empleados en servidor puede contener una gran variedad de parámetros, sin embargo, esta guia se concentrará en los parámetros principales.

Page 11: 2. Java Servlets (J2EE) - Curso 2005-2006

11

server.xmlTags� El archivo server.xml es un archivo en XML , el cual

de no contener una estructura conforme a XML, se indicará al arranque de Tomcat; dicho archivo se encuentra bajo el directorio TOMCAT_HOME/conf

� Como cualquier otro documento en XML todo contenido entre <!-- --> es considerado un comentario, y por lo tanto cualquier parámetro que se encuentre entre estos caracteres no es utilizado por "Tomcat"; aquellos parámetros que no sean definidos dentro de server.xml son asignados un valor por defecto por Tomcat.

Page 12: 2. Java Servlets (J2EE) - Curso 2005-2006

12

<Server>

� <Server> es el elemento principal del archivo server.xml y todas las demás secciones deben encontrarse entre estas etiquetas; el atributo port indica el puerto TCP donde se espera la señal de cierre (shutdown) de Tomcat, el cual rara vez es modificado.

Page 13: 2. Java Servlets (J2EE) - Curso 2005-2006

13

<GlobalNamingResources>

� Anidado dentro de los elementos <GlobalNamingResources> es posible definir recursos JNDI para ser utilizados globalmente en Tomcat. A través de <Resource> es como define el tipo de recurso JNDI que seráutilizado y mediante <ResourceParams> se especifican los parámetros específicos que tomará el recurso en dicha instancia de Tomcat.

Page 14: 2. Java Servlets (J2EE) - Curso 2005-2006

14

<Service>

� Esta etiqueta permite configurar Tomcat para diferentes modalidades de ejecución, en el archivo server.xml"Default" se definen dos modalidades a través del atributo name; la definición asignada name="Catalina" es empleada para ejecutar Tomcat individualmente

Page 15: 2. Java Servlets (J2EE) - Curso 2005-2006

15

<Connector>

� El elemento Connector representa las conexiones (Puertos TCP) que serán abiertas por Tomcat al arranque, a su vez dentro de cada elemento Connectorse definen diversos atributos los cuales dan más detalles acerca de la conexión. � port="8080" � pruebas� port="80" � producción

Page 16: 2. Java Servlets (J2EE) - Curso 2005-2006

16

<Engine>

� Los elementos <Engine>, los cuales deben encontrarse anidados dentro de <Service>, representan el mecanismo que atenderá toda solicitud a Tomcat, esto es, toda solicitud recibida por las definiciones Connectors seráprocesada por <Engine>, los atributos de este elemento son los siguientes: � logger: Los elementos Logger le indican a Tomcathacia donde deben ser enviados los registros "Logs" :

Page 17: 2. Java Servlets (J2EE) - Curso 2005-2006

17

<Host>� Los elementos Host permiten definir varios Hosts "Virtuales"

para Tomcat, esto es, a través del elemento <Engine> se define un sitio (localhost) para atender solicitudes, a través de Host es posible definir diversos sitios "Virtuales", su configuración es la siguiente: � Context es un elemento utilizado para indicar la ubicación de las

aplicaciones ejecutadas en Tomcat , en su configuración "Default" estas aplicaciones se encuentran dentro del directorio webappsbajo el directorio raíz de Tomcat.

� Una aplicación en Tomcat o cualquier Servlet Engine(Web-Container) es un conjunto de "JSP's (Java Server Pages)" y/o "Servlets" agrupados con ciertos parámetros de arranque y seguridad, este conjunto de archivos / aplicación en todo ServletEngine es conocido como un WAR (Web-Archive).

Page 18: 2. Java Servlets (J2EE) - Curso 2005-2006

18

Ejemplo de aplicación web.HTTP1-HolaMundo� Esta aplicación muestra el mensaje Hola Mundo desde una página HTML servida desde Tomcat

� Está creada en Eclipse usando el plugin de Tomcat

� Para este ejemplo simplemente desplegaremos la aplicación desde el /manager de la consola de Tomcat

� Ponemos: HTTP1-HolaMundo y pulsamos en el botón Desplegar

Page 19: 2. Java Servlets (J2EE) - Curso 2005-2006

19

HTTP� Tipos de peticiones

� GET, POST, PUT, DELETE, TRACE, OPTIONS, HEAD� Las dos tipos de peticiones más relevantes en aplicaciones

web son GET y POST

� Ejemplo de GET� Utilizamos un navegador para acceder a� http://localhost:8080/HTTP1-HolaMundo/index.html� El navegador abre una conexión TCP al puerto indicado de la

máquina localhost (resuelve el nombre por DNS si no lo encuentra en su red) y envía una petición similar a:

GET /HTTP1-HolaMundo/ndex.html HTTP/1.0

<< Otros campos >>

Page 20: 2. Java Servlets (J2EE) - Curso 2005-2006

20

HTTP. Peticiones GET� Ejemplo de GET

� El navegador responde conHTTP/1.0 200 OK<< Otros campos >>Content-Type=text/html; ISO-8859-1<< Otros campos >><html><< Resto del contenido de la página de IS >></html>

� Parámetros en peticiones GETURL?par1=val1&par2=val2 ... &parN=valN

� Ejemplo en una página HTML...<a href=/HTTP1-

HolaMundo/respuesta.html?nombre=Tomas+Morales&ciudad=Telde></a>...

Page 21: 2. Java Servlets (J2EE) - Curso 2005-2006

21

HTTP. Peticiones GET (2)� Parámetros en peticiones GET

� Al hacer clic en el enlace anterior, se le enviaría una peticiónGET / =/HTTP1-HolaMundo/respuesta.html?nombre=Tomas+Morales&ciudad=Telde

al servidor del que nos hemos bajado la página� Caracteres en el valor de un parámetro:

� Caracteres ASCII alfanuméricos y signos . (punto), - (guión), * (asterisco) y _ (subrayado) se quedan así

� Espacio en blanco => sustituir por + � Resto de caracteres => %xy

� Las anteriores sustituciones las tiene que hacer la persona que escribe/genera el fichero

� Si un par par=val aparece más de una vez, el parámetro correspondiente es multivaluado (su valor es un vector de valores)

Page 22: 2. Java Servlets (J2EE) - Curso 2005-2006

22

Instalación del plug-in de Eclipse para Apache Tomcat

� Este plug-in de Eclipse nos facilita el desarrollo de aplicaciones web con Tomcat desde Eclipse

� Para ello descargamos en plug-in contendido en el siguiente fichero en el directorio plugins de ECLIPSE_HOME� C:\java\herramientas\tomcatPluginV3.zip, para la versión 3 de Eclipse

Page 23: 2. Java Servlets (J2EE) - Curso 2005-2006

23

Iniciar Tomcat desde Eclipse

� Iniciamos Eclipse y hacemos doble clic en la barra de herramientas.� Customize Perspective � Commands � Tomcat� Reiniciamos Eclipse

� Aparecerá en el menú de Eclipse un submenúTomcat, desde el que podemos iniciar, reiniciar y parar el servidor Tomcat

Page 24: 2. Java Servlets (J2EE) - Curso 2005-2006

24

HTTP. Peticiones POST� Peticiones POST

� Suelen usarse para enviar los datos de un formulario HTML por ejemplo� Los datos se envían como parámetros, pero éstos no forman parte de la

URL , sino que se envían como parte del cuerpo del mensaje y por tanto no son visibles en el cliente (navegador)

� Ejemplo en un formulario HTML...<form action=/HTTP2-Formulario/FormHTML.html method=POST>Nombre: <input type=“text” name=“nombre” value=“pepe”>Ciudad: <input type=“text” name=“ciudad” value=“Las Palmas de

GC”><p><input type=“submit”></form>...

Page 25: 2. Java Servlets (J2EE) - Curso 2005-2006

25

HTTP. Peticiones POST (2)

� Peticiones POST � Cuando el usuario pulsa el botón de “submit”, se envía una petición POST al servidor del que nos hemos bajado el formulario

POST /HTTP2-Formulario HTTP/1.0

<<Otros campos>>

nombre=pepe&ciudad=Las+Palmas+de+GC

Page 26: 2. Java Servlets (J2EE) - Curso 2005-2006

26

Ejemplo 2: Ejemplo de Formulario POST

� Abre el Eclipse � Importa el proyecto Eclipse: HTTP2-Formulario� Aquí tienes el código del formulario:� C:\java\HTTP2-Formulario\FormHTML.html

� Inicia Tomcat desde Eclipse� Abre un navegador e introduce:

� http://localhost:8080/HTTP2-Formulario/FormHTML.html

Page 27: 2. Java Servlets (J2EE) - Curso 2005-2006

27

Actividad. Crear una aplicación web desde Eclipse� Fichero � Nuevo � Proyecto Tomcat� Nombre del proyecto: HTTP3-Prueba� Examinar el contenido del proyecto creado por

Eclipse: � WEB-INF: classes, lib, src

� Crear una pequeña página web ‘prueba.html’situándola en el directorio base del proyecto

� Propiedades del proyecto � Recargar el contexto de la aplicación web creada

� Iniciar Tomcat� Acceder a la página desde el navegador

http://localhost:8080/HTTP3-Prueba/prueba.html

Page 28: 2. Java Servlets (J2EE) - Curso 2005-2006

28

Tecnologías web� Para la creación de aplicaciones web se pueden

seguir varias estrategias o herramientas:� Antes. CGI (Common Gateway Interface): Un programa en

lenguaje de propósito general o específico como C que realiza las funciones de la parte servidora de la aplicación

� Sencillos� Éstos crean un proceso por cada petición de cliente, por tanto, ineficientes bajo cargas elevadas

� Lógica de presentación y de aplicación mezcladas en los scriptsCGI

� Actualidad: Se han implementado otras estrategias/herramientas

Page 29: 2. Java Servlets (J2EE) - Curso 2005-2006

29

Tecnologías web. Actualidad

� En la actualidad se utilizan herramientas más eficientes� Java - J2EE: Servlets, Java Server Pages(JSP), JavaBeans, JSTL, etc,

� Microsoft - .NET: ASP.NET� LAMP:

� Linux + Apache + Mysql + …� PHP, Perl, Python

Page 30: 2. Java Servlets (J2EE) - Curso 2005-2006

30

Servlets� Cuando un usuario solicita una página HTML, se le envía una

copia de esa misma página al cliente. � estático� Hay ocasiones en las que el usuario solicita datos en tiempo

real, como conocer datos de contacto de los clientes de una empresa. � dinámico

� Un servlet permite construir páginas HTML dinámicas. � Antes CGI, ahora servlets

� Desventajas CGI: Crean un nuevo proceso por cada petición colapsando el servidor en cargas altas

� Ventajas Servlets: Los servlets, en cambio, no requieren una nueva ejecución para cada usuario reutilizando el código y los componentes (multisubprocesos) que el servidor ya tiene cargados en memoria de otras solicitudes.

Page 31: 2. Java Servlets (J2EE) - Curso 2005-2006

31

Utilidad de los servlets

� Se usan cuando:� La página web está basada en datos enviados

por el usuario.� Cuando los datos de una página web cambian

frecuentemente (informes, noticias...), se actualizan las páginas dinámicamente.

� Las páginas web que usan información desde bases de datos y otras fuentes.

� Permiten soportar sistemas como conferencias on-line sincronizando múltiples peticiones concurrentes de usuarios diferentes.

Page 32: 2. Java Servlets (J2EE) - Curso 2005-2006

32

El API javax.servlet y javax.servlet.http

� El paquete javax.servlet proporciona las clases y los interfaces necesarios para escribir servlets.

� El interface Servlet declara los métodos, pero no implementa, que manejan el servlet y su comunicación con los clientes.

� Una clase servlet debe:� Implementar el interface Servlet� o más comúnmente, extender una clase que lo implemente como

HttpServlet. (servlet http)� Cuando un servlet acepta la llamada de un cliente, recibe dos

objetos:� Un ServletRequest: encapsula la comunicación desde el cliente al

servidor� Un ServletResponse: encapsula la comunicación de vuelta desde el

servidor al cliente

Page 33: 2. Java Servlets (J2EE) - Curso 2005-2006

33

Servlets HTTP� El paquete javax.servlet.http define la clase HttpServlet que

implementa a su vez la clase general Servlet. � HttpServlet es un servlet abstracto que maneja una aplicación

básica relacionada con el manejo de una petición http. � Incluye los métodos doGet(), doPost() (equivalentes a las

operaciones de http estándar GET/POST), doPut(), doDelete(), doHead(), doTrace() y doOptions(). Todos estos métodos reciben dos objetos:

� Un HttpServletRequest: encapsula la comunicación, usando el protocolo http, desde el cliente al servidor. Subclase del objeto ServletRequest.

� Un HttpServletResponse: encapsula la comunicación, usando el protocolo http, de vuelta desde el servidor al cliente. Subclase del objeto ServletResponse.

Page 34: 2. Java Servlets (J2EE) - Curso 2005-2006

34

Servlets HTTP (2)� La operación GET representa la petición o lectura de

un objeto a una URL específica. � El método doGet() maneja GET.

� La operación POST representa la modificación o consulta de los datos del servidor.� El método doPost() maneja POST. La operación POST

permite acceder y modificar objetos del lado del servidor, como bases de datos.

� Los métodos doPut() y doDelete() permiten cargar y borrar archivos.

Page 35: 2. Java Servlets (J2EE) - Curso 2005-2006

35

Servlets. Ejemplo HolaMundoPaso 1

� Este servlet escribe en el cliente el mensaje ’Hola Mundo’

� Para crear un servlet http tenemos que extender la clase HttpServlet de la siguiente manera:

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class HolaMundo extends HttpServlet{

Page 36: 2. Java Servlets (J2EE) - Curso 2005-2006

36

Servlets. Ejemplo HolaMundoPaso 2

� Proporcionar un método doGet para enviar la respuesta al cliente

public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

…}

Page 37: 2. Java Servlets (J2EE) - Curso 2005-2006

37

Servlets. Ejemplo HolaMundoPaso 3� Dentro del método creamos un objeto de tipo PrintWiter donde escribiremos la página htmlenviada al cliente

PrintWriter ficheroHTML;res.setContentType("text/html");ficheroHTML=res.getWriter();

� El tipo de datos enviados al cliente es texto/html que será interpretado en el cliente (navegador)

Page 38: 2. Java Servlets (J2EE) - Curso 2005-2006

38

Servlets. Ejemplo HolaMundoPaso 4

� Escribimos la página al cliente con el método println

ficheroHTML.println("<html>");ficheroHTML.println("<head><title>ServletHolaMundo</title></head>");ficheroHTML.println("<body>");ficheroHTML.println("<h1>Curso Java 2 </h1>");ficheroHTML.println("<h2>Hola Mundo</h2>");ficheroHTML.println("</body></html>");

Page 39: 2. Java Servlets (J2EE) - Curso 2005-2006

39

Servlets. Ejemplo HolaMundoPaso 5

� Por último cerramos la conexión con el objeto PrintWriter

ficheroHTLM.close();

Page 40: 2. Java Servlets (J2EE) - Curso 2005-2006

40

Ciclo de vida de un servlet� Un servlet siempre tiene el mismo ciclo de vida:

� el servlet se inicializa: un servlet solo se inicia una vez durante su ciclo de vida hasta que es destruido e iniciado de nuevo. Este método solo se ejecuta una vez y nos permite por ejemplo abrir conexiones con bases de datos una sola vez, al principio, y servir peticiones de datos a clientes sin necesidad de abrir una conexión con la base de datos cada vez. Método init().

� el servlet maneja peticiones: interactuar con clientes. Métodos doGet(), doPost(), service(), etc.

� el servidor destruye el sevlet: el servidor destruye al servletllamando al método destroy() del propio servlet. Pueden haber problemas con aquellos hilos todavía en ejecución, habrá que sincronizar su terminación. Método destroy().

Page 41: 2. Java Servlets (J2EE) - Curso 2005-2006

41

Ejemplo HolaMundo.java

� Importar en Eclipse el proyecto Servlet1-HolaMundo

� Ver el código y el ciclo de vida� Código de HolaMundo.java:

� C:\java\Servlet1-HolaMundo\HolaMundo\WEB-INF\src\HolaMundo.java

Page 42: 2. Java Servlets (J2EE) - Curso 2005-2006

42

Servlets interactuando con los clientes� Muchas veces en Internet vemos conexiones a

páginas mediante el siguiente formato GET: URL?param1=valor1&param2=valor2. Esta es la forma que usa el http para enviar parámetros a las páginas.

� Los métodos proporcionados por los servlets hacen que el programador se despreocupe de tener que decodificarlos.

� Estos son los métodos de la clase HttpServletRequest: � getParameterNames() � getParameter() � getParameterValues()

Page 43: 2. Java Servlets (J2EE) - Curso 2005-2006

43

Servlets interactuando con los clientes (2)

� Para acceder a los datos del cliente en HttpServletRequest se usan:� Método getParameterNames(): devuelve los nombres de los parámetros en una Enumeration.

� Método getParameter(nombreParametro) devuelve el valor del parámetro.

� Método getParameterValues(nombreParametro): devuelve en un array de tipo String todos los valores de ese parámetro, cuando éste tenga varios valores.

Page 44: 2. Java Servlets (J2EE) - Curso 2005-2006

44

Servlets interactuando con los clientes (3)

� Para acceder a los datos del cliente en HttpServletRequest:� Método getWriter(): devuelve un objeto PrintWriter para devolver datos en formato texto al cliente

Page 45: 2. Java Servlets (J2EE) - Curso 2005-2006

45

Servlets. Ejemplo Servlet2-FormHTML

� El siguiente proyecto Eclipse solicita los datos ‘nombre’ y ‘ciudad’ al cliente, mediante la página index.html

� La respuesta es enviada a un servletllamado FormHTML.java que envía los valores de vuelta al cliente en una tabla.

Código: C:\java\Servlet2-FormHTML\FormHTML\WEB-INF\src\FormHTML.java

� Para probar la aplicación importa el proyecto en Eclipse

Page 46: 2. Java Servlets (J2EE) - Curso 2005-2006

46

Servlets. Segundo ejemplo de obtención de parámetrosimport java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class PrimerServlet extends HttpServlet{

public void service (HttpServletRequest req, HttpServletResponse res) throws IOException{

Enumeration parametros;String parametro;String valor;res.setContentType("text/html");PrintWriter out=res.getWriter();out.println("<HTML><HEAD><TITLE>Ejemplo de servlet</TITLE></HEAD>");out.println("<BODY BGCOLOR=#FFFFFF>");out.println("<h1>Guia para programadores de Java 2</h1>");out.println("<TABLE BORDER=2>");parametros=req.getParameterNames();while(parametros.hasMoreElements()){

parametro=(String) parametros.nextElement();valor=req.getParameter(parametro);out.println("<tr><td>nombre: "+parametro+"</td>");out.println("<td>valor: "+valor+"</td></tr>");

}out.println("</TABLE><br><br>");out.println("<a href=\" /examples/simple_servlets/PrimerServlet.html\">Regresar</a>");out.println("</BODY></HTML>");out.close();

}public String getServletInfo(){

return "Primer Servlet";}

}

Page 47: 2. Java Servlets (J2EE) - Curso 2005-2006

47

SingleThreadModel� Normalmente un servlet sirve a varios clientes

concurrentemente. � Para hacer que el servlet maneje sólo a un cliente a

la vez éste debe implementar el interfaceSingleThreadModel

� Esta puede ser una solución para aquellos servletsque permiten la compartición de recursos como bases de datos, y no se quiere complicar el código proporcionando mecanismos de sincronización. � La contrapartida es que las peticiones de usuario se harán

una a una con el consiguiente retardo en la respuesta.

Page 48: 2. Java Servlets (J2EE) - Curso 2005-2006

48

Empaquetado de una aplicación web (WAR)� Una aplicación web se empaqueta en un fichero .war

� Unix/Linux: jar cvf aplicacionWeb.war directorio

� El nombre de una aplicación web no tiene porque coincidir con el de su fichero .war. El nombre se decide al instalar el fichero .war

� Estructura de un fichero .war� Directorio WEB-INF/classes

� Ficheros .class que conforman la aplicación web, agrupados en directorios según su estructura en paquetes

� Directorio WEB-INF/lib� Ficheros .jar de librerías que usa la aplicación

� Se empaqueta, por defecto, sin ficheros fuentes

Page 49: 2. Java Servlets (J2EE) - Curso 2005-2006

49

Empaquetado de una aplicación web (2)� Estructura de un fichero .war

� WEB-INF/web.xml� Configuración estándar de la aplicación web� Si la aplicación necesita otros ficheros de configuración (ej.: ficheros de

configuración de Struts, ficheros de configuración propios, scripts de creación de tablas, etc.), se recomienda incluirlos debajo de WEB-INF

� Lo que hay debajo de WEB-INF sólo es visible a los servlets y páginas JSP de la aplicación

� Directorio raíz y subdirectorios� Vista de la aplicación (ej.: ficheros HTML, páginas JSP, imágenes, etc.)� Visible a los navegadores

� Un fichero .war se puede instalar/desplegar (deployment) en cualquier servidor de aplicaciones web conforme a J2EE

Page 50: 2. Java Servlets (J2EE) - Curso 2005-2006

50

Empaquetar una aplicación web en Eclipse

� En Eclipse crear o importar el proyecto� Crear entrada nombre.war en el directorio donde deseemos almacenarlo

� En Eclipse: � Seleccionar el proyecto� Propiedades � Tomcat � Exportar a WAR� Acceder al nombre.war creado anteriormente� En el menú del proyecto � Proyecto Tomcat �Exportar a WAR

Page 51: 2. Java Servlets (J2EE) - Curso 2005-2006

51

WEB-INF/web.xml<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app >

<distributable/>

<!-- ========== Servlets================ -->

<servlet>

<servlet-name>FormHTML</servlet-name>

<servlet-class>FormHTML</servlet-class>

</servlet>

... Resto de servlets de la aplicacion...

Page 52: 2. Java Servlets (J2EE) - Curso 2005-2006

52

WEB-INF/web.xml (2)<!-- ==========Servlet mapping============ --><servlet-mapping>

<servlet-name>FormHTML</servlet-name>

<url-pattern>/FormHTML</url-pattern></servlet-mapping>

... Mappings para el resto de servlets del tutorial ...

<!-- ====== Welcome page================= -->

<welcome-file-list><welcome-file>index.html</welcome-file>

</welcome-file-list></web-app>

Page 53: 2. Java Servlets (J2EE) - Curso 2005-2006

53

Tipos de URLs en HTML (1)� Las URLs que muestra el navegador empiezan por

http://localhost:8080/Servlet2-FormHTML� Son URLs absolutas� localhost:8080: máquina y puerto en el que corre el

servidor de aplicaciones (en este caso Tomcat)� /Servlet2-FormHTML: nombre de la aplicación web

� Las URLs que se usan en los ficheros HTML o en las respuestas generadas del ejemplo son de tipo pathrelativo, y en consecuencia no incluyen http://localhost:8080� Buena idea, permite instalar la aplicación en otro servidor

Page 54: 2. Java Servlets (J2EE) - Curso 2005-2006

54

Seguimiento de sesión (1)

� La API servlet ofrece un mecanismo para manejar una sesión de un cliente.

� El servlet puede mantener información sobre múltiples páginas y a través de muchas transacciones según navegue el usuario.

� En muchas aplicaciones es importante ofrecer continuidad por medio de una serie de páginas web como seguir compras en un carro de la compra.

Page 55: 2. Java Servlets (J2EE) - Curso 2005-2006

55

Seguimiento de sesión (2)� Cada navegador dispone de su propio objeto

javax.servlet.http.HttpSession en el servidor� Es posible enganchar objetos a una sesión y

recuperarlos con los métodos:� void setAttribute(String, Object)� Object getAttribute(String)

� Por motivos de escalabilidad y de que en HTTP no hay nada especial que indique que un navegador ha dejado de usar la aplicación web, cada sesión dispone de un timeout (en minutos)� Si transcurre el timeout sin que el navegador acceda a la

aplicación, el servidor destruye la sesión� Configurable en web.xml

Page 56: 2. Java Servlets (J2EE) - Curso 2005-2006

56

Seguimiento de sesión (3)� En el ejemplo

� Cada vez que un usuario hace un login, crearemos una sesión, le engancharemos su nombre de login, y lo redirigiremos a la página principal del portal

� Cada vez que el usuario accede a la página principal del portal, si ya ha hecho el login, se le saludará por su nombre (se recupera de la sesión)

� Cada vez que el usuario accede a la página principal del portal, si todavía no ha hecho el login, o su sesión ha caducado, se le redirigirá a la página de login

� Cuando un usuario hace un logout, le destruiremos la sesión y lo redirigiremos a la página principal del tutorial

Page 57: 2. Java Servlets (J2EE) - Curso 2005-2006

57

Seguimiento de sesiones (4)

� ¿ Cómo sabe el servidor de aplicaciones a quésesión está asociada cada petición HTTP que recibe ? � Mediante los siguientes mecanismos:

� Por medio de cookies: que son pequeños ficheros de texto que guardan información sobre nuestra sesión

� Por medio reescritura de la URL: se escribe datos de la sesión después de la URL

� Por medio de campos ocultos en formularios que guardan los datos asociados a nuestra sesión

Page 58: 2. Java Servlets (J2EE) - Curso 2005-2006

58

Ejemplo de seguimiento de sesión

� Esta aplicación de ejemplo permite hacer el login de un usuario

� Consta de una serie de servlets:� ServletMuestraLogin: Es la página de entrada a la aplicación donde el usuario inserta su ‘login’

� ServletProcesaLogin: � Si el ‘login’ ha sido insertado se accede a la ServletPaginaPrincipal

� Si no está validado la aplicación le redirige a la página de entrada (ServletMuestraLogin), mostrando los errores

Page 59: 2. Java Servlets (J2EE) - Curso 2005-2006

59

Ejemplo de seguimiento de sesión (2)

� ServletPaginaPrincipal: muestra la página principal del usuario, si este ha iniciado una sesión, si no se redirige a ServletMuestraLogin

� ServletProcesaLogout: procesa el logout del usuario

� LoginManager: es una clase de métodos estáticos

� login(): crea la sesión del usuario� logout(): invalida la sesión del usuario� getLoginName(): devuelve el nombre ‘login’ del usuario

Page 60: 2. Java Servlets (J2EE) - Curso 2005-2006

60

Ejemplo de seguimiento de sesión (3)

� Para desempaquetar la aplicación y probarla, vamos a seguir los siguientes pasos:� En Tomcat accedemos al /manager� Desplegamos el archivo Servlet6-SesionLogin del directorio c:\java

Page 61: 2. Java Servlets (J2EE) - Curso 2005-2006

61

Ejemplo de seguimiento de sesión (4). Código.� ServletMuestraLogin: c:\java\Servlet6-

SesionLogin\WEB-INF\src\ServletMuestraLogin.java� ServletProcesaLogin: c:\java\Servlet6-

SesionLogin\WEB-INF\src\ServletProcesaLogin.java� ServletPaginaPrincipal: c:\java\Servlet6-

SesionLogin\WEB-INF\src\ServletPaginaPrincipal.java� ServletProcesaLogout: c:\java\Servlet6-

SesionLogin\WEB-INF\src\ServletProcesaLogout.java� LoginManager: c:\java\Servlet6-SesionLogin\WEB-

INF\src\LoginManager.java

Page 62: 2. Java Servlets (J2EE) - Curso 2005-2006

62

Manejo de la sesión� Para manejar la sesión

� introducir los datos de la sesión en el objeto request:HttpSession session = request.getSession(true);session.setAttribute(“login”, login);

� obtener los datos de la sesión del objeto request:HttpSession session = request.getSession(false);if (session == null) {

return null;} else{

return (String) session.getAttribute(“login”);

}

Page 63: 2. Java Servlets (J2EE) - Curso 2005-2006

63

Redirigir la salida desde un servlet� El ejemplo, aparte de ilustrar el uso de sesiones,

hace énfasis en el uso de sendRedirect y forward� sendRedirect

� Le decimos al navegador que nos haga una nueva petición a otra URL

� forward� Nos movemos a otra URL dentro del servidor� Se conserva todo lo que había en la request� Útil para tratar errores en formularios� Los servlets de procesamiento insertan el atributo errores

(un Map) en la request� Los servlets que muestran formularios comprueban si la

request incluye el atributo errores

Page 64: 2. Java Servlets (J2EE) - Curso 2005-2006

64

Redirigir la salida desde un servlet

� ¿ Cuándo usar forward y cuándo sendRedirect ?� En principio, un forward siempre es más rápido (ocurre en el servidor)

� Un forward es preciso cuando queremos enganchar atributos a la request

� Ej.: Tratamiento de errores en formularios

� Para el resto de situaciones, es mejor usar un sendRedirect, dado que forward no cambia la URL que muestra la caja de diálogo del navegador