Академический Документы
Профессиональный Документы
Культура Документы
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
ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP
ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP
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.
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.
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:
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
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
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
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
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
las
cuatro
porque
el
BD
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
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
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
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> )
25
jdbc
sentencias SQL
Sentencia UPDATE Actualiza los atributos de un conjunto de registros UPDATE <tabla> SET <atributos a actualizar> WHERE <condicin>
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
27
jdbc
sentencias SQL
Sentencia SELECT Consulta que devuelve un conjunto de resultados de datos SELECT * | <conjunto atributos> FROM <tablas> WHERE <condicin>
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 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
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
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
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
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.
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
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
44
45
46
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
49
50
51
52
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
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
55
56
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
58
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
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
61
62
ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP
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
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
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
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
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
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
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
Ejecucin
peticin
Destruccin Espera
parada
79
Servlets Java
api de los Servlet
80
Servlets Java
creacin de un Servlet
<<Interfaz>>
Servlet
GenericServlet
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.
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
87
Servlets Java
obtencin de datos del cliente
Diferentes modos de enviar datos al servidor
Nombre: Color:
<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
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
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
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:
Descripcin Define atributos generales de la pgina Incluye otro documento (HTML o JSP) en la pgina Carga la definicin de etiquetas personalizadas
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
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
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.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
121
122
123
124
Servlets
BD
JSPs
Una aplicacin JEE es un conjunto de componentes, cada uno de los cuales proporciona a la aplicacin un servicio determinado.
125
127
128
129
ndice
1. Acceso a base de datos con JDBC
2. Introduccin a la plataforma JEE 3. Servlets de Java 4. Pginas JSP
130
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
132
133
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
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
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
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
Este mtodo devuleve el nombre del filtro tal y cmo est especificado en el descriptor de despliegue.
138
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 ( )
139
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
141
142
143
bibliografa
Autor
Ttulo
Editorial
Ao
Edicin
Jim Keogh
Francisco Javier Ceballos Agustn Froufe
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
145
everis.com
146