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

JDBC, Servlets y JSP

Acceso a base de datos con Java JEE: Servlets y JSP

Madrid, Noviembre de 2009

confidencialidad
Aviso: Este documento es material confidencial y propiedad de everis. Se prohbe el uso, reproduccin o la divulgacin del contenido de este material sin permiso previo y por escrito de la empresa propietaria.
Derechos de Autor 2009, everis. All rights reserved

objetivos del curso


Acceso a base de datos desde aplicaciones Java con el API JDBC Introduccin a la plataforma de desarrollo JEE (Java Platform Entreprise Edition) Desarrollar Servlets Java Desarrollar pginas JSP (Java Server Pages) Disear aplicaciones multicomponente JEE Filtros para aplicaciones WEB

ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP

5. Aplicaciones distribuidas multicomponente


6. Filtros en aplicaciones WEB

ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP

5. Aplicaciones distribuidas multicomponente


6. Filtros en aplicaciones WEB

jdbc
introduccin a las bases de datos
Aproximadamente la mitad del software que se desarrolla en la actualidad implica operaciones cliente/servidor. Bajo esta forma de trabajo, las aplicaciones se dividen tpicamente en al menos dos partes: La parte cliente, la ms cercana al usuario final, y se ocupa de la interaccin con l.

La parte servidor, que proporciona servicios a la parte cliente.


Uno de los servicios ms representativos de las aplicaciones cliente/servidor es el de acceso a datos.

La informacin se almacena en repositorios ajenos a las aplicaciones: las


bases de datos. Un software especfico se encarga de su gestin. Las aplicaciones consultan y modifican los datos dialogando con ese software gestor.
7

jdbc
introduccin a las bases de datos
Se denomina sistema gestor de bases de datos (SGBD o DBMS en ingls) al software especfico que controla la creacin, mantenimiento y el uso de bases de datos. La tipologa ms usada de SGBD en la actualidad son las bases de datos relacionales.

Estn basadas en un modelo matemtico robusto ideado por E.F. Codd a


finales de los 70 Las BD relacionales usan un lenguaje para obtener y modificar datos llamado SQL o Structured Query

Language (estndar ANSI desde 1986)

jdbc
sql
Las peticiones sobre los datos se expresan en SQL mediante sentencias Deben escribirse de acuerdo sus propias reglas sintcticas y semnticas. El gestor de la base de datos interpreta las sentencias SQL, las ejecuta, y devuelve al solicitante los resultados, completando as un intercambio peticin/respuesta. Existen cuatro sentencias primordiales en SQL de manipulacin de datos:

SELECT. Usada para consultas


INSERT. Usada para crear nuevos registros de datos UPDATE. Usada para modificar los datos de registros existentes

DELETE. Usada para eliminar registros existentes.

jdbc
antecedentes jdbc
Uno de los mayores problemas con las BD es la rivalidad que hay entre los fabricantes para proporcionar las mejores caractersticas. Cada fabricante tiene un mtodo distinto para usar su BD y sus caractersticas propias La aplicacin de acceso a BD es dependiente del fabricante, caracterstica

indeseable casi siempre.


Lo ideal es disponer de un nico mecanismo de acceso a cualquier BD de forma que, al cambiar de un fabricante a otro, la aplicacin se tenga que cambiar lo mnimo Microsoft resolvi el problema con su estndar ODBC (Open DataBase Connectivity): un controlador universal que permite el acceso de BD de un mdos estndar sin cambios de cdigo. Problema: slo funciona bajo Windows.
10

jdbc
qu es JDBC?
JDBC (o Java DataBase Connectivity) es la solucin que Sun Microsystems desarroll para trabajar con bases de datos relacionales administradas con SGBDs. Es un conjunto de interfaces i clases Java que pertenecen a los paquetes java.sql y javax.sql. Se base en el mismo concepto que ODBC

Al ser Java, es independiente de la plataforma. Proporciona la misma interfaz para

acceder a bases de datos de cualquier fabricante mediante SQL. stos proporcionan un driver (o puente) para acceder a su sistema particular.
11

jdbc
drivers
Para conectar con BD, antes es necesario un controlador o driver Los fabricantes los desarrollan y suministran la implementacin de las interfaces del API de JDBC. Existen cuatro tipos de drivers, mostrados en la siguiente figura:

12

jdbc
drivers
Tipo 1: Puente JDBC ODBC
Cliente
Aplicacin Java JDBC API Puente JDBC-ODBC

El tipo de driver ms simple Traduce las peticiones JDBC a peticiones ODBC Viene incluido con la JSE Es el mtodo ms ineficiente debido a la
ODBC Driver

doble traduccin

ODBC Protocolo nativo

BD
13

jdbc
drivers
Tipo 2: API nativa
Cliente
Aplicacin Java
JDBC API Puente JDBC Nativo

El cliente (nuestro programa) debe tener el driver instalado en su mquina, as como el programa cliente que trata con el SGBD. El driver traduce las llamadas JDBC en llamadas nativas del SGBD.
Driver nativo

Es muy eficiente en entornos cerrados pero

su radio de actuacin es a nivel local.

BD
14

jdbc
drivers
Tipo 3: Driver de red El cliente no requiere de instalacin de un
Cliente
Aplicacin Java
JDBC API Puente JDBC Nativo

driver especfico Se usa un servidor de red middleware de JDBC que permite conectar varios clientes con mltiples bases de datos.
Driver JDBC

El

servidor

traduce

las

peticiones

en

llamadas nativas al SGBD Es la solucin ms flexible de


Servidor de Red Librera fabricante

las

cuatro

porque

el

BD

servidor abstrae los detalles de la conexin.


15

jdbc
drivers
Tipo 4: Todo Java
Cliente
Aplicacin Java
JDBC API Puente JDBC Nativo

El cliente (nuestro programa) no requiere la instalacin del driver (se halla en el servidor). JDBC convierte directamente las llamadas en el protocolo de red que usa el SGBD Son los ms rpidos ya que no requieren
Driver JDBC

traduccin ni tienes software intermedio

Es necesario que el fabricante nos entregue


su driver especfico.
Servidor de Red

Es el tipo de driver ms usado

BD
16

jdbc
relacin de clases e interfaces
A continuacin

se muestran las principales clases e interfaces de la API de JDBC Sus implementaciones las realiza el

driver
de BD

proveedor

17

jdbc
relacin de clases e interfaces DriverManager Connection
Se encarga de leer todos los drivers.

Representa una conexin con una base de datos concreta Representa una sentencia SQL.
Conjunto de registros devuelto por una sentencia SELECT Proporciona informacin acerca de una base de datos como las tablas que contiene, etc.
18

Statement
ResultSet DatabaseMetadata

jdbc
conectar a una BD
Para usar una base de datos desde Java es necesario obtener una referencia a ella, que se identifica a travs de un objeto de la clase Connection. Para ello es necesario obtener antes el driver JDBC apropiado as como cargarlo en memoria. Los pasos son los siguientes:
1. Instalar el driver JDBC
Conseguir la biblioteca suministrada por el fabricante de SGBD Vincularla a nuestro programa con el Classpath

2. Cargar el driver en memoria


Invocar el mtodo esttico forName() de la clase Class

3. Obtener la conexin
Invocar DriverManager.getConnection(cadenaConexin) El parmetro contiene el protocolo, la URL y otros datos

19

jdbc
conectar a una BD
La llamada Class.forName() recibe como parmetro una cadena con el nombre cannico de la clase Java que implementa la interfaz java.sql.Driver. Esta llamada permite cargar esta clase en la memoria de la mquina virtual. Cada driver tiene su propia clase. Ver su documentacin El parmetro de Driver.getConnection() es un string que indica a JDBC cul es el gestor y la base de datos con la que queremos trabajar. La cadena tiene el

siguiente formato:
<protocolo>:<subprotocolo>:<subnombre> <protocolo> es siempre la cadena jdbc <subprotocolo> es un identificador del driver. Ver su documentacin <subnombre> es la forma de identificar la base de datos concreta. Su sintaxis depende de cada driver.
20

jdbc
conectar a una BD
Por ejemplo, para una conexin mediante el puente JDBC-ODBC a una base de datos prueba, su cadena de conexin sera: jdbc:odbc:prueba

jdbc
Protocolo

odbc
Subprotocolo

prueba
Subnombre

Para conectarse a la base de datos Oracle llamada everis ubicada en la mquina jupiter en el puerto 1522 su cadena de conexin sera: jdbc:oracle:thin:@jupiter:1522:everis

21

jdbc
ejemplos de conexin
// En este ejemplo usaremos las dos conexiones de la diapositiva // anterior (puente ODBC y Oracle) //Conexin puente JDBC-ODBC //1. Carga del driver en memoria Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); //2. Cadena de conexin String sURL = jdbc:odbc:prueba; //3. Obtencin de la conexin Connection conn = DriverManager.getConnection(sURL, juan, clave);

//Conexin Oracle Class.forName(oracle.jdbc.driver.OracleDriver); String sURL = jdbc:oracle:thin:@jupiter:1522:everis; Connection conn = DriverManager.getConnection(sUrl, Juan, clave);

22

jdbc
puente JDBC - ODBC
Para los ejemplos de este manual usaremos una base de datos Access 2003 Conectaremos nuestra aplicacin Java con esta base de datos mediante el puente JDBC-ODBC. Aunque es la solucin menos eficiente es la ms rpida puesto que JDBC lleva incorporado en su biblioteca el puente (y no hemos de obtener otros drivers de un fabricante).

La base de datos tendr una nica tabla llamada empleados con la siguiente
estructura:

23

jdbc
agregar un origen de datos
Para agregar un origen de datos desde un archivo Access es necesario seguir los siguientes pasos: Ir a Panel de Control Herramientas Administrativas Orgenes de datos (OBBC). Se abrir una ventana. Hacer clic en la pestaa DSN de sistema

Hacer clic en el botn Agregar


De un listado de controladores, seleccionar Driver de Microsoft Access Al finalizar, aparece una nueva ventana:

Rellenar el campo Nombre del origen de datos (Importante! Este nombre


ser el subnombre en JDBC cuando establezcamos conexin). Escoger la base de datos en el botn Seleccionar (debe ser *.mdb) Hacer clic en aceptar y ya se ha creado el origen de datos
24

jdbc
sentencias SQL
Antes de empezar con la manipulacin de datos con JDBC, haremos un repaso de las sentencias SQL ms comunes. Sentencia INSERT Crea un nuevo registro (fila o tupla) en una tabla concreta. INSERT INTO <tabla> VALUES ( <atributos de la tabla> )

Se puede especificar a qu columnas daremos valores si ponemos sus


nombres entre parntesis despus de la tabla Ejemplo:

INSERT INTO empleados(nombre, categ, sueldo, dept)


VALUES (Fernando Francs, Presidente, 300000, Presidencia )

25

jdbc
sentencias SQL
Sentencia UPDATE Actualiza los atributos de un conjunto de registros UPDATE <tabla> SET <atributos a actualizar> WHERE <condicin>

<atributos a actualizar> es un listado separado por comas de pares


atributo = valor <condicin> es una expresin lgica. Se actualizarn aquellas filas que

cumplan con la condicin


Ejemplo: subir el sueldo un 5% a todos los empleados que sean gerentes UPDATE empleados SET sueldo = sueldo * 1.05 WHERE categ = Gerente

26

jdbc
sentencias SQL
Sentencia DELETE Borra un conjunto de registros DELETE FROM <tabla> WHERE <condicin> <condicin> es una expresin lgica. Se eliminarn aquellas filas que

cumplan con la condicin


Ejemplo: borrar el empleado con identificador 495 DELETE FROM empleados

WHERE idEmpl = 495

27

jdbc
sentencias SQL
Sentencia SELECT Consulta que devuelve un conjunto de resultados de datos SELECT * | <conjunto atributos> FROM <tablas> WHERE <condicin>

[GROUP BY <conjunto atributos>]


[ORDER BY <conjunto atributos>] Las consultas pueden implicar a ms de una tabla y podemos sacar una

mezcla de atributos de stas.


La partcula GROUP BY sirve para agrupar datos siguiendo unos criterios. La partcula ORDER BY ordena datos siguiendo unos criterios
28

jdbc
sentencias SQL
Ejemplo 1: cargar completamente la tabla SELECT * FROM empleado Ejemplo 2: buscar todos los atributos del empleado que tenga ID 4105 SELECT * FROM empleado WHERE idEmpl = 4105

Ejemplo 3: buscar el nombre y sueldo de los empleados de categora Senior


SELECT nombre, sueldo FROM empleado WHERE categ = Senior

Ejemplo 4: buscar la media del sueldo de los empleados de categora Junior cuyo
nombre es David SELECT AVG(sueldo) FROM empleado WHERE categ = Junior AND nombre LIKE David%
29

jdbc
la clase Statement
JDBC utiliza la clase Statement para lanzar consultas contra la base de datos. No se instancian con new. Se obtienen a travs del objeto Connection. Para realizar consultas (sentencias

SELECT), se usa el mtodo


executeQuery(). Usaremos su forma ms sencilla, que recibe como parmetro

la consulta SQL como string.


El resultado de invocar el mtodo es un objeto de la clase ResultSet Para realizar consultas que impliquen modificaciones (INSERT, UPDATE, DELETE, etc.) se usa el mtodo executeUpdate(). Como en la anterior, recibe como parmetro la consulta SQL.
30

jdbc
modificacin de tablas
A continuacin se muestra los pasos que hay que hacer para llevar a cabo una sentencia que modifica el estado de una tabla (INSERT, UPDATE o DELETE)
1. Obtener la conexin con la BD
Ya visto anteriormente

2. Construir la sentencia SQL


La consulta es un string

3. Preparar un objeto Statement


Se invoca createStatement() de la clase Connection

4. Ejecutar la sentencia SQL de actualizacin


A travs del mtodo executeUpdate() y la sentencia

5. Cerrar los objetos


Liberar los recursos pedidos a travs del mtodo close()

31

jdbc
modificacin de tablas: ejemplo
try{ //1. Obtener la conexin con la BD // Asumimos que ya disponemos de un objeto Connection conn //2. Construir la sentencia SQL String query = INSERT INTO empleados(nombre, categ, sueldo, dept)+ VALUES (Juanito, Junior, 18000, Banca); //3. Preparar un objeto Statement Statement stmt = con.createStatement(); //4. Ejecutar la sentencia SQL de actualizacin stmt.executeUpdate(query); //5. Cerrar los objetos stmt.close(); conn.close(); }catch(SQLException e){ System.err.println(Error en la base de datos: + e.getMessage()); }
32

jdbc
la clase ResultSet
Un ResultSet (o conjunto de resultados) es un conjunto de registros de una o varias tablas que el SGBD devuelve como consecuencia de una consulta de informacin (sentencia SELECT). Los ResultSet no existen fsicamente Son una instantnea en memoria de la situacin de los datos cuando se pidieron. No se carga toda la base de datos en memoria, slo el subconjunto de datos que devuelve la consulta. Los ResultSet no se refrescan. Si una tercera persona actualiza los datos en la BD, los cambios no se reflejan en el ResultSet.
33

jdbc
la clase ResultSet
La navegacin por los datos de un ResultSet se asemeja a la de un cursor (especie de puntero a registro). El acceso es secuencial, de forma que un y slo un registro se halla activo cada vez. La versin 2.0 de JDBC permite acceso no secuencial (ver ms adelante).

Una vez un registro est activo, se pueden acceder a los datos de cualquier
columna. Podemos acceder por el nombre o por el ndice de columna. Importante! Cuando JDBC devuelve un ResultSet, el cursor al registro

activo est en la posicin anterior al primer registro (una especie de ndice -1),
por lo que primero que hay que hacer es avanzar el cursor hacia esa posicin.

34

jdbc
consulta de tablas
A continuacin se muestra los pasos que hay que hacer para llevar a cabo una sentencia que consulta los datos de una tabla (SELECT)
1. Obtener la conexin con la BD
Ya visto anteriormente

2. Construir la sentencia SQL


La consulta es un string

3. Preparar un objeto Statement


Se invoca createStatement() de la clase Connection

4. Ejecutar la sentencia SQL de consulta


A travs del mtodo executeQuery() y la sentencia La ejecucin devuelve un objeto ResultSet

5. Navegar por el conjunto de resultados


Invocar el mtodo next() del objeto ResultSet. Mientras devuelva true, quedan registros En cada iteracin de registro, invocar los mtodos getXxx() de ResultSet, dependiendo del tipo de dato

6. Cerrar los objetos


Liberar los recursos pedidos a travs del mtodo close()

35

jdbc
consulta de tablas: ejemplo
//1. Obtener la conexin con la BD (asumimos que ya existe) //2. Construir la sentencia SQL String query = SELECT nombre, sueldo FROM empleado + WHERE categ = senior; //3. Preparar un objeto Statement Statement stmt = con.createStatement(); //4. Ejecutar la sentencia SQL de consulta y captura del ResultSet ResultSet rs = stmt.executeQuery (query); //5. Navegar por el conjunto de resultados //next() posiciona el cursor al siguiente registro y nos indica si //existen an ms registros while(rs.next()){ String nombre = rs.getString(1); //posicin ordinal int sueldo = rs.getInt(sueldo); //nombre de columna System.out.format(El empleado %s cobra %d, nombre, sueldo); } //5. Cerrar los objetos rs.close(); stmt.close(); conn.close();
36

jdbc
sentencias preparadas
Cada vez que se enva una sentencia SQL al SGBD, ste ltimo debe realizar una

serie de pasos para ejecutarla (llamados genricamente compilacin):


El primer paso es hacer un anlisis sintctico para comprobar que est bien construida. Los otros pasos consisten en optimizacin de recursos y tiempo. Supongamos que se quiere ejecutar una misma sentencia varias veces (por ejemplo, est en un bucle o bien cambia el valor de un parmetro) Por lo visto anteriormente, el SGBD hara el anlisis sintctico y la optimizacin a cada peticin, cosa que hace el proceso muy ineficiente. Lo ptimo sera que el SGBD validara nicamente una vez la sentencia y la guardara para futuros usos. Eso es posible gracias a las sentencias preparadas.
37

jdbc
sentencias preparadas
La clase Java que permite tal cosa se llama PreparedStatement Es una subinterfaz de Statement, luego comparten mtodos. Ventajas respecto a un Statement La ejecucin es mucho ms rpida al tratarse de sentencias precompiladas. Una nica compilacin y mltiples ejecuciones.

Se pueden utilizar parmetros en la sentencia en forma de interrogaciones


(?). No hace falta construir sentencias concatenando Strings. Ejemplo: select sueldo from empleado where idEmpl = ?

Son ms seguras frente a problemas como la inyeccin SQL


Los PreparedStatement se obtienen invocando el mtodo

prepareStatement() de la clase Connection.

38

jdbc
sentencias preparadas: consideraciones
La llamada al mtodo prepareStatement() se hace siempre proporcionando la sentencia SQL que se quiere ejecutar (un String). Antes de ejecutar un executeUpdate() o executeQuery(), se deben indicar los valores para los parmetros variables (las ?) Los valores se indican con mtodos setXxx(pos, valor), donde Xxx es el

tipo de datos.
Mientras que el segundo parmetro es el valor en s que sustituir a ?, el primero es la posicin que ocupa cada ? (1 para el primero, 2 para el segundo,

etc.).
Se lanza una excepcin si no se informan todos los parmetros al ejecutar la sentencia. executeUpdate() y executeQuery() no tienen parmetros.
39

jdbc
sentencias preparadas: ejemplo
//1. Obtener la conexin con la BD (asumimos que ya existe) //2. Construimos la sentencia SQL con parmetros String query = SELECT * FROM empleado + WHERE categ = ? AND dept = ?; //3. Creamos un objeto PreparedStatement con la sentencia anterior // Se enviar la sentencia al SGBD y la precompilar PreparedStatement ps = con.prepareStatement(query); //4. Aadimos los valores de los parmetros variables ps.setString(1, Junior); //categ: atributo de texto ps.setInt(2, 13); //dept: atributo numrico //5. Ejecutamos la sentencia como si de un Statement se tratase ResultSet rs = ps.executeQuery();

40

jdbc
transacciones
Una transaccin es un conjunto de una o ms sentencias SQL que comprenden una unidad lgica de trabajo. Cuando se ejecuta la transaccin, se ejecutan todas las sentencias. Si cualquiera de ellas falla, se deshacen todos los cambios desde el inicio. Existen dos formas de finalizar una transaccin: COMMIT: todas las operaciones se han realizado sin errores y se han hecho

permanentes los cambios


ROLLBACK: una operacin ha generado un error y se aborta la transaccin. Todos los cambios desde el inicio de esta ltima se pierden.
41

jdbc
transacciones
JDBC tiene dos modos de trabajo con transacciones: Auto-commit activado (por defecto). Cada sentencia SQL se trata de forma individual como una transaccin. Se produce commit cuando finaliza. Auto-commit desactivado. Todas las sentencias SQL se incluyen en la transaccin actual y es el programador quien debe indicar si hay commit o

rollback.
El modo de trabajo se establece con el mtodo setAutoCommit(true/false) de la clase Connection. Recibe como parmetro un boolean que activa o

desactiva el modo.
Al trabajar en el modo desactivado, se han de invocar los mtodos de la clase Connection commit() o rollback() en funcin de si se quiere aceptar o cancelar la transaccin.
42

jdbc
transacciones: ejemplo
try{ //1. Obtener la conexin con la BD (asumimos que ya existe) //2. Indicar al programa que trabajamos sin auto-commit con.setAutoCommit(false); //3. Construimos dos sentencias SQL String queryUpd = UPDATE empleado SET sueldo = ? WHERE idEmpl = ?; String queryDel = DELETE FROM empleado WHERE idEmpl = ?; //4. Creamos dos PreparedStatement PreparedStatement psUpd = con.prepareStatement(queryUpd); PreparedStatement psDel = con.prepareStatement(queryDel); //5. Aadimos los valores de los parmetros variables psUpd.setInt(1,20000); psUpd.setInt(2, 23); psDel.setInt(1, 13); //6. Ejecutamos las sentencias psUpd.executeUpdate(); psDel.executeUpdate(); //7.1 No hay error: aceptamos cambios ps.commit(); } catch(SqlException ex){ //7.2 Ha habido algun error: deshacemos cambios ps.rollback(); }
43

ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP

5. Aplicaciones distribuidas multicomponente


6. Filtros en aplicaciones WEB

44

Introduccin a la plataforma JEE


caractersticas
Tras completar este apartado sers capaz de: Describir las caractersticas generales de la tecnologa J2EE (o JEE) Describir los distintos componentes que forman J2EE Conocer los tipos de clientes J2EE

45

Introduccin a la plataforma JEE


caractersticas
Esta plataforma de desarrollo proporciona el marco de trabajo necesario para la creacin y despliegue de aplicaciones en red. Existen tres ediciones de la plataforma Java 2: Java 2 Estndar Edition J2SE (actualmente JSE) Java 2 Enterprise Edition JEE Java 2 Micro Edition JME

46

Introduccin a la plataforma JEE


caractersticas
J2EE es una arquitectura multicapa para implementar aplicaciones de tipo

empresarial y aplicaciones basadas en la Web. Esta tecnologa soporta una gran variedad de tipos de aplicaciones, desde las tipo Web de gran escala a las pequeas de tipo cliente servidor. El objetivo principal de J2EE es crear un simple modelo de desarrollo para aplicaciones empresariales utilizando componentes basados en el modelo de aplicacin. En este modelo dichos componentes utilizan servicios proporcionados por un servidor de aplicaciones, que de otro modo tendran que estar incorporados en el cdigo de la aplicacin. Es importante resear que esto podra no ser lo ideal para todos los escenarios: por ejemplo, una pequea aplicacin se cubrira mejor utilizado una solucin de la tecnologa Java de peso ligero (por ejemplo, Servlets, JSPs, etc.).

47

Introduccin a la plataforma JEE


tipos de tecnologas soportadas
Aplicaciones clientes y Applets. Componentes que se ejecutan en el lado cliente. Servlets y pginas JSP. Son componentes que se ejecutan en el lado del servidor. Los Enterprise Java Beans; son los componentes de negocio que se ejecutan en el servidor de aplicaciones. Otras tecnologas y servicios adicionales incluyen: JDBC. API que ofrece acceso a bases de datos relacionales. JTA/JTS. (Java Transaction API/Java Transaction Service), como soporte de transacciones para componentes JEE. JMS (Java Message Service), para comunicar asncronamente componentes J2EE JNDI (Java Naming and Directory Interface), usado para acceder a directorios y nombres. Todos estos componentes escritos en Java, se ensamblan en una aplicacin JEE, se verifica que estn bien formados y cumplen la especificacin JEE y se despliegan en el entorno de produccin, donde se ejecutan y son controlados por el servidor de aplicaciones JEE.
48

Introduccin a la plataforma JEE


arquitectura de n capas

49

Introduccin a la plataforma JEE


arquitectura de n capas
Para mejorar la escalabilidad y modularizacin, la tecnologa J2EE separa una aplicacin empresarial en varias capas: la capa cliente, la capa Web, la capa EJB y la capa EIS (Enterprise Information Systems). Capa, es una particin lgica de los componentes involucrados en un sistema. Cada capa esta emparejada con las capas adyacentes. La capa cliente muestra la informacin y recoge la entrada del usuario. J2EE soporta distintos tipos de presentacin cliente, como HTML, Applets, XML, pero tambin de clientes que no usan tecnologa Java, como aplicaciones, CORBA o COM (Component Object Model). La capa Web acepta entradas del usuario desde HTML, Applets y clientes XML y genera respuestas apropiadas para el usuario. Esta capa se implementa por medio de servlets/JSP. La capa EJB (capa de negocio) es la base de la tecnologa J2EE. Ofrece la arquitectura escalable para ejecutar lgica de negocio en un entorno distribuido. Los Entity Beans soportan la persistencia de datos mientras los Session Beans soportan el proceso a favor del cliente.

50

Introduccin a la plataforma JEE


clientes JEE
Normalmente hay dos tipos de clientes J2EE, clientes Web y aplicaciones, tal como se vio en la figura anterior. Un cliente Web consta de dos partes, pginas Web dinmicas que contienen distintos tipos de lenguajes de marcas que son generados por los componentes Web que se ejecutan en la capa Web, y un navegador Web que dibuja las pginas recibidas desde el servidor. Otra categora de clientes Web son los conocidos como clientes thin (ligeros). Este tipo de pequeos clientes normalmente no hacen cosas como consultas a bases de datos o ejecutar complejas reglas de negocio. Cuando se utilizan clientes ligeros, las operaciones de peso como estas, las manejan los beans enterprise que se ejecutan en el servidor J2EE donde pueden tratar con la seguridad, los servicios y el rendimiento de las tecnologas del lado del servidor J2EE.

51

Introduccin a la plataforma JEE


clientes JEE
Una pgina recibida en la capa cliente puede incluir un applet embebido. Un applet es una pequea aplicacin escrita en Java que se ejecuta en la JVM instalada en el navegador Web del cliente. Sin embargo los sistemas cliente necesitarn el plug-in Java y posiblemente un fichero de poltica de seguridad para poder ejecutar con xito los applets en el navegador. Normalmente, los componentes Web son el API preferido para crear programas clientes Web porque no necesitan plug-ins ni ficheros de seguridad en el cliente.

52

Introduccin a la plataforma JEE


clientes JEE
Adems, esto permite un diseo ms claro y modular de la aplicacin porque proporciona un significado a la separacin de la lgica de la aplicacin del diseo de la pgina Web.

Una aplicacin cliente se ejecuta sobre una mquina cliente y proporciona una forma para que los usuarios puedan manejar tareas que requieren un interfaz de usuario ms rico que el que puede proporcionar un lenguaje de marcas. Normalmente tienen un interfaz grfico de usuario (GUI) creado con los APIs Swing o AWT. Las aplicaciones cliente acceden directamente a los beans enterprise que se ejecutan en la capa de negocio, pero si se necesita un cliente Web pueden abrir una conexin HTTP para establecer una conexin HTTP para comunicarse con un servlet de la capa Web.

53

Introduccin a la plataforma JEE


componentes Web
Los componentes Web de J2EE pueden ser servlets o pginas JSP. Los servlets son clases Java que procesan dinmicamente las peticiones y crean las respuestas. Las JSP son documentos de texto que se ejecutan como servlets pero de modo ms eficiente.

La capa Web podra incluir componentes Java Beans para manejar la entrada del usuario y enviar esta entrada a los beans enterprise que se ejecutan en la capa de negocio para su procesamiento segn se ve en la figura superior.
54

Introduccin a la plataforma JEE


componentes de negocio
El cdigo de negocio, que es la lgica que resuelve o cumple las necesidades de un negocio particular, como la banca, la venta o la financiacin, se maneja mediante beans enterprise que se ejecutan en la capa de negocio

55

Introduccin a la plataforma JEE


la capa del sistema de informacin empresarial
La capa del sistema de informacin empresarial (EIS), maneja el software del sistema de informacin empresarial e incluye la infraestructura del sistema as como los planning de recursos (ERP), procesamiento de transacciones a mainframes, sistemas de bases de datos y otros sistemas de informacin legales (personalizados). Los componentes de aplicaciones J2EE podran necesitar acceder a estos sistemas de informacin empresariales para conectividad con sus bases de datos.

56

Introduccin a la plataforma JEE


contenedores JEE
Los contenedores J2EE proporcionan acceso a los servicios subyacentes del entorno del servidor J2EE mediante contenedores para diferentes tipos de componentes.

Tradicionalmente, los desarrolladores de aplicaciones tenan que escribir cdigo para el manejo de transacciones, manejo del estado, multi-threads, almacenamiento de recursos, etc. Ahora el contenedor J2EE proporciona estos servicios permitiendo el poder concentrarse en resolver los problemas de negocio. Los contenedores son el nexo entre un componente y la funcionalidad de bajo nivel especfica-de-la-plataforma que soporta el componente. Por ejemplo, antes de poder ejecutar un componente Web, un bean enterprise o un componente de una aplicacin cliente, debe ensamblarse dentro de una aplicacin J2EE y desplegarse dentro de su contenedor.

57

Introduccin a la plataforma JEE


contenedores JEE
Un contenedor de aplicaciones cliente maneja la ejecucin de los componentes de la aplicacin cliente mientras que un contenedor de Applets maneja la ejecucin de los applets. Normalmente estn en el JRE (Java Runtime Environment) y el navegador Web compatible con Java, respectivamente.

58

Introduccin a la plataforma JEE


empaquetado
Para poder desplegar una aplicacin J2EE, despus de desarrollar los diferentes componentes, se empaquetan en ficheros de archivo especiales que contienen los ficheros de las clases relevantes y los descriptores de despliegue XML.

Estos descriptores de despliegue contienen informacin especfica de capa componente empaquetado y son un mecanismo para configurar el comportamiento de la aplicacin en el momento del ensamble o del despliegue. Estos se empaquetan en diferentes tipos de archivos segn los distintos componentes.

59

Introduccin a la plataforma JEE


empaquetado
Los componentes Web se empaquetan en un archivo Web (.war) que contiene los servlets, las pginas JSP y los componentes estticos como las pginas HTML y las imgenes.

El fichero .war contiene clases y ficheros utilizados en la capa Web junto con un descriptor de despliegue de componentes Web. Los componentes de negocio se empaquetan en un archivo Java (.jar) que contiene los descriptores de despliegue EJB, los ficheros del interface remoto y del objeto junto con ficheros de ayuda requeridos por el componente EJB.
Los ficheros de clases del lado del cliente y los descriptores de despliegue se empaquetan en un fichero Java (.jar) que crea la aplicacin cliente. Una aplicacin J2EE se empaqueta en un archivo enterprise (.ear) que contiene toda la aplicacin junto con el descriptor de despliegue que proporciona informacin sobre la aplicacin y sus componentes:

60

Introduccin a la plataforma JEE


empaquetado

61

Introduccin a la plataforma JEE


roles de la plataforma JEE
La construccin de los diferentes componentes de una aplicacin J2EE implica a varios roles en el desarrollo, despliegue y control de una aplicacin empresarial. El proveedor de componentes de aplicacin desarrolla componentes J2EE reutilizables, que pueden ser componentes Web, EJBs, applets, o aplicaciones clientes para utilizar en aplicaciones J2EE. El ensamblador de aplicaciones toma todos los bloques de los diferentes proveedores de componentes y los combina en aplicaciones J2EE. El desarrollador es el responsable de la instalacin/despliegue de los componentes en un entorno o servidor J2EE. El administrador del sistema es el responsable de configurar y administrar los sistemas informticos en una empresa. El proveedor de herramientas es un vendedor utilizado para desplegar, empaquetar y desplegar aplicaciones J2EE.
Nota: Todos los roles mencionados se pueden asignar a personas u organizaciones.

62

ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP

5. Aplicaciones distribuidas multicomponente


6. Filtros en aplicaciones WEB

63

Servlets Java
la arquitectura cliente - servidor
En la actualidad, la mayora de aplicaciones utilizadas en entornos empresariales estn construidos en torno a una arquitectura denominada clienteservidor, en la cual uno o varios computadores (generalmente de una potencia considerable) son los servidores, que proporcionan servicios a un nmero mucho ms elevado de clientes conectados a travs de la red. A veces los servidores hacen un papel de intermediarios entre los clientes y otros servidores ms especializados (por ejemplo, los grandes servidores de bases de datos corporativos basados en mainframes y sistemas Unix. En este caso se habla de arquitectura de varias capas. Con el auge de Internet, la arquitectura clienteservidor ha adquirido una mayor relevancia, ya que la misma es el principio bsico de funcionamiento de la World Wide Web: un usuario que mediante un browser (cliente) solicita un servicio (pginas html, etc.) a un computador que hace las veces de servidor.

64

Servlets Java
la arquitectura cliente - servidor

1) Peticin de pgina html

2) Envo de pgina

En su concepcin ms tradicional, los servidores http se limitaban a enviar una pgina html cuando el usuario la solicitaba directamente o bien pinchaba sobre un enlace.
La interactividad de este proceso era mnima, ya que el usuario poda pedir ficheros, pero no enviar sus datos personales de modo que fueran almacenados en el servidor u obtuviera una respuesta personalizada.

65

Servlets Java
la arquitectura cliente - servidor
Comunicacin Cliente Servidor: Resumen El cliente realiza una solicitud HTTP a la capa intermedia (servidor web). El servidor web procesa la solicitud. Se genera una respuesta en el formato adecuado y es enviada al cliente. El cliente procesa la respuesta.

66

Servlets Java
la arquitectura cliente - servidor
La arquitectura Cliente - Servidor Desde esta primera concepcin del servidor http como mero servidor de ficheros html, el concepto ha ido evolucionando en dos direcciones complementarias: Aadir ms inteligencia en el servidor, y Aadir ms inteligencia en el cliente Las formas ms extendidas de aadir inteligencia a los clientes (a las pginas html) han venido de la mano de JavaScript y las applets de Java. Javascript es un lenguaje relativamente sencillo, interpretado cuyo cdigo fuente se aade en la pgina html por medio de la etiqueta <SCRIPT>...</SCRIPT>; su nombre deriva de una cierta similitud sintctica con Java.

Las applets tienen mucha ms capacidad de aadir inteligencia a las pginas html que se muestran en el navegador, ya que son verdaderas clases de Java que se cargan y se ejecutan en el cliente.
67

Servlets Java
la arquitectura cliente - servidor
Los comienzos: CGI En nuestro caso tiene ms inters los caminos seguidos para aadir ms inteligencia en el servidor http. La tcnica primera que ms se ha utilizado ha sido la de los programas CGI (Common Gateway Interface), unida a los formularios html. Los formularios html permiten de alguna manera invertir el sentido del flujo de la informacin. Cumplimentando algunos campos con cajas de texto, botones de opcin y de seleccin, el usuario puede definir sus preferencias o enviar sus datos al servidor. Cuando en un formulario html se pulsa el botn Enviar (o Submit) los datos tecleados por el cliente se envan al servidor para su procesamiento. Cada formulario lleva incluido un campo llamado Action con el que se asocia el nombre del programa que se va a ejecutar en el servidor. El servidor arranca dicho programa y le pasa los datos que han llegado con el formulario. Existen dos formas fundamentales de pasar los datos del formulario al programa CGI:

68

Servlets Java
la arquitectura cliente - servidor
Los comienzos: CGI Por medio de una variable de entorno del sistema operativo del servidor, de tipo cadena (mtodo GET). Por medio de un flujo de caracteres que llega a travs de la entrada estndar (stdin o System.in) que de ordinario est asociada al teclado (mtodo POST). En cualquier caso, lo primero que tiene que hacer el programa CGI es decodificar esta informacin y separar los valores de los distintos campos. Despus ya se puede realizar su tarea especfica: escribir en un fichero o base de datos, realizar una bsqueda de la informacin solicitada, realizar comprobaciones, etc.

69

Servlets Java
la arquitectura cliente - servidor
Funcionamiento de CGI

1 2 CLIENTE 5 INTERNET 4 CGI 3


SERVIDOR WEB

70

Servlets Java
la arquitectura cliente - servidor
Funcionamiento de CGI La interfaz de pasarela comn (Common Gateway Interface), es un protocolo genrico que permite extender las capacidades de HTTP y aaden funcionalidad al servidor Web. A continuacin vemos una tabla comparativa entre GET y POST.
Accin Aade los datos con que se rellena el formulario al URL solicitado? Limita la cantidad de datos que se pasan al URL solicitado? Usado tpicamente fuera de formularios HTML? GET S S S POST N N N

Utiliza la variable de entorno QUERY_STRING del servidor?


Enva los datos al URL solicitado en una transaccin separada con el servidor? Utiliza las variables del servidor CONTENT-TYPE y CONTENT-LENGTH? Puede escribir datos en el servidor?

S
N N N

N
S S S
71

Servlets Java
la arquitectura cliente - servidor
Normalmente, el programa CGI finaliza enviando al cliente (el navegador desde el que se complet el formulario) una pgina html dinmica en la que le informa de las tareas realizadas, le avisa de si se ha producido alguna dificultad, le reclama algn dato pendiente o mal cumplimentado, etc. La forma de enviar esta nueva pgina html al cliente es a travs de la salida estndar (stdout o System.out), que por lo general est asociada con la pantalla. La pgina ha de ser construida elemento a elemento, de acuerdo con la sintaxis del lenguaje html (y de ah que se denomine dinmica). No basta enviar el contenido: Hay que enviar tambin todas y cada una de las restantes etiquetas.

72

Servlets Java
la arquitectura cliente - servidor
Es importante resaltar que estos procesos tienen lugar en el servidor. Esto a su vez puede resultar problemtico, ya que al tener mltiples clientes conectados al servidor, el programa CGI puede estar siendo llamado simultneamente por muchos clientes, con el riesgo de que dicho servidor se pueda llegar a saturar. Tngase en cuenta que cada vez que se recibe una peticin se carga una nueva copia (instancia) del programa CGI. Existen otros riesgos adicionales que estudiaremos ms adelante. El objetivo de este tema es el estudio de la alternativa que la plataforma Java ofrece a los programas CGI: los servlets, que son a los servidores lo que las applets a los clientes. Se podra definir un servlet como un programa escrito en Java que se ejecuta en el entorno de un servicio de red (un servidor http, por ejemplo) y que recibe y responde a las peticiones de uno o varios clientes.

73

Servlets Java
la arquitectura cliente - servidor
Funciones de la capa cliente Presentacin de datos Captura de datos Validacin

Proceso de datos en el cliente

74

Servlets Java
la arquitectura cliente - servidor
Tecnologas del lado del servidor Comparativa de distintas arquitecturas
Envo de respuestas al cliente Consultas a bases de datos

Proceso de datos

Recogida de datos del usuario


75

Servlets Java
caractersticas
Definicin Un servlet es una aplicacin escrita en Java que se ejecuta en el servidor ante una solicitud del cliente. Como resultado de su ejecucin, los servlets generan una respuesta para el cliente que consiste en un flujo de texto codificado en un formato comprensible por el cliente (HTML, WML, XML).

76

Servlets Java
caractersticas
Utilizan los protocolos SMTP, POP, FTP y HTTP. Al estar escritos en Java, tienen acceso a todo el API y Java Beans del mercado Cuando es invocado por primera vez, se carga en memoria y queda almacenado para atender posteriores peticiones Solamente hay una instancia del servlet que responde todas las peticiones concurrentemente (a diferencia de un CGI) Son portables entre plataformas Se ejecutan en su propia caja restringida (sandbox), que ofrece seguridad

77

Servlets Java
funcionamiento
Datos/peticin

Internet/ Intranet
Datos/respuesta

Navegador --> URL (browser)

SERVLET ORACLE, DB2, SQLSERVER ...


78

e.site

JDBC

SGBDR

Servlets Java
ciclo de vida de un Servlet
El ciclo de vida de un Servlet es una secuencia de eventos que un contenedor aplicar a un servlet para ponerlo en servicio y controlar su ejecucin y finalizacin. Contenedor
Inicializacin

new

Clase del Servlet

Ejecucin

peticin
Destruccin Espera

parada

79

Servlets Java
api de los Servlet

80

Servlets Java
creacin de un Servlet
<<Interfaz>>

Servlet

GenericServlet

HttpServlet

import javax.servlet.*; import javax.servlet.http.*;


MiServlet

public class MiServlet extends HttpServlet { : }

81

Servlets Java
mtodos de control de un Servlet
Definicin de un Servlet
public class MiServlet extends HttpServlet{ // variables de instancia // mtodos del ciclo de vida: public void init(ServletConfig config) throws ServletException{ // inicializacin de variables, apertura de ficheros, etc } public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { // acciones a realizar en la peticin } public void destroy(){ // liberacin de recursos, etc } }

82

Servlets Java
atencin a peticiones de usuario
Para recoger los posibles datos enviados por un usuario a un servidor por medio de un servlet, deberemos hacer uso del objeto HttpServletRequest, que se encuentra como argumento en el mtodo service o alguno de sus alternativos.

Objeto para gestin de la peticin

Objeto para manejar la respuesta

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { }

83

Servlets Java
contenedores de Servlets
Tomcat 6 Para la instalacin del Contenedor de Servlets y JSP Tomcat, hemos de descargarlo desde http://tomcat.apach e.org

84

Servlets Java
registro y configuracin de un servlet
Tomcat 6 Para poder invocar un servlet, este ha de ser desplegado (deployed) en un servidor o un contenedor de servlets. Para hacerlo, se utiliza un fichero de texto llamado descriptor de despliegue, de nombre web.xml y en el cual, sus elementos describen cmo utilizar y montar los componentes en un entorno especfico. Tambin incluye informacin adicional como parmetros y opciones de seguridad.

Las etiquetas <servlet></servlet> delimitan los datos de un servlet determinado, dentro de las cuales se definirn las siguientes sub-etiquetas. <servlet-name> Indica el nombre utilizado para llamar al servlet <servlet-class>, el nombre de la clase que define el servlet. Si la clase est dentro de un paquete, el nombre de la clase debe incluirlo. <url-pattern>, asigna el patrn utilizado para resolver la URL. La porcin de URL tras http://servidor:puerto/ubicacin es comparada con el <url-pattern> y si coincide, el servlet ser invocado.
85

Servlets Java
registro y configuracin de un servlet
URL:
http://www.servidor.com/aplicacion/servlet1

web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>MiServlet</servlet-name> <servlet-class>servlets.Servlet1</servlet-class> </servlet> <servlet-mapping> <servlet-name>MiServlet</servlet-name> <url-pattern>/servlet1</url-pattern> </servlet-mapping> </web-app>

86

Servlets Java
generacin y envo de la respuesta al cliente
Peticin

Servlet
public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML><HEAD></HEAD><BODY>"); out.println("<H1>Bienvenido a mi Servlet</H1>"); out.println(</BODY></HTML>"); Procesado (generacin de la pgina dinmica) }

Cliente

Respuesta

<HTML> <HEAD></HEAD><BODY> <H1>Bienvenido a mi Servlet</H1> </BODY></HEAD> </HTML>

87

Servlets Java
obtencin de datos del cliente
Diferentes modos de enviar datos al servidor
Nombre: Color:

Mediante un formulario HTML

Mediante un enlace y variables

<form action=/MiServlet" method="post"> <input name="txtnombre"> <input type=submit> </form>

<a href=MiServlet?valor=blue">Color</a>

public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{ String nombre = req.getParameter("txtnombre"); String color = req.getParameter("valor"); : }
88

Servlets Java
cookies
El objeto Cookie

Cliente
Cookie

Servidor

Las cookies son informacin que los servidores web almacenan en los discos duros de los clientes, que posteriormente puede ser recuperada por el propio servidor. Los servlets envan las cookies al cliente aadiendo campos a las cabeceras de respuesta HTTP. Por su parte, los clientes devuelven las cookies aadiendo campos a las cabeceras de peticiones HTTP. El objeto java que se utiliza se llama Cookie.
89

Servlets Java
cookies
Grabacin de una cookie

public void doGet(HttpServletRequest pet, HttpServletResponse res) throws ServletException, IOException { Cookie verColor = new Cookie(color, green); verColor.setMaxAge(3000); res.addCookie(verColor); PrintWriter out = res.getWriter(); : }
Obtencin del valor de una cookie

public void doGet(HttpServletRequest pet, HttpServletResponse res) throws ServletException, IOException { Cookie[] cookies = pet.getCookies(); for(x = 0; x < cookies.length; x++) { String nombre = cookies[x].getName(); if (nombre.equals(color)) String valor = cookies[x].getValue(); : }
90

Servlets Java
sesiones
Funcionamiento Sesin

Servlet 1 Servlet 2

Internet
Sesin

Servlet 1 Servlet 2

91

Servlets Java
sesiones
El objeto HttpSession (I)
protected void service(HttpServletRequest req,HttpServletResponse res ) throws ServletException,IOException { //obtiene una sesin de usuario HttpSession sesion = req.getSession(true); : }

Manipular sesiones con servlets es muy sencillo. Para realizar el seguimiento de una sesin, debemos: Obtener una sesin de un usuario (un objeto HttpSession): request.getSession() Almacenar datos u obtenerlos del objeto HttpSession: session.set/getAttribute() Opcionalmente, cancelar la sesin. session.invalidate() La ventaja de las sesiones frente a las cookies desde el punto de vista del desarrollador es el no tener que manipular directamente las cookies o la informacin aadida a la URL (se utiliza una de las dos maneras de un modo transparente).
92

Servlets Java
sesiones
El objeto HttpSession (II) Las tareas ms comunes, como con las Cookies, sern almacenar datos en el cliente y recuperarlos con posterioridad, para lo cual se utilizan los mtodos setAttribute y getAttribute respectivamente.
Se debe pasar como un objeto

Servlet 1

setAttribute(dato,new Integer(6)); Sesin del usuario

Servlet 2

getAttribute(dato);

93

Servlets Java
transferencia de control entre distintos componentes
A veces, un componente Web slo procesa la peticin y otro genera la respuesta. De esta manera separamos las tareas operativas de las de presentacin. El mtodo que permite esto es forward, de la interfaz RequestDispatcher. Veamos su formato:
getServletContext().getRequestDispatcher(ruta).forward(request, response);

Donde ruta es una URL al recurso al que se va a transferir el control, por ejemplo, una cadena con el valor /mostrarFormu.jsp. El recurso llamado puede ser un servlet, pgina JSP o fichero HTML en el servidor. Los objetos request y response Son enviados al recurso de destino. Otra forma de saltar a otro recurso es el mtodo sendRedirect, de la interfaz HttpServletResponse. En este caso, el nico parmetro es la ruta de destino.
public void sendRedirect(String destino) throws IOException

94

ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP

5. Aplicaciones distribuidas multicomponente


6. Filtros en aplicaciones WEB

95

Pginas JSP
introduccin
Definicin: Documento de texto que reside en el servidor y que genera dinmicamente una pgina web ante una peticin cliente. Caractersticas: Una pgina JSP contiene bloques de texto estticos HTML, WML o XML y cdigo Java que se ejecuta en el servidor para generar contenido dinmico. Una pgina jsp puede procesar formularios Web, acceder a bases de datos y redireccionar a otras pginas. Una pgina JSP es convertida y compilada en un servlet por el servidor web. Distintas peticiones de una misma pgina son atendidas por una nica instancia del servlet.

96

Pginas JSP
relacin entre servlet y JSP
La tecnologa JSP es una especificacin abierta (y gratis) disponible y desarrollada por Sun Microsystems como alternativa a Active Server Pages (ASP) de Microsoft, y son un componente dominante de la especificacin de Java 2 Enterprise Edition (J2EE).
Conversin

JSP(.jsp)
Sin cambios

Servlet (.java)

Compilacin

Output

Carga/ Ejecucin

Servlet(.class)

97

Pginas JSP
objetivos de la tecnologa JSP
Separar el contenido generado por el servidor de la presentacin. Desarrollar aplicaciones que funcionen en cualquier servidor web. Simplificar el proceso de desarrollo de aplicaciones web interactivas Desarrollar y probar de forma rpida las aplicaciones

98

Pginas JSP
aspecto de una pgina JSP
<HTML> <%@ page language=java %> <H1>Bienvenido</H1> <P> Hoy es </P> <jsp:useBean id=clock class=calendar.jaspCalendar /> <UL> <LI>Da: <%=clock.getDayOfMonth()%> <LI>Year: <%=clock.getYear()%> </UL> <%if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM){ %> Buenos das <% } else { %> Buenas tardes <% } %> <%@ include file=copyright.html %> </HTML>

Scripts JSP

99

Pginas JSP
componentes de una pgina
Comentarios Elementos de script expresiones declaraciones scriptlets Directivas Acciones JSP Objetos implcitos

100

Pginas JSP
elementos de script
Elemento
Expresin

Sintaxis
<%=expresion%>

Comentarios
Una expresin puede ser cualquier expresin vlida de Java. No se pueden utilizar ; para finalizar una expresin. Se utiliza para declarar variables y mtodos dentro de un scriptlet

Declaracin Scriptlet

<%! Declaracion %>

<% fragmento de cdigo%> Contiene cdigo Java ejecutable

Declaracin

<HTML> <HEAD> <TITLE>Ejemplo JSP</TITLE> </HEAD> <BODY> <H1>Saludos</H1> <%! private int i = 0; %> <% for (; i <= 7; i++) {%> <font size=<%=i%>> Hola Mundo! </font> <%}%> </BODY> </HTML>

Scriptlet

Expresin

101

Pginas JSP
directivas
Las directivas son comandos que son evaluados por el contenedor durante la fase de transformacin de la pgina en un servlet. Esto significa que la informacin proporcionada por estos comandos no depende de las peticiones recibidas por la pgina. Las directivas ms utilizadas de JSP son tres:

Directiva page include taglib


Formato de uso

Descripcin Define atributos generales de la pgina Incluye otro documento (HTML o JSP) en la pgina Carga la definicin de etiquetas personalizadas

<%@ directiva atributo1="valor" atributo2="valor"...%>


102

Pginas JSP
acciones JSP
Las acciones son comandos ejecutados por el contenedor en tiempo de ejecucin, lo que significa que cada vez que se realiza una peticin de la pgina JSP las acciones son ejecutadas.

Accin
useBean getProperty setProperty include forward

Descripcin
Instancia una clase JavaBean Devuelve el valor de una propiedad de un Java Bean Establece el valor en una propiedad del Java Bean Incluye otro documento (HTML o JSP) en la pgina Deriva la peticin a otra pgina JSP o servlet

<jsp:accion atributo1=valor atributo2=valor.../>


103

Pginas JSP
java beans
Un Java Bean es una clase Java que implementa lgica de negocio de una aplicacin Web y puede ser fcilmente manipulada desde JSP. Existen ciertas convenciones de diseo que deben seguir todos los Java Bean para poder utilizarse en pginas JSP: Deben disponer de un constructor sin package javaBeans; public class MiBean implements Serializable { argumentos private String nombre; Debera (no es obligatorio) implementar la interfaz Serializable public MiBean() { Por cada propiedad que vaya a exponer nombre = ; el Java Bean, debe haber sus } public void setNombre(String s) { correspondiente mtodos accesores, que nombre = s; siguen la forma getNombrePropiedad() y } setNombrePropiedad()
public String getNombre() { return nombre; } //otros mtodos de negocio

En realidad, el trmino apropiado para hablar de estas clases simples es POJO (Plain Old Java Object).
104

Pginas JSP
java beans
Ya que un java bean es uno de los mecanismos para incluir la lgica de negocio en una aplicacin, una de las primeras tareas a resolver es cmo hemos de invocarlo desde otros componentes. Aqu vemos dicho acceso.
Acceso desde un JSP

<jsp:useBean id="miobjeto" class="javaBeans.MiBean" scope="session"/> : <%miobjeto.setNombre("Primer nombre");%>


Identificador definido para el javabean en la pgina JSP

<p>El valor de la propiedad nombre es:<%=miobjeto.getNombre()%>


Acceso desde un Servlet

HttpSession sesion=request.getSession();

MiBean obj=(MiBean)sesion.getAttribute("miobjeto");

105

Pginas JSP
acceso a las propiedades de un java bean
La especificacin JSP incluye dos acciones para manipular las propiedades de un Bean: <jsp:setProperty name=nomBean property=propiedad value=valor/>. Se utiliza el valor * para el atributo property; con ello se almacena automticamente en las variables de propiedad del Bean los valores de parmetros de la peticin. Con <jsp:getProperty /> se inserta en la pgina de respuesta el valor de la propiedad.
Datos.htm Nombre: Merche Martn Enviar Almacena en la propiedad nombre el contenido del cuadro de texto

Procesa.jsp

<jsp:useBean id="miobjeto" class="javaBeans.MiBean" scope="session"/> <jsp:setProperty nombre="miobjeto" property="*"/> El nombre es:<jsp:getProperty name="miobjeto" property=nombre"/>

106

Pginas JSP
objetos implcitos JSP
La especificacin JSP trata de simplificar la creacin y desarrollo de pginas JSP a travs de ciertos objetos ofrecidos por el contenedor de pginas JSP que se corresponden con instancias del api de los Servlets. Existen nueve objetos implcitos:

Objeto
request response session application config pagecontext page out
Pag1.jsp

Descripcin
Equivale HttpServletRequest Equivale a HttpServletResponse Equivale a HttpSession Equivale a ServletContext Equivale a ServletConfig Proporciona acceso a los atributos de pgina Representa la instancia del servlet generada a partir de la pgina JSP Permite enviar datos a la salida

<%session.setAttribute("nombre","James");%>
Pag2.jsp

El nombre es:<%=session.getAttribute("nombre)%>
107

Pginas JSP
objetos implcitos JSP

Objeto
page request

mbito Caractersticas
Pgina. Peticin Los datos slo son accesibles desde la pgina JSP actual. Los datos slo son accesibles desde la pgina JSP actual y desde todas las que hayan sido incluidas en ella, tanto con include como con forward. La informacin es accesible por todos los servlets y pginas JSP manejados por el usuario. La informacin es accesible por todos los usuarios de la aplicacin.

session application

Sesin Aplicacin

El objeto page es una instancia de la clase java.lang.Object, y representa la pgina JSP actual, o para ser ms exactos, una instancia de la clase del servlet generado a partir de la pgina JSP actual. Se puede utilizar para realizar una llamada a cualquiera de los mtodos definidos por la clase del servlet. Utilizar el objeto page, es similar a utilizar la referencia a la clase actual, es decir, la referencia this.
108

Pginas JSP
librera de etiquetas personalizadas
Definicin: Utilizando Java Beans, podemos separar la parte de presentacin de una pgina JSP de las reglas de negocio en forma de cdigo Java. Sin embargo, solamente disponemos de tres elementos de accin para acceder a un Bean: Jsp:useBean Jsp:getProperty Jsp:setProperty Por ello, en algunas situaciones tenemos que recurrir al uso de cdigo en una pgina JSP; en otras palabras, a veces los Java Beans no ofrecen una completa separacin entre la presentacin y las reglas de negocio. Como consecuencia a las imperfecciones de los Java Beans y para solucionar la separacin entre la presentacin y lgica de negocio, JSP 1.1 defini una nueva caracterstica: las custom tags (etiquetas personalizadas) que pueden usarse para ejecutar acciones del usuario.
109

Pginas JSP
librera de etiquetas personalizadas
La especificacin JSP 2.0 en comparacin con las anteriores especificaciones ha hecho ms factible desarrollar etiquetas personalizadas. Con este fin, esta especificacin introduce una extensin llamada Simple Tag Extension que puede ser utilizada de una de las dos formas siguientes: Para desarrolladores java: definiendo una clase que implemente la interfaz javax.servlet.jsp.tagext.SimpleTag. Para diseadores de pginas JSP sin conocimientos de Java: utilizando ficheros de etiquetas.

110

Pginas JSP
librera de etiquetas personalizadas
Prctica: En las siguientes pginas se mostrar el empleo de las etiquetas personalizadas desde una pgina JSP que desplegaremos bajo el servidor Tomcat e invocaremos desde un navegador web. El componente java a utilizar emitir el mensaje Hola, desde la etiqueta personalizada.

111

Pginas JSP
librera de etiquetas personalizadas
La estructura de directorios que debemos crear para crear la aplicacin miAplicJSP es la siguiente:

112

Pginas JSP
librera de etiquetas personalizadas
1. Creamos un fichero TLD llamado taglib.tld con el contenido que figura a continuacin y lo guardamos en el directorio WEB-INF

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"> <taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name></short-name> <tag> <name>miEtiq</name> <tag-class>com.bar.MiCustomTag</tag-class> </tag> </taglib>

113

Pginas JSP
librera de etiquetas personalizadas
2. Escribe, compila y despliega la clase Java MiCustomTag.java que se muestra a continuacin. Asegrate de que esta clase se ubica en el directorio bar, bajo el directorio WEB-INF/classes/com
package com.bar; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class MiCustomTag extends TagSupport { public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); try { out.println("Hola, desde la etiqueta personalizada."); } catch (Exception e) { } return super.doEndTag(); } }

114

Pginas JSP
librera de etiquetas personalizadas
3. Crea un fichero JSP con el cdigo que se muestra a continuacin. Llmalo Pgina.jsp y gurdalo bajo el directorio misJsps de la estructura que antes se mencion.
Listado de Pagina.jsp
<HTML> <HEAD><TITLE>Libreria etiquetas</TITLE><HEAD> <BODY> <%@ taglib uri="/miTLD" prefix="facil" %> <facil:miEtiq/> </BODY> </HTML>

115

Pginas JSP
librera de etiquetas personalizadas
4. Edita el fichero descriptor de despligue (web.xml). Para utilizar etiquetas

personalizadas, has de especificar un elemento <taglib> en dicho archivo. El elemento <taglib> debe aparecer tras <servlet> y <servlet-mapping>, si existen.
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE web-app (View Source for full doctype...)> <web-app> : : <display-name>Mis ejemplos jsp</display-name> <description>Ejemplo con Libreria de etiquetas personalizadas</description> <taglib> <taglib-uri>/miTLD</taglib-uri> <taglib-location>/WEB-INF/taglib.tld</taglib-location> </taglib> </web-app>

116

Pginas JSP
librera de etiquetas personalizadas
5. Reinicia Tomcat. Abre tu navegador web y rellena en la barra de direcciones la siguiente url: http://localhost:8080/misJsps/Pagina.jsp. Debera mostrarse la ventana siguiente:

117

Pginas JSP
librera de etiquetas personalizadas
6. Relacin entre el archivo descriptor, la pgina JSP y el fichero .TLD:
<?xml version="1.0" encoding="ISO-8859-1"?> <taglib> <taglib-uri>/miTLD</taglib-uri> <taglib-location>/WEB-INF/taglib.tld</tagliblocation> </taglib> </web-app>
web.xml

<HTML> <HEAD><TITLE>Libreria etiquetas</TITLE><HEAD> <BODY> <%@ taglib uri="/miTLD" prefix="facil" %> <facil:miEtiq/> </BODY> </HTML>
Pagina.jsp

<taglib> <tlib-version>1.0</tlib-version> <jsp-version>1.2</jsp-version> <short-name></short-name> <tag> <name>miEtiq</name> <tag-class>com.bar.MiCustomTag</tagclass> </tag> </taglib>

taglib.tld

118

Pginas JSP
librera de etiquetas personalizadas
Cuando la peticin del usuario solicita la pgina JSP, el contenedor de JSP mira la etiqueta <taglib>. Por ello, el contenedor sabe que se est buscando una etiqueta personalizada. Entonces acta de la forma siguiente: Consulta el fichero de despliegue (web.xml) para buscar la ubicacin de la tablib, donde la URI es /miTLD. El descriptor de despliegue devuelve la ruta al fichero TLD. El contenedor de JSP (Tomcat en nuestro caso), recordar este camino. Contina procesando la siguiente lnea y encuentra la etiqueta miEtiq, precedida con el prefijo facil. Teniendo ya el nombre y localizacin del fichero TLD, el contenedor lee el fichero TLD y obtiene el nombre (totalmente calificado) de la clase java para la etiquet miEtiq, con ello accede a com.bar.MiCustomTag. El contendor JSP puede, por fin, cargar la clase para la etiqueta y procesarla.

119

Pginas JSP
librera de etiquetas personalizadas
Conclusin Las etiquetas personalizadas aportan otras ventajas no presentes en los Java Beans; entre otras, que tienen acceso a a todos los objetos disponibles a las pginas JSP y que pueden ser parametrizadas con atributos. Sin embargo, es importante resear que las etiquetas JSP no se pensaron como sustituto de los Java Beans, los cuales siguen teniendo sus propias caractersticas y virtudes. A veces ser ms apropiado el uso de Beans para la reutilizacin y otras ser mejor usar etiquetas personalizadas. Incluso en algunos casos, la eleccin no ser clara, dejando al desarrollador que tome la decisin apropiada en base a su experiencia.

120

ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP

5. Aplicaciones distribuidas multicomponente


6. Filtros en aplicaciones WEB

121

Aplicaciones distribuidas multicomponente


aplicaciones distribuidas
Con los altos requerimientos de las complejas aplicaciones actuales, se pone de manifiesto la necesidad de utilizar modelos de desarrollo en los que se encuentren las siguientes caractersticas: Alto rendimiento Alta disponibilidad Gran fiabilidad Reutilizacin Escalabilidad Base tecnolgica de vanguardia El modelo de aplicaciones distribuidas se base en una estructura base vlida para cualquier aplicacin final multipuesto. Una aplicacin distribuida se basa en una red de servidores, cada uno con uno o ms componentes que forman parte de la aplicacin. Un usuario puede trabajar desde cualquier puesto, permitiendo el traslado de personal sin necesidad de operaciones administrativas.

122

Aplicaciones distribuidas multicomponente


arquitecturas y frameworks
Qu es una arquitectura? Arquitectura hace referencia a una representacin abstracta de los componentes que intervienen en un sistema y a su comportamiento sin entrar en los detalles de implementacin. Es un principio de diseo coherente usado en un dominio especfico. Como ejemplo, el estilo de construccin Gtico o en programacin, el modelo JEE para sistemas de informacin. Son caractersticas deseables en una arquitectura las siguientes:
Disponibilidad Mantenimiento Rendimiento Escalabilidad Extensibilidad Integridad y consistencia Flexibilidad Capacidad Reusabilidad Seguridad

123

Aplicaciones distribuidas multicomponente


arquitectura MVC
El Modelo Vista Controlador (MVC) es un patrn de arquitectura de software que separa los datos de una aplicacin, la interfaz de usuario, y la lgica de control en tres componentes distintos. Este patrn se ve frecuentemente en aplicaciones web, donde la vista son la pgina HTML y el cdigo que provee de datos dinmicos a la pgina, el modelo es el Sistema de Gestin de Base de Datos y la lgica de negocio y el controlador es el responsable de recibir los eventos de entrada desde la vista. Qu es un framework? Un framework representa la implementacin de una arquitectura de software que modela las relaciones generales de las entidades del dominio. Provee una estructura y una metodologa de trabajo la cual extiende o utiliza las aplicaciones del dominio. Algunos frameworks que implementan MVC son:
Struts Spring Java Server Faces Apache Apache Apache Java .Net y Java Java

124

Aplicaciones distribuidas multicomponente


arquitectura MVC
Vista Controlador Modelo EJBs JDBC Java Beans

Servlets

BD

JSPs

Una aplicacin JEE es un conjunto de componentes, cada uno de los cuales proporciona a la aplicacin un servicio determinado.

125

Aplicaciones distribuidas multicomponente


servlet: el controlador
public class Dispatcher extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ : if (operation == null) { operation = ""; } if (operation.equalsIgnoreCase("browse")) { this.doBrowse(request, response); return; } if (operation.equalsIgnoreCase("addItem")) { this.doAdd(request, response); return; } if (operation.equalsIgnoreCase("removeItem")) { this.doRemove(request, response); return; } }
126

Aplicaciones distribuidas multicomponente


JSP: la Vista
Ejemplo parcial de un JSP que crea dinmicamente una lista desplegable HTML a partir de la informacin contenida en una base de datos consultada por el Java Bean InformacionBean.
<table> <tr> <td> <select name=lista_socios> <%SocioBean socio; // Java Bean de apoyo InformacionBean info = new InformacionBean(); Vector todos = info.getSocios(); for(int i = 0; i < todos.size(); i++) { socio = (SocioBean)todos.elementAt(i);%> <option value=<%= socio.getId()%>> <%=socio.getSocio()%></option> <%}%> </select> </td> </tr>

Instancia del componente Generacin de la respuesta

127

Aplicaciones distribuidas multicomponente


Java Beans: el Modelo
Java Bean con la lgica de negocio y acceso a la base de datos (1/2)
public class InformacionBean { public Vector getSocios() { Vector todos = new Vector(); DataBean datos= new DataBean(); try { Connection con = datos.getConnection(); String sql = "SELECT * FROM socios"; Statement st = con.createStatement(); ResultSet rs = st.executeQuery(sql); while(rs.next()) { SocioBean socio = new SocioBean(); socio.setId(rs.getInt("id")); socio.setSocio(rs.getString("socio")); socio.setMail(rs.getString("e_mail")); todos.addElement(socio); }

Acceso a los datos en el componente

128

Aplicaciones distribuidas multicomponente


Componentes Java Beans: el Modelo
Java Bean con la lgica de negocio y acceso a la base de datos (2/2)
rs.close(); st.close(); con.close(); } catch(Exception e){ } finally { return todos; } } }
Cierre de objetos y control de errores

129

ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP

5. Aplicaciones distribuidas multicomponente


6. Filtros en aplicaciones WEB

130

Filtros en aplicaciones Web


qu es un filtro?
Los filtros son la incorporacin ms reciente a la tecnologa servlet java. En el mbito de las tecnologas J2EE, los filtros ocupan un lugar aparte. Los componentes de aplicacin J2EE estn controlados por el contenedor Web. En el caso del contenedor, recibe las solicitudes HTTP e invoca varios recursos de aplicacin Web incluido servlets, pginas JSP, archivos HTML, imgenes...Es decir el contenedor web es el interceptor de solicitudes HTPP a recursos. Este proceso implica varios pasos, incluido identificar la aplicacin Web, encontrar asociaciones de ruta a recursos, comprobar autenticacin y autorizacin, e invocar recursos.

Con las diversas funciones de servlets, no hay ninguna instalacin para participar en este proceso de interceptacin. No puede cambiar, controlar o revisar en el modo en el que el contenedor invoca a recursos.
Con filtros podemos configurar el contenedor Web para invocar ciertos objetos filtros durante el proceso de solicitud-respuesta HTTP. De este modo, como desarrolladores de aplicacin Web, podemos adaptar el modo en que las solicitudes HTTP son manipuladas en un contenedor Web.
131

Filtros en aplicaciones Web


qu es un filtro?
Un filtro es un objeto parecido a un servlet y controlado por un contenedor que puede ser insertado de forma declarativa en el proceso de solicitud-respuesta HTTP. Algunas de las posibilidades que ofrecen los filtros son: Validar solicitudes. Solicitudes HTTP de registro. Autorizar solicitudes HTTP. Gestin de contenido. Proporcionar un entorno HTTP de adaptacin para servlets y pginas JSP.

132

Filtros en aplicaciones Web


qu es un filtro?
Debemos destacar que todas estas diferencias podran realizarse en un servlets, aunque con alguna dificultad. Existen sin embargo algunas diferencias: Un servlet es equivalente a un recurso Web excepto en que es dinmico. Un filtro, por otro lado, no es un recurso al que sirve un contenedor. En cambio el contenedor invoca un filtro mientras procesa una solicitud para servir a un recurso. De este modo los filtros nos ofrecen la oportunidad de participar en el proceso de servir cualquier recurso Web. Con la ayuda de los filtros, podemos separar de un modo efectivo la lgica de los servlets. Podemos introducir declarativamente filtros sin cambiar nuestros servlets. Los filtros pueden ser utilizados e cualquier aplicacin Web, incluido las de contenido completamente esttico.

133

Filtros en aplicaciones Web


el API de los filtros
El API filtro consiste en las siguientes interfaces o clases:
- javax.servlet.Filter

La intefaz que todos los filtros deben implementar.


- javax.servlet.FilterConfig

Una interfaz que proporciona acceso a los parmetros de inicializacin de filtro y al contexto de servlet. Esta interfaz es creada por el contenedor y pasado a a la instancia de filtro durante la inicializacin. - javax.servlet.FilterChain Una abstraccin de una cadena de filtros. Esta interfaz le permite invocar el siguiente filtro de la cadena, o si el filtro llamante es el ltimo filtro de la cadena, al recurso final de la cadena.

134

Filtros en aplicaciones Web


el API de los filtros
La interfaz de filtro (I):
public interface Filter

Esta interfaz del paquete java.servlet tiene los mtodos de ciclo de vida de un filtro: El mtodo init( )
public void init (FilterConfig config) throws Servlet Exception

El contenedor invoca est mtodo antes de poner el filtro en servicio. Durante la inicializacin, el contenedor enva la informacin de configuracin al filtro a travs de un objetoFilterConfig. El mtodo doFilter( ):
public void doFilter (ServletRequest, ServletResponse response, filterChain) throws IOException, Servlet Exception

El contenedor invoca este mtodo mientras procesa el filtro. Utilizando el objeto FilterChain, cada filtro puede instruir al contenedor para que procese el resto de la cadena de filtro.
135

Filtros en aplicaciones Web


el API de los filtros
La interfaz de filtro (II): El mtodo destroy( ):
public void destroy ( )

El contenedor invoca este mtodo antes de sacar a un filtro de servicio. Esto puede suceder en el cierre del contenedor o cuando la aplicacin es replegada.

136

Filtros en aplicaciones Web


el API de los filtros
La interfaz de filtro (III): Ciclo de la vida de un filtro.
Instanciacin Inicializacin Filtrado Destruccin

Los mtodos init () y doFilter () pueden lanzar una excepcin ServletException, mientras que el mtodo doFilter () tambin puede lanzar una excepcin java.io.IOException, Cuando se provocan estas excepciones, el contenedor no puede continuar con la cadena de filtro, lo que significa que no puede servir el recurso Web al que representa la solicitud. Por lo tanto, en los casos en los que se deseen que el contenedor sirva el recurso sin tener en cuenta cualquier excepcin, es importante asegurarse de que los filtros consumen excepciones y registran casos adecuadamente.
137

Filtros en aplicaciones Web


el API de los filtros
La interfaz FilterConfig (I): public interface FilterConfig Esta interfaz es la equivalente aServletConfig para filtros. La interfaz proporciona acceso al entrono de filtros y cuenta con los siguientes mtodos. El mtodo getFilterName ( ):
public void getFilterName ( )

Este mtodo devuleve el nombre del filtro tal y cmo est especificado en el descriptor de despliegue.

El mtodo getInitParameter ( ): public String getInitParameter (String name)


Devuelve el valor de los parmetros de inicializacin nominados o null si el parmetro no existe. Podemos especificar los parmetros de inicializacin en el descriptor de despliegue.

138

Filtros en aplicaciones Web


el API de los filtros
La interfaz FilterConfig (II): public interface FilterConfig -El mtodo getInitParameterNames ( ):public Enumeration getInitParameterNames ( )

Devuelve los nombres de los parmetros de inicializacin del servlet como una Enumeracin de objetos String o una enumeracin vaca si el servlet no tiene parmetros de inicializacin.
-El mtodo getServletContext ( ) public ServletContext getServletContext ( )

Devuelve una referencia al contexto de servlet asociado a la aplicacin Web relevante.

139

Filtros en aplicaciones Web


el API de los filtros
La interfaz FilterChain:
public interface FilterChain

Esta interfaz proporciona al flitro una sa para invocar el resto de la cadena de filtro. Cada filtro obtiene acceso a un objeto FilterChain cuando el mtodo doFilter ( ) es invocado. Utilizando este objeto, el filtro puede permitir al contenedor invocar el siguienete filtro de cadena. Esta interfaz tiene un nico mtodo -El mtodo doFilter ( )
public void doFilter (Servlet request, ServletResponse response)

Cuando un filtro invoca este mtodo, el contenedor invoca el siguiente filtro de la cadena de filtro. Si el ltimo que invoca es el ltimo filtro de la cadena, el contenedor invoca al recurso Web de la solicitud.

140

Filtros en aplicaciones Web


descriptor de despliegue para filtros
Para desplegar filtros en una aplicacin Web se requieren las siguientes entradas adicionales en el descriptor del despliegue: Un elemento <filter> para declarar cada filtro. ste es similar a la declaracin de servlet en el descriptor de despliegue y consiste en un nombre, <filter-name>, el nombre de clase cualificado del filtro, <filter-class> y cero o ms parmetros de inicializacin. Para cada parmetro, debemos especificar un nombre <param-name> y un valor, <param-value>. Podemos, opcionalmente especificar una descripcin, <description>, para cada parmetro de la inicializacin. Un elemento <filter-mapping> para especificar patrones URL. El contenedor utiliza asociaciones URL para determinar si uno o ms filtros deben ser invocados antes de procesar un recurso Web. El patrn corresponde al URL asociado al recurso Web.

141

Filtros en aplicaciones Web


descriptor de despliegue para filtros
En esta declaracin se asocian tres filtros para solicitudes empezando por /product/catalog/
<filter-mapping> <filter-name>filter1</filter-name> <url-pattern>/product/catalog/</url-pattern> </filter-mapping> <filter-mapping> <filter-name>filter2</filter-name> <url-pattern>/product/catalog/</url-pattern> </filter-mapping> <filter-mapping> <filter-name>filter3</filter-name> <url-pattern>/product/catalog/</url-pattern> </filter-mapping>

142

Filtros en aplicaciones Web


descriptor de despliegue para filtros
Hay tres puntos clave a destacar: El contenedor confa en el orden en el que las asociaciones son declaradas en el descriptor para componer una cadena de filtro. Cada filtro tiene una oportunidad de procesar antes y despus de que el verdadero recurso sea procesado. Esto se debe al anidamiento de las llamadas doFilter ( ). Este proceso es completamente declarativo. Puede activar o desactivar filtros incluyendo o eliminando declaraciones de representacin de filtro en el descriptor de despliegue.

143

bibliografa

Autor

Ttulo

Ciudad y/o pas

Editorial

Ao

Edicin

Jim Keogh
Francisco Javier Ceballos Agustn Froufe

Manual de referencia J2EE


Java 2 V5.0 Java 2, Manual de usuario y tutorial

ESPAA
ESPAA ESPAA

McGraw-Hill
Ra-Ma Ra-Ma

2003
2004 2000

4
1 2

144

bibliografa en internet

Responsable principal

Ttulo

Disponibilidad y acceso

Fecha de consulta

Sun Microsystems Fernando Bellas Marty Hall

http://java.sun.com/j2ee/1.4/docs/tutorial /doc/ http://www.tic.udc.es/~fbellas/teaching/i s/index.html http://www.coreservlets.com/ApacheTomcat-Tutorial/

Libre Libre Libre

2005 2007 2007

145

everis.com

146

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