SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
Samuel Marrero Lorenzo
smarlor@iespana.es 1
Java J2EE - Servlets
Diseño de aplicaciones
empresariales
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
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
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:javaHerramientastomcatpluginV3.zip
Se pueden utilizar otros IDE’s como el NetBeans y otros
servidores web
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
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%confserver.xml
Arranque y parada de Tomcat:
Para iniciar Tomcat:
%TOMCAT_HOME%binstartup.bat
Para parar Tomcat:
%TOMCAT_HOME%binstartup.bat
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
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
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
10
Configuración de Tomcat
server.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.
11
server.xml
Tags
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.
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.
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.
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
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 Connector
se definen diversos atributos los cuales
dan más detalles acerca de la conexión.
port="8080" pruebas
port="80" producción
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 Tomcat
hacia donde deben ser enviados los registros
"Logs" :
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 webapps
bajo 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 Servlet
Engine es conocido como un WAR (Web-Archive).
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
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 >>
20
HTTP. Peticiones GET
Ejemplo de GET
El navegador responde con
HTTP/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 GET
URL?par1=val1&par2=val2 ... &parN=valN
Ejemplo en una página HTML
...
<a href=/HTTP1-
HolaMundo/respuesta.html?nombre=Tomas+Morales&ciudad=Telde>
</a>
...
21
HTTP. Peticiones GET (2)
Parámetros en peticiones GET
Al hacer clic en el enlace anterior, se le enviaría una petición
GET / =/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)
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:javaherramientastomcatPluginV3.zip,
para la versión 3 de Eclipse
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
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>
...
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
26
Ejemplo 2: Ejemplo de
Formulario POST
Abre el Eclipse
Importa el proyecto Eclipse: HTTP2-
Formulario
Aquí tienes el código del formulario:
C:javaHTTP2-FormularioFormHTML.html
Inicia Tomcat desde Eclipse
Abre un navegador e introduce:
http://localhost:8080/HTTP2-Formulario/FormHTML.html
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
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 scripts
CGI
Actualidad: Se han implementado otras
estrategias/herramientas
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
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.
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.
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
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.
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.
35
Servlets. Ejemplo HolaMundo
Paso 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{
36
Servlets. Ejemplo HolaMundo
Paso 2
Proporcionar un método doGet para
enviar la respuesta al cliente
public void doGet (HttpServletRequest req,
HttpServletResponse res) throws
ServletException, IOException {
…
}
37
Servlets. Ejemplo HolaMundo
Paso 3
Dentro del método creamos un objeto de tipo
PrintWiter donde escribiremos la página html
enviada 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)
38
Servlets. Ejemplo HolaMundo
Paso 4
Escribimos la página al cliente con el método
println
ficheroHTML.println("<html>");
ficheroHTML.println("<head><title>Servlet
HolaMundo</title></head>");
ficheroHTML.println("<body>");
ficheroHTML.println("<h1>Curso Java 2 </h1>");
ficheroHTML.println("<h2>Hola Mundo</h2>");
ficheroHTML.println("</body></html>");
39
Servlets. Ejemplo HolaMundo
Paso 5
Por último cerramos la conexión con el
objeto PrintWriter
ficheroHTLM.close();
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 servlet
llamando 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().
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:javaServlet1-
HolaMundoHolaMundoWEB-
INFsrcHolaMundo.java
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()
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.
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
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 servlet
llamado FormHTML.java que envía los
valores de vuelta al cliente en una tabla.
Código: C:javaServlet2-FormHTMLFormHTMLWEB-
INFsrcFormHTML.java
Para probar la aplicación importa el proyecto
en Eclipse
46
Servlets. Segundo ejemplo de
obtención de parámetros
import 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";
}
}
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 interface
SingleThreadModel
Esta puede ser una solución para aquellos servlets
que 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.
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
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
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
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...
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>
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 path
relativo, y en consecuencia no incluyen
http://localhost:8080
Buena idea, permite instalar la aplicación en otro servidor
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.
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
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
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
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
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
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
61
Ejemplo de seguimiento de
sesión (4). Código.
ServletMuestraLogin: c:javaServlet6-
SesionLoginWEB-INFsrcServletMuestraLogin.java
ServletProcesaLogin: c:javaServlet6-
SesionLoginWEB-INFsrcServletProcesaLogin.java
ServletPaginaPrincipal: c:javaServlet6-
SesionLoginWEB-INFsrcServletPaginaPrincipal.java
ServletProcesaLogout: c:javaServlet6-
SesionLoginWEB-INFsrcServletProcesaLogout.java
LoginManager: c:javaServlet6-SesionLoginWEB-
INFsrcLoginManager.java
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”);
}
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
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

Más contenido relacionado

La actualidad más candente

Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Samuel Marrero
 
Curso Java Avanzado 3 4 Js Ps Con Java Beans
Curso Java Avanzado   3 4 Js Ps Con Java BeansCurso Java Avanzado   3 4 Js Ps Con Java Beans
Curso Java Avanzado 3 4 Js Ps Con Java BeansEmilio Aviles Avila
 
Introducción al desarrollo de aplicaciones web en Java
Introducción al desarrollo de aplicaciones web en JavaIntroducción al desarrollo de aplicaciones web en Java
Introducción al desarrollo de aplicaciones web en JavaEudris Cabrera
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a TomcatIker Canarias
 
Java WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsJava WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsHernan Rengifo
 
[ES] Introdución al desarrollo de aplicaciones web en java
[ES] Introdución al desarrollo de aplicaciones  web en java[ES] Introdución al desarrollo de aplicaciones  web en java
[ES] Introdución al desarrollo de aplicaciones web en javaEudris Cabrera
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-20064. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006Samuel Marrero
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache AntIker Canarias
 

La actualidad más candente (20)

Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006Curso Java Resumen - Curso 2005-2006
Curso Java Resumen - Curso 2005-2006
 
Curso Java Avanzado 3 4 Js Ps Con Java Beans
Curso Java Avanzado   3 4 Js Ps Con Java BeansCurso Java Avanzado   3 4 Js Ps Con Java Beans
Curso Java Avanzado 3 4 Js Ps Con Java Beans
 
Resumen jee
Resumen jeeResumen jee
Resumen jee
 
Introducción al desarrollo de aplicaciones web en Java
Introducción al desarrollo de aplicaciones web en JavaIntroducción al desarrollo de aplicaciones web en Java
Introducción al desarrollo de aplicaciones web en Java
 
Curso Jsp
Curso JspCurso Jsp
Curso Jsp
 
Struts en Java
Struts en JavaStruts en Java
Struts en Java
 
20001215 Programación de Servlets y WML
20001215   Programación de Servlets y WML20001215   Programación de Servlets y WML
20001215 Programación de Servlets y WML
 
Manual Basico De Struts
Manual Basico De StrutsManual Basico De Struts
Manual Basico De Struts
 
Servicios web
Servicios webServicios web
Servicios web
 
Java con base de datos
Java con base de datosJava con base de datos
Java con base de datos
 
Introducción a Tomcat
Introducción a TomcatIntroducción a Tomcat
Introducción a Tomcat
 
Java WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsJava WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRs
 
Curso Java Avanzado 5 Ejb
Curso Java Avanzado   5 EjbCurso Java Avanzado   5 Ejb
Curso Java Avanzado 5 Ejb
 
Tutorial - REST con java (JAX-RS 2.0)
Tutorial - REST con java (JAX-RS 2.0)Tutorial - REST con java (JAX-RS 2.0)
Tutorial - REST con java (JAX-RS 2.0)
 
Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
 
[ES] Introdución al desarrollo de aplicaciones web en java
[ES] Introdución al desarrollo de aplicaciones  web en java[ES] Introdución al desarrollo de aplicaciones  web en java
[ES] Introdución al desarrollo de aplicaciones web en java
 
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-20064. Curso Java JSP (Java Server Pages) - Curso 2005-2006
4. Curso Java JSP (Java Server Pages) - Curso 2005-2006
 
MVC en CakePHP 2.0
MVC en CakePHP 2.0MVC en CakePHP 2.0
MVC en CakePHP 2.0
 
Breve introducción a Apache Ant
Breve introducción a Apache AntBreve introducción a Apache Ant
Breve introducción a Apache Ant
 
Asp.net
Asp.netAsp.net
Asp.net
 

Destacado

Apache Tomcat 8: despliegue de una aplicación mediante el interfaz
Apache Tomcat 8: despliegue de una aplicación mediante el interfazApache Tomcat 8: despliegue de una aplicación mediante el interfaz
Apache Tomcat 8: despliegue de una aplicación mediante el interfazpablozacrosuarez
 
Apache Tomcat 8: despliegue de una aplicación mediante terminal
Apache Tomcat 8: despliegue de una aplicación mediante terminalApache Tomcat 8: despliegue de una aplicación mediante terminal
Apache Tomcat 8: despliegue de una aplicación mediante terminalpablozacrosuarez
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)jbersosa
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepcionesjbersosa
 
Excepciones
ExcepcionesExcepciones
Excepcionesrilara
 
Java exceptions
Java exceptionsJava exceptions
Java exceptionsDeli_amor
 
Curso Java Inicial 7 Excepciones
Curso Java Inicial   7 ExcepcionesCurso Java Inicial   7 Excepciones
Curso Java Inicial 7 ExcepcionesEmilio Aviles Avila
 
J2EE Struts with Hibernate Framework
J2EE Struts with Hibernate FrameworkJ2EE Struts with Hibernate Framework
J2EE Struts with Hibernate Frameworkmparth
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepcionesJorge Gamez
 
excepciones_java en www.fiec.espol.edu.ec
excepciones_java  en www.fiec.espol.edu.ecexcepciones_java  en www.fiec.espol.edu.ec
excepciones_java en www.fiec.espol.edu.ecSilvana Vargas
 
Lenguajes del lado del servidor y lenguajes del lado del usuario
Lenguajes del lado del servidor y lenguajes del lado del usuarioLenguajes del lado del servidor y lenguajes del lado del usuario
Lenguajes del lado del servidor y lenguajes del lado del usuarioJessica
 

Destacado (20)

Protocolo http
Protocolo httpProtocolo http
Protocolo http
 
09practicafinal
09practicafinal09practicafinal
09practicafinal
 
12integracion de tomcat con apache
12integracion de tomcat con apache12integracion de tomcat con apache
12integracion de tomcat con apache
 
11practicafinal
11practicafinal11practicafinal
11practicafinal
 
Apache Tomcat 8: despliegue de una aplicación mediante el interfaz
Apache Tomcat 8: despliegue de una aplicación mediante el interfazApache Tomcat 8: despliegue de una aplicación mediante el interfaz
Apache Tomcat 8: despliegue de una aplicación mediante el interfaz
 
Apache Tomcat 8: despliegue de una aplicación mediante terminal
Apache Tomcat 8: despliegue de una aplicación mediante terminalApache Tomcat 8: despliegue de una aplicación mediante terminal
Apache Tomcat 8: despliegue de una aplicación mediante terminal
 
Exceptions (2)
Exceptions (2)Exceptions (2)
Exceptions (2)
 
Unidad 5: Excepciones Ejercicio 1
Unidad 5: Excepciones Ejercicio 1Unidad 5: Excepciones Ejercicio 1
Unidad 5: Excepciones Ejercicio 1
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
Gestion de errores en java
Gestion de errores en javaGestion de errores en java
Gestion de errores en java
 
Tema 10 excepciones
Tema 10 excepcionesTema 10 excepciones
Tema 10 excepciones
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Unidad 5: Excepciones Ejercicio 2
Unidad 5: Excepciones Ejercicio 2Unidad 5: Excepciones Ejercicio 2
Unidad 5: Excepciones Ejercicio 2
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
Curso Java Inicial 7 Excepciones
Curso Java Inicial   7 ExcepcionesCurso Java Inicial   7 Excepciones
Curso Java Inicial 7 Excepciones
 
J2EE Struts with Hibernate Framework
J2EE Struts with Hibernate FrameworkJ2EE Struts with Hibernate Framework
J2EE Struts with Hibernate Framework
 
Unidad 6: Flujos y Archivos Ejercicio 4
Unidad 6: Flujos y Archivos Ejercicio 4Unidad 6: Flujos y Archivos Ejercicio 4
Unidad 6: Flujos y Archivos Ejercicio 4
 
Clase 6 excepciones
Clase 6   excepcionesClase 6   excepciones
Clase 6 excepciones
 
excepciones_java en www.fiec.espol.edu.ec
excepciones_java  en www.fiec.espol.edu.ecexcepciones_java  en www.fiec.espol.edu.ec
excepciones_java en www.fiec.espol.edu.ec
 
Lenguajes del lado del servidor y lenguajes del lado del usuario
Lenguajes del lado del servidor y lenguajes del lado del usuarioLenguajes del lado del servidor y lenguajes del lado del usuario
Lenguajes del lado del servidor y lenguajes del lado del usuario
 

Similar a J2EE - Introducción a servlets y tecnologías web

Similar a J2EE - Introducción a servlets y tecnologías web (20)

Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Servlet
ServletServlet
Servlet
 
Tomcat
TomcatTomcat
Tomcat
 
JSP
JSPJSP
JSP
 
Servicios web Extendido_error perl
Servicios web Extendido_error perlServicios web Extendido_error perl
Servicios web Extendido_error perl
 
Instalación de Tomcat 7 en Linux y Windows
Instalación de Tomcat 7 en Linux y WindowsInstalación de Tomcat 7 en Linux y Windows
Instalación de Tomcat 7 en Linux y Windows
 
Tomcat y Jboss
Tomcat y JbossTomcat y Jboss
Tomcat y Jboss
 
instalacion tomcat
instalacion tomcatinstalacion tomcat
instalacion tomcat
 
Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSP
 
Asp.net
Asp.netAsp.net
Asp.net
 
Servlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y TomcatServlet Hola Mundo con Eclipse y Tomcat
Servlet Hola Mundo con Eclipse y Tomcat
 
presenjava.ppt
presenjava.pptpresenjava.ppt
presenjava.ppt
 
Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xml
 
Tomcat yant
Tomcat yantTomcat yant
Tomcat yant
 
Servicios web
Servicios webServicios web
Servicios web
 
Apache Camel
Apache CamelApache Camel
Apache Camel
 
Servicios web java php-perl-google
Servicios web java php-perl-googleServicios web java php-perl-google
Servicios web java php-perl-google
 

Último

el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFAROJosé Luis Palma
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónLourdes Feria
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdfBaker Publishing Company
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxinformacionasapespu
 

Último (20)

el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 
Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.Defendamos la verdad. La defensa es importante.
Defendamos la verdad. La defensa es importante.
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARONARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
NARRACIONES SOBRE LA VIDA DEL GENERAL ELOY ALFARO
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf2024 - Expo Visibles - Visibilidad Lesbica.pdf
2024 - Expo Visibles - Visibilidad Lesbica.pdf
 
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptxPRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
PRIMER SEMESTRE 2024 ASAMBLEA DEPARTAMENTAL.pptx
 

J2EE - Introducción a servlets y tecnologías web

  • 1. Samuel Marrero Lorenzo smarlor@iespana.es 1 Java J2EE - Servlets Diseño de aplicaciones empresariales
  • 2. 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
  • 3. 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
  • 4. 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:javaHerramientastomcatpluginV3.zip Se pueden utilizar otros IDE’s como el NetBeans y otros servidores web
  • 5. 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
  • 6. 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%confserver.xml Arranque y parada de Tomcat: Para iniciar Tomcat: %TOMCAT_HOME%binstartup.bat Para parar Tomcat: %TOMCAT_HOME%binstartup.bat
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 10 Configuración de Tomcat server.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.
  • 11. 11 server.xml Tags 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.
  • 12. 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.
  • 13. 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.
  • 14. 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
  • 15. 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 Connector se definen diversos atributos los cuales dan más detalles acerca de la conexión. port="8080" pruebas port="80" producción
  • 16. 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 Tomcat hacia donde deben ser enviados los registros "Logs" :
  • 17. 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 webapps bajo 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 Servlet Engine es conocido como un WAR (Web-Archive).
  • 18. 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
  • 19. 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 >>
  • 20. 20 HTTP. Peticiones GET Ejemplo de GET El navegador responde con HTTP/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 GET URL?par1=val1&par2=val2 ... &parN=valN Ejemplo en una página HTML ... <a href=/HTTP1- HolaMundo/respuesta.html?nombre=Tomas+Morales&ciudad=Telde> </a> ...
  • 21. 21 HTTP. Peticiones GET (2) Parámetros en peticiones GET Al hacer clic en el enlace anterior, se le enviaría una petición GET / =/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)
  • 22. 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:javaherramientastomcatPluginV3.zip, para la versión 3 de Eclipse
  • 23. 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
  • 24. 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> ...
  • 25. 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
  • 26. 26 Ejemplo 2: Ejemplo de Formulario POST Abre el Eclipse Importa el proyecto Eclipse: HTTP2- Formulario Aquí tienes el código del formulario: C:javaHTTP2-FormularioFormHTML.html Inicia Tomcat desde Eclipse Abre un navegador e introduce: http://localhost:8080/HTTP2-Formulario/FormHTML.html
  • 27. 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
  • 28. 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 scripts CGI Actualidad: Se han implementado otras estrategias/herramientas
  • 29. 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
  • 30. 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.
  • 31. 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.
  • 32. 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
  • 33. 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.
  • 34. 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.
  • 35. 35 Servlets. Ejemplo HolaMundo Paso 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{
  • 36. 36 Servlets. Ejemplo HolaMundo Paso 2 Proporcionar un método doGet para enviar la respuesta al cliente public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { … }
  • 37. 37 Servlets. Ejemplo HolaMundo Paso 3 Dentro del método creamos un objeto de tipo PrintWiter donde escribiremos la página html enviada 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)
  • 38. 38 Servlets. Ejemplo HolaMundo Paso 4 Escribimos la página al cliente con el método println ficheroHTML.println("<html>"); ficheroHTML.println("<head><title>Servlet HolaMundo</title></head>"); ficheroHTML.println("<body>"); ficheroHTML.println("<h1>Curso Java 2 </h1>"); ficheroHTML.println("<h2>Hola Mundo</h2>"); ficheroHTML.println("</body></html>");
  • 39. 39 Servlets. Ejemplo HolaMundo Paso 5 Por último cerramos la conexión con el objeto PrintWriter ficheroHTLM.close();
  • 40. 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 servlet llamando 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().
  • 41. 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:javaServlet1- HolaMundoHolaMundoWEB- INFsrcHolaMundo.java
  • 42. 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()
  • 43. 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.
  • 44. 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
  • 45. 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 servlet llamado FormHTML.java que envía los valores de vuelta al cliente en una tabla. Código: C:javaServlet2-FormHTMLFormHTMLWEB- INFsrcFormHTML.java Para probar la aplicación importa el proyecto en Eclipse
  • 46. 46 Servlets. Segundo ejemplo de obtención de parámetros import 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"; } }
  • 47. 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 interface SingleThreadModel Esta puede ser una solución para aquellos servlets que 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.
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. 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...
  • 52. 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>
  • 53. 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 path relativo, y en consecuencia no incluyen http://localhost:8080 Buena idea, permite instalar la aplicación en otro servidor
  • 54. 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.
  • 55. 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
  • 56. 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
  • 57. 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
  • 58. 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
  • 59. 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
  • 60. 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
  • 61. 61 Ejemplo de seguimiento de sesión (4). Código. ServletMuestraLogin: c:javaServlet6- SesionLoginWEB-INFsrcServletMuestraLogin.java ServletProcesaLogin: c:javaServlet6- SesionLoginWEB-INFsrcServletProcesaLogin.java ServletPaginaPrincipal: c:javaServlet6- SesionLoginWEB-INFsrcServletPaginaPrincipal.java ServletProcesaLogout: c:javaServlet6- SesionLoginWEB-INFsrcServletProcesaLogout.java LoginManager: c:javaServlet6-SesionLoginWEB- INFsrcLoginManager.java
  • 62. 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”); }
  • 63. 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
  • 64. 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