Está en la página 1de 93

ESPECIALIZACIN EN DESARROLLO DE APLICACIONES EMPRESARIALES CON JAVA EE

Escuela Tecnolgica Superior

Erick Arauco Moreno

ESPECIALIZACIN EN DESARROLLO DE APLICACIONES EMPRESARIALES CON JAVA EE


Mdulo II: Java 2 Enterprise Edition

Erick Arauco Moreno

1.1. Servlets y el Desarrollo Web - Introduccin

La programacin basada en el lenguaje Java es actualmente una eleccin bastante popular en el desarrollo de aplicaciones web, esto gracias a sus caractersticas ya conocidas entre los programadores tales como: orientacin a objetos, escribe una vez, usa en cualquier lugar, etc.
El modelo ofrecido por la tecnologa Java Empresarial define una arquitectura orientada a la implementacin de aplicaciones web multicapas, en las cules es necesario siempre tener en mente conceptos como: Presentacin, Lgica, Datos, etc.

Erick Arauco Moreno

1.1. Servlets y el Desarrollo Web - Introduccin

Erick Arauco Moreno

1.2. Paradigma Cliente / Servidor

La programacin basada en el lenguaje Java es actualmente una eleccin bastante popular en el desarrollo de aplicaciones web, esto gracias a sus caractersticas ya conocidas entre los programadores tales como: orientacin a objetos, escribe una vez, usa en cualquier lugar, etc.
El modelo ofrecido por la tecnologa Java Empresarial define una arquitectura orientada a la implementacin de aplicaciones web multicapas, en las cules es necesario siempre tener en mente conceptos como: Presentacin, Lgica, Datos, etc.

Erick Arauco Moreno

1.2. Paradigma Cliente / Servidor Elementos.

Clientes Java. Representan la capa de presentacin de la aplicacin. Pueden ser:


- Clientes Web. Conformados por dos elementos a saber: pginas web dinmicas (HTML, XML, etc) y un navegador web (IE, Firefox, etc). Conocidos tambin como Clientes Delgados, este tipo de cliente tpicamente no realiza consultas a las base de datos, ni ejecuta clculos complejos. - Aplicaciones de Escritorio. Una aplicacin de escritorio, tpicamente posee una interfaz grfica constituida en base a Componentes Swing AWT (Abstract Window Toolkit). Este tipo de aplicaciones puede acceder directamente a componentes java empresariales, bases de datos, etc.

JavaBeans encargados de gestionar los datos que viajan entre el cliente y el servidor.
Erick Arauco Moreno 6

1.2. Paradigma Cliente / Servidor Elementos.

Erick Arauco Moreno

1.2. Paradigma Cliente / Servidor Elementos.

Componentes Web. Representados por Servlets pginas JSP (Java Server Pages) y/o Tecnologa JSF (Java Server Faces).

Erick Arauco Moreno

1.2. Paradigma Cliente / Servidor Elementos.

Componentes de Negocio. Representan las necesidades de un negocio en particular tal como banca, educacin, etc. Claramente representados por los Enterprise JavaBeans, los cules reciben la informacin desde los clientes y la envan al Enterprise Information System para su respectivo almacenamiento.

Erick Arauco Moreno

1.3 Introduccin a los Servlets

La Servlet Application Programming Interface. Un servlet es una aplicacin de lado servidor que opera como un servicio de red. A diferencia de los applets, la parte visual de un servlet esta representada por una pgina web.

Erick Arauco Moreno

10

1.4 Opciones de Scripting

Podemos mencionar dos tipos:


- Client-side scripting. Control de los eventos y respuestas en la mquina cliente. Representado por lenguajes como JavaScript, VBScript. Este tipo de scripting toma ventajas de los recursos del cliente para evitar sobrecargar de trabajo al servidor. - Server-side scripting. Aplicaciones almacenadas y ejecutadas en el servidor, cuyo objetivo principal es proporcionar contenido dinmico

Erick Arauco Moreno

11

1.5 Aplicaciones Java - tipos

Erick Arauco Moreno

12

1.6 Tipo de contenido protocolo MIME

Erick Arauco Moreno

13

1.6 Tipo de contenido protocolo MIME

Type text

Subtype plain,richtext,html,xml

message
application image audio video

email,news
Octect-stream jpeg,gif basic,midi,mp3 Mpeg,quicktime

Erick Arauco Moreno

14

1.7 Contenedores J2ee

La inexistencia de un contenedor j2ee traera consigo que los desarrolladores se preocupen por elementos como: el despliegue y/o de un componente web, el despliegue y/o de un componente empresarial (EJB), transacciones, etc. Por lo tanto un contenedor representa la interface entre un componente y la funcionalidad de la plataforma que lo soporta. Existen contenedores web (Servlets y JSP) y contenedores EJB (Enterprise JavaBeans), los cuales a su vez forman parte y son gestionados por un contenedor J2ee.

Erick Arauco Moreno

15

1.7 Tipos de contenedores

Erick Arauco Moreno

16

1.7 Tipos de contenedores

Glassfish

Erick Arauco Moreno

17

1.8 Empaquetado de Aplicaciones

Erick Arauco Moreno

18

1.8 Empaquetado de Aplicaciones

Mdulos EJB. Representan las clases Enterprise JavaBeans y su respectivo descriptor de despliegue. Normalmente empaquetados bajo la extensin .jar.
Mdulos Web. Representado por los Servlets, pginas JSP y todo recurso que utilizado por la aplicacin (gif, html, etc). Los mdulos web normalmente son empaquetados bajo la extensin .war (Web Archive). Mdulos para Aplicaciones Cliente. Representado por todas aquellas clases java junto a un descriptor de despliegue. Empaquetados normalmente bajo la extensin .jar. Mdulos de Recurso. Conformado por interfaces java, clases, libreras y otra documentacin necesaria para la aplicacin. Empaquetados normalmente bajo la extensin .rar (Resource Adapter Archive).

Erick Arauco Moreno

19

2.1 Servlets

Un Servlet es una clase java utilizada para extender las capacidades de los servidores que almacenan aplicaciones accesibles bajo el modelo de programacin solicitud respuesta.
Los paquetes javax.servlet y javax.servlet.http proveen las interfaces y clases para la creacin de los servlets. Todos los servlets deben implementar la interface Servlet, la cual provee los mtodos necesarios para atender las solicitudes (Get Post) de los clientes.

Erick Arauco Moreno

20

2.2 Solicitudes

GET /index.html HTTP/ 1.0 Accept: text / html Connection: Keep-Alive Host: www.hungriyminds.com User-Agent: Mozilla/4.02 [en] GET /index.html ?user=earauco&password=123 HTTP /1.0 Accept: text / html Connection: Keep-Alive Host: www.hungriyminds.com User-Agent: Mozilla/4.02 [en] POST /index.html HTTP/ 1.0 Accept: text / html Connection: Keep-Alive Host: www.hungriyminds.com User-Agent: Mozilla/4.02 [en] Content-Length=25 user=earauco&password=123

Erick Arauco Moreno

21

2.3 Cundo usar GET POST

Usamos GET cuando la solicitud no implica ningn cambio en el estado del servidor. Usamos POST en caso contrario.
GET es lo ideal para operaciones de slo lectura. Considerar tambin las limitaciones de usar GET, debido a que los parmetros enviados son adicionados a la direccin, lo cul es visible para el usuario final.

Erick Arauco Moreno

22

2.4 Ciclo de vida de los servlets

init( ). La inicializacin del servlet normalmente est centrada a la ejecucin de actividades que se ejecutan normalmente una sla vez, por ejemplo: inicializar una variable, establecer la conexin con una base de datos, etc. service ( ). Encargado de examinar la peticin del cliente y emitir una respuesta al mismo. Encontramos dos implementaciones: doGet( ) y doPost( ). destroy ( ). Utilizado normalmente para devolver ciertos recursos adquiridos como las conexiones de la base de datos. Despus que el mtodo destroy es invocado, el servlet es marcado para ser recolectado por el recolector de basura.

Erick Arauco Moreno

23

2.4 Servlets
out.println("<html>"+ "<head><title>Bienvenida</title></head>"); out.println( "<body bgcolor=\"#ffffff\">" + "<img src=\"duke.waving.gif\"alt=\"Duke waving\">" + "<h2>Hola, mi nombre es Duke. Cual es el tuyo?</h2>" + "<form method=\"get\">" + "<inputtype=\"text\"name=\"username\"size=\"25\">" + "<p></p>" + "<inputtype=\"submit\"value=\"Submit\">" + "<inputtype=\"reset\"value=\"Reset\">"+ "</form>"); String username = request.getParameter("username"); if ((username != null) && (username.length()> 0)) { //Se obtiene el recurso RequestDispatcher dispatcher = getServletContext() .getRequestDispatcher("/respuestaservlet"); if (dispatcher != null) { //La salida del recurso se incluye en el primer servlet. dispatcher.include(request, response); } } out.println("</body></html>"); out.close(); }

Erick Arauco Moreno

24

2.4 Servlets

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); String username= request.getParameter("username"); if ((username != null) && (username.length() > 0)) { out.println("<h2>Hola, " + username + "!</h2>"); } }

Erick Arauco Moreno

25

2.5 Filtros.

Un filtro es un objeto asociado a uno o varios servlets que se ejecuta en el servidor de manera previa. Un filtro puede ser usado para alguna de las siguientes tareas:
- Invocar a un servlet normalmente. - Capturar y/o modificar la solicitud que se hace a un servlet. - Invocar al servlet y modificar su respuesta. - Evitar la invocacin al servlet.

Erick Arauco Moreno

26

2.5 Filtros.
publicclass VerificadorServlet implements Filter { private FilterConfig_filterConfig = null; publicvoid init(FilterConfigfilterConfig)throws ServletException{ _filterConfig = filterConfig; } publicvoid destroy() { _filterConfig = null; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

String servidor = request.getRemoteAddr(); PrintWriterout=response.getWriter(); if (servidor.equals("192.168.11.54")){ out.println( "<HTML>\n"+ "<HEAD><TITLE>Error</TITLE></HEAD>\n"+ "<BODY GBCOLOR=\'#FDF5E6\'>\n" + "<H1>P&aacute;gina bloqueadapara el IP: " + servidor + " </H1>\n" + "</BODY></HTML>"); } else { chain.doFilter(request, response); }
} }

Erick Arauco Moreno

27

2.5 Filtros.
<?xml version = '1.0' encoding = 'windows-1252'?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> <description>Empty web.xml file for Web Application</description> <filter> <filter-name>VerificadorServlet</filter-name> <filter-class>parametrosproject.VerificadorServlet</filter-class> </filter> <filter-mapping> <filter-name>VerificadorServlet</filter-name> <servlet-name>RecepcionServlet</servlet-name> </filter-mapping> <servlet> <servlet-name>RecepcionServlet</servlet-name> <servlet-class>parametrosproject.RecepcionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RecepcionServlet</servlet-name> <url-pattern>/recepcionservlet</url-pattern> </servlet-mapping> </web-app> Erick Arauco Moreno 28

2.5 Filtros.
public void doFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain) throwsIOException,ServletException{ HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; String nav = req.getHeader("user-agent"); String browser= ""; PrintWriter out=response.getWriter(); if(nav.contains("MSIE")) { browser="Internet Explorer"; out.println( "<HTML>\n" + "<HEAD><TITLE>Bienvenido</TITLE></HEAD>\n"+ "<BODY GBCOLOR=\'#FDF5E6\'>\n" + "<H1>Imposible usar " + browser + "</H1>\n" + "</BODY></HTML>"); } else { chain.doFilter(request,response); } } Erick Arauco Moreno 29

3.1. Acceso a Datos

Carga del driver JDBC (Java Database Connectivity). Para cargar el driver, se hace necesario conocer el nombre del mismo utilizando Class.forName. Definir la conexin URL. Es necesario definir la direccin del host, puerto y nombre de la base de datos. Establecer la conexin. Con la conexin URL, usuario y password, se puede establecer una conexin con la base de datos. Crear el objeto Statement. Crear el objeto statement nos va a permitir enviar consultas a la base de datos. Ejecuctar una consulta o actualizacin. execute, executeQuery, executeUpdate ExecuteBatch. Procesar el resultado. Una vez que la consulta ha sido ejecutada, un objeto ResultSet es retornado. Cerrar la conexin. Una vez terminadas las consultas y procesados los resultados, la conexin debera ser cerrada liberando as los recursos asignados a la base de datos.
Erick Arauco Moreno 30

3.1. Acceso a Datos

Erick Arauco Moreno

31

3.1. Acceso a Datos

A continuacin observamos los mtodos ms utilizados junto al objeto Statement:


- executeQuery. Ejecuta una consulta SQL y retorna los datos en un objeto ResultSet. El objeto ResultSet puede estar vaco pero nunca nulo. - executeUpdate. Utilizado para operaciones de actualizacin, insercin o eliminacin. Devuelve el nmero de filas afectadas, lo cual puede ser cero. Soporta comando DDL (Lenguaje para Definicin de Datos).

- executeBatch. Ejecuta un grupo de comandos como una sola unidad y retorna un arreglo con la cantidad de actualizaciones realizadas por cada comando.

Erick Arauco Moreno

32

3.1. Acceso a Datos


response.setContentType(CONTENT_TYPE); PrintWriterout = response.getWriter(); try {

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); Connection conn; conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.16.4:1521:db2ets","U_Profesor", "OraProfesor"); // driver@machineName:port:SID,userid,password Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select* from personal"); out.println("<html>"); out.println("<head><title>ViewTableServlet</title></head>"); out.println("<body>"); while (rset.next()) { out.println("<p>"+ rset.getString(1)+ "</p>"); } out.println("</body></html>"); rs.close(); stmt.close(); conn.close(); out.close(); } catch (SQLException ex) { ex.printStackTrace(); } } }

Erick Arauco Moreno

33

3.2. Prepared Statements

Entre las principales ventajas de este tipo de Statement en relacin a los convencionales podemos mencionar:
- Performance. En algunos casos utilizar sentencias precompiladas puede representar el 62% del tiempo total que puede demandar utilizar sentencias simples. - Seguridad. Evitar recibir cadenas mal formadas que comprometan la ejecucin de la aplicacin (SQL Injection). Para lograr anular un ataque SQL Injection al momento de recibir datos desde un formulario HTML, es necesario utilizar sentencias precompiladas procedimientos almacenados con la finalidad de actualizar la base de datos.
Connection connection = DriverManager.getConnection(url,username, password); String template = "UPDATE music SET price = ? WHERE id = ?"; PreparedStatementstatement = connection.prepareStatement(template); float[]newPrices = getNewPrices(); int[]recordingIDs = getIDs(); for(inti=0; i<recordingIDs.length;i++) { statement.setFloat(1,newPrices[i]); // Price statement.setInt(2,recordingIDs[i]); // ID statement.execute(); }

Erick Arauco Moreno

34

3.3. Pool de conexiones.

Cuando mltiples clientes acceden a la misma aplicacin puede ocurrir un error en el servidor debido a que el mismo intentar siempre atender las solicitudes de todos los clientes y entregar la informacin solicitada.

Erick Arauco Moreno

35

3.3. Pool de conexiones Glassfish.

Context ctx; Connection conn=null; try { ctx = new InitialContext(); DataSource ds; ds = (DataSource)ctx.lookup("jdbc/_mirecurso"); conn = ds.getConnection(); } catch (NamingException e) { e.printStackTrace(); }

Erick Arauco Moreno

36

3.1. Acceso a Datos


response.setContentType(CONTENT_TYPE); PrintWriterout = response.getWriter(); try { Context ctx; Connection conn=null; ctx = new InitialContext(); DataSource ds; ds = (DataSource)ctx.lookup("jdbc/MyPool"); conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select* from personal"); out.println("<html>"); out.println("<head><title>ViewTableServlet</title></head>"); out.println("<body>"); while (rset.next()) { out.println("<p>"+ rset.getString(1)+ "</p>"); } out.println("</body></html>"); rs.close(); stmt.close(); conn.close();

Erick Arauco Moreno

33

4.1. Excepciones con Servlets


Una excepcin es una condicin anormal que ocurre durante la ejecucin de un programa. Las excepciones afectan el normal flujo de un programa, por lo tanto las aplicaciones deben anticiparse y controlar las excepciones para minimizar los daos.
import java.util.Scanner; public class Calculadora { public static int division(int n, int d) { returnn / d; } public static void main (String args[]) { Scanner sc = new Scanner(System.in); System.out.println(Ingrese numerador: ); int num = sc.nextInt(); System.out.println(Ingrese denominador: ); int denom = sc.nextInt(); int resultado= division(num, denom); System.out.println(resultado : + resultado ); } Erick Arauco Moreno } 37

4.1. Excepciones con Servlets


try { //sentencias //Pueden generar una excepcin } catch (TipodeExcepcion ex1) { //sentencias que se ejecutarn cuando se produzca una excepcin del tipo TipodeExcepcion. } catch (OtroTipodeExcepcion ex2) { //sentencias que se ejecutarn cuando se produzca una excepcin del tipo OtroTipodeExcepcion. } finally { //sentencias //Se ejecutan siempre. }

Excepcin IOException ServletException


Erick Arauco Moreno

Descripcin Errordecomunicacin(network). Errorgeneral. Noexistedisponibilidaddelservlet.


38

UnavailableException

4.2. Gestin de las excepciones.

Retornando un cdigo de error utilizando el mtodo sendError() del objeto HttpServletResponse.


try { throw new ServletException("Exception in Servlet"); } catch (ServletException exception) { response.sendError(response.SC_NOT_FOUND); }

Erick Arauco Moreno

39

4.2. Gestin de las excepciones.

El servlet enva una pgina de respuesta al cliente explicando el error.


try { throw new ServletException("Exception in servlet"); }catch (ServletException exception){ response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println("En este momento se lanz una excepcion"); out.close(); }

Erick Arauco Moreno

40

4.2. Gestin de las excepciones.

Generando un archivo log en el cual se puede encontrar la explicacin al error encontrado.


try { throw new ServletException("Exception for log"); }catch (ServletException exception){ log("Enviado al log", exception); response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println("Revisar el log"); out.close(); }

Erick Arauco Moreno

41

4.2. Gestin de las excepciones.

Imprimiendo el stack trace.


try { throw new ServletException("Exception for Stack Trace"); }catch(ServletException exception){ response.setContentType("text/plain"); PrintWriter out = response.getWriter(); exception.printStackTrace(out); out.close(); }

Erick Arauco Moreno

42

5.1. Sesiones.

Una sesin es un contexto de almacenamiento de datos gestionado por el servidor Web que permite identificar a usuarios mientras dure su navegacin en la aplicacin web. Las sesiones son nicas y corresponden a un solo usuario. Una sesin se obtiene utilizando el mtodo getSession(). Si el parmetro de entrada del mtodo es true y la sesin no existe se crea.

Erick Arauco Moreno

43

6.1. JSP Java Server Pages

JSP no es distinto de otros lenguajes para desarrollo web. Genera tambin contenido dinmico. Su principal uso radica en ser parte de la capa de presentacin debido a que es ms simple generar contenido dinmico desde una pgina JSP en lugar de un Servlet Java. El servlet generado extiende la clase HttpJSPServlet. Esta clase contiene los siguientes mtodos:
- jspInit(). Este mtodo es invocado cuando la pgina JSP es inicializada. Equilavente al mtodo init() del servlet. - jspDestroy(). Este mtodo es similar al mtodo destroy() del servlet. - _jspService(). Este mtodo contiene todo el cdigo HTML. Equivalente al mtodo service() de los servlets. Para cada solicitud de los clientes, un hilo (thread) ejecuta este mtodo con el objetivo de satisfacer los requerimientos.

Erick Arauco Moreno

44

6.2. JSP Sintaxis


<%@ page language=java import=java.util.* %>

Una directiva JSP representa informacin vital para el motor JSP. Podemos encontrar:
- Directiva de Pgina. Una directiva de pgina provee de informacin al motor JSP sobre la pgina que estamos creando. Entre los atributos ms importantes encontramos: - language. Define el lenguaje de script a utilizar. Por defecto java. Los motores JSP slo entienden Java. - extends. Usado cuando la pgina JSP compilada debe extender alguna clase - import. Utilizado en el caso que debemos realizar importacin de clases java. - session. Por defecto verdadero. Valor booleano que define si la pgina debe gestionar sesiones. - contentType. Tipo de contenido a generar. Protocolo MIME.
Erick Arauco Moreno 45

6.2. JSP Sintaxis

Elementos script:
- Declaraciones. Las pginas JSP pueden contener variables y mtodos definidos como cualquier programa Java. Las variables y los mtodos son declaradas utilizando la siguiente etiqueta: <%! %>. Las variables y los mtodos declarados tienen un alcance a nivel de clase, esto significa que estn disponibles en todo el servlet generado. - Scriptlets. Bloque de cdigo Java situado en el interior del mtodo service() del servlet. Un scriptlet inicia con la etiqueta <% y termina con %>.
- Expresiones. Una expresin representa una salida. Representada por las etiquetas <%= %> .

Erick Arauco Moreno

46

6.2. JSP Sintaxis


Etiquetas estndar de accin:

<jsp:useBean id=name scope=page | request | session | application beanName =bean class Name />

Este tipo de elemento permite realizar acciones como: instanciacin de un objeto cambios en el estado del mismo. Entre las principales etiquetas podemos encontrar:
- <jsp:useBean>. Incluye un Bean en la pgina JSP, esto significa que habilita a la pgina para acceder a las propiedades del Bean utilizando los mtodos set / get. - id. Contiene el nombre que usaremos para referirnos al Bean. - scope. Determine el periodo de vida del Bean. Puede ser:

- page. El Bean estar vivo mientras la pgina exista. Por defecto.


request. Disponible para la peticin actual del cliente. ServletRequest. session. Una vez instanciado el objeto, podr ser accesible desde cualquier pgina JSP utilizando el objeto HttpSession y el mtodo getAttribute(). Si termina la sesin, se destruye el objeto.
vivo hasta que el servidor sea apagado.

- application. El objeto una vez instanciado est disponible para todos los clientes y permanece
- beanName. Nombre de la clase que representa el Bean.
Erick Arauco Moreno 47

6.2. JSP Sintaxis

<jsp:getProperty name=bean name property= property name />

<jsp:setProperty name=bean name property= property name value= value />

Erick Arauco Moreno

48

6.3. Modelo Vista Controlador

Escribir aplicaciones J2ee utilizando Servlets y pginas JSP no es una tarea complicada, pero esto nos puede originar ms de un problema sobre todo si empezamos a observar duplicidad de cdigo en los diversos servlets que conforman nuestra aplicacin.
Una solucin a este problema es la implementacin del patrn MVC (Modelo Vista Controlador) que nos va a permitir ordenar el cdigo de nuestra aplicacin. El patrn mencionado est compuesto por los siguientes elementos:
- Modelo. Representa el acceso a la base de datos. Define uno o varios mtodos que permitan enviar y/o recuperar datos desde cualquiera de las tablas que forman parte de la BD. - Controlador. Encargado de recibir las peticiones y datos desde la vista, decidir que mtodo del modelo ejecutar y devolver el resultado a la vista para su posterior presentacin. Representado tpicamente por los Servlets Java. - Vista. Representado por las pginas JSP encargadas de capturar los datos del cliente y de presentar los resultados.

Erick Arauco Moreno

49

7.1. MVC con Servlets

Puntos dbiles: Extensin del controlador: El Servlet controlador puede volverse demasiado complejo y complicado de mantener. Cdigo Java en pginas JSP. Capa Datos: Almacenamiento de la informacin. Solucin: Dividir el controlador en varios sub-controladores. Usar Struts.

Erick Arauco Moreno

49

7.2. Struts

Framework o marco de trabajo desarrollado por el grupo Apache, que proporciona un conjunto de utilidades cuyo objetivo es facilitar el desarrollo de aplicaciones Web con tecnologa J2EE siguiendo el patrn MVC.
Beneficios: Control declarativo de peticiones. Con Struts el programador no tiene que preocuparse por controlar desde cdigo las distintas acciones a realizar en funcin del tipo de peticin que llega al controlador. Utilizacin de direcciones virtuales. Permite asignar direcciones virtuales asociadas a los diferentes objetos. Manipulacin de datos con JavaBean. Struts se encarga automticamente de la instanciacin, rellenado y recuperacin de los mismos. Juego de libreras JSP. Libreras predefinidas para pginas JSP.

Erick Arauco Moreno

49

7.3. Archivos de configuracin

Adems del descriptor de despliegue web.xml definido por la especificacin J2ee, una aplicacin requiere de otros archivos adicionales, siendo el ms importante:
struts-config.xml ApplicationResource.properties. Definicin de cadenas de texto. Internacionalizacin. validator-rules.xml. Reglad para la validacin automtica de los datos de usuario. tiles-defs.xml. Reutilizacin de modelos de plantillas para la vista.

Erick Arauco Moreno

49

7.4. El Ap Struts

Formado por un conjunto de clases para estructurar las aplicaciones y simplificar su desarrollo. Paquetes org.apache.struts.action y org.apache.struts.actions. Clases: ActionServlet. Constituye el punto de entrada de la aplicacin recibiendo todas las peticiones HTTP que llegan de la capa cliente. Es un Servlet. Cada vez que recibe una peticin desde el cliente y a fin de determinar la operacin a realizar, extrae la ltima parte de la URL y la contrasta con la informacin contenida en el archivo de configuracin (struts-config.xml) a partir de la cual, instancia el JavaBean asociado a la accin, lo rellena con los datos procedentes del formulario y lo pasa al objeto Action correspondiente.

Erick Arauco Moreno

49

7.4. El Ap Struts

Action. Responsables de procesar los distintos tipos de peticiones que llegan a la aplicacin. El principal mtodo con que cuenta esta es execute(), mtodo que ser invocado por ActionServlet al transferir la peticin al objeto. Por cada tipo de peticin que se vaya a controlar, el programador deber implementar el mtodo execute(), se incluyen las acciones para el tratamiento de la peticin, llamadas al modelo, o transferencia de datos a la vista.

Erick Arauco Moreno

49

7.4. El Ap Struts

ActionForm. Tipo especial de JavaBean que facilitan el transporte de datos entre las capas de la aplicacin. Utilizador por ActionServlet para capturar datos procedentes del formulario HTML y envirselo al objeto Action. Normalmente se implementan los mtodos get / set de un JavaBean.

Erick Arauco Moreno

49

7.5. Funcionamiento
struts-config.xml

Action 1

Browser

ActionServlet

Action 2

Modelo

Action 3
Vista ActionForm1

Erick Arauco Moreno

ActionForm2

49

8.1. Autentificacin y Autorizacin

JAAS (Java Authentication and Authorization Service) es un conjunto de libreras disponibles en la mquina virtual java desde la versin 1.4 a travs de las cuales se define un formato estndar para controlar el acceso a las aplicaciones. Autentificacin.

La autentificacin representa el proceso a travs del cul el usuario debe identificarse para poder acceder a un conjunto de servicios.
Autorizacin.

La autorizacin representa el proceso, a travs del cul se controlan las acciones de un usuario ya autentificado, por lo tanto, se le conceden o niegan permisos sobre distintos servicios.
Erick Arauco Moreno

49

8.1. Autentificacin y Autorizacin

JAAS (Java Authentication and Authorization Service) es un conjunto de libreras disponibles en la mquina virtual java desde la versin 1.4 a travs de las cuales se define un formato estndar para controlar el acceso a las aplicaciones. Autentificacin.

La autentificacin representa el proceso a travs del cul el usuario debe identificarse para poder acceder a un conjunto de servicios.
Autorizacin.

La autorizacin representa el proceso, a travs del cul se controlan las acciones de un usuario ya autentificado, por lo tanto, se le conceden o niegan permisos sobre distintos servicios.
Erick Arauco Moreno

49

8.2. Realms, grupos, roles

Un realm es definido en un servidor web de aplicaciones. Contiene una coleccin de usuarios los cules pueden estar o no asignados a un grupo. Una aplicacin frecuentemente ingresar un usuario y contrasea antes de acceder a un recurso protegido. Luego de esto, esta informacin es pasada al servidor quin se encargar de autenticar los datos. En algunas aplicaciones, los usuarios autorizados son asociados a roles, en esta situacin, el rol asignado al usuario debe ser mapeado con un grupo definido en el servidor.

Erick Arauco Moreno

49

8.2. Realms, grupos, roles

Erick Arauco Moreno

49

8.3. Tipos de autentificacin

Autentificacin Bsica.

Erick Arauco Moreno

49

8.3. Tipos de autentificacin

Autentificacin basada en formularios.

Erick Arauco Moreno

49

8.4. Utilizando Glassfish.

Erick Arauco Moreno

49

8.4. Utilizando Glassfish.

Erick Arauco Moreno

49

8.4. Utilizando Glassfish.


<?xml version = '1.0' encoding = 'windows-1252'?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> <servlet> <servlet-name>Controlador</servlet-name> <servlet-class>project_mvc2.Controlador</servlet-class> </servlet> <servlet-mapping> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <servlet-name>Controlador</servlet-name> <!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 <url-pattern>/controlador</url-pattern> Servlet 2.5//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_5</servlet-mapping> 0.dtd"> <security-constraint> <sun-web-app> <web-resource-collection> <security-role-mapping> <web-resource-name>Todas</web-resource-name> <role-name>usuario</role-name> <url-pattern>/*</url-pattern> <group-name>appuser</group-name> </web-resource-collection> </security-role-mapping> <auth-constraint> </sun-web-app> <role-name>usuario</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>file</realm-name> </login-config> </web-app>

Erick Arauco Moreno

49

8.4. Utilizando Glassfish basada en formularios


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Login</title> </head> <body> <p>Please enter your username and password to access the application</p> <form method="POST" action="j_security_check"> <table cellpadding="0" cellspacing="0" border="0"> <%@ page language="java" contentType="text/html; charset=UTF-8" <tr> pageEncoding="UTF-8"%> <td align="right">Username:&nbsp;</td> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <td><input type="text" name="j_username"></td> "http://www.w3.org/TR/html4/loose.dtd"> </tr> <html> <tr> <head> <title>Login Error</title> </head> <td align="right">Password:&nbsp;</td> <body> <td><input type="password" name="j_password"></td> Usuario no autorizado. <br /> </tr> <a href="Login.jsp">Intente de nuevo</a> <tr> </body> <td></td> </html> <td><input type="submit" value="Login"></td> </tr> </table> </form> </body> </html>

Erick Arauco Moreno

49

8.5. Utilizando Glassfish basada en formularios / utilizando Realm JDBC


create table usertable(userid varchar(10) not null, password varchar(32) not null, primary key(userid)); create table grouptable(userid varchar(10) not null, groupid varchar(20) not null, primary key(userid)); alter table grouptable add constraint FK_USERID foreign key(userid) references usertable(useruserid);

Erick Arauco Moreno

49

8.5. Utilizando Glassfish basada en formularios / utilizando Realm JDBC

Erick Arauco Moreno

49

8.5. Utilizando Glassfish basada en formularios / utilizando Realm JDBC

<login-config> <auth-method>FORM</auth-method> <realm-name>cmac_realm</realm-name> <form-login-config> <form-login-page>/Login.jsp</form-login-page> <form-error-page>/Login_Error.jsp</form-error-page> </form-login-config> </login-config>

Erick Arauco Moreno

49

9.1. Java Server Faces


Java Server Faces (JSF) es un framework java orientado a la construccin de aplicaciones j2ee facilitando el diseo de las interfaces grficas. Su objetivo principal es la simplificacin de la interfaz de usuario, lo cul ha sido hasta ahora uno de los principales problemas para este tipo de aplicaciones.
Una aplicacin JSF contiene la siguiente estructura:
Un fichero web.xml encargado de activar el respectivo controlador para JSF /faces/*. Un fichero de configuracin faces-config.xml, el cual permite definir la configuracin de todos los elementos JSF en la aplicacin. Directorio WEB-INF que posea normalmente las libreras jsf-api.jar y jsf-impl.jar. Adicionalmente las libreras Apache Commons. Archivos JSTL (Java Server Page Standard Tag Library): jstl.jar y standard.jar.

Erick Arauco Moreno

49

9.1. Java Server Faces


La principal funcin del controlador JSF es asociar a las pantallas, clases java que recogen la infomacin introducida y que disponen de mtodos que responden a las acciones de los usuarios, por lo tanto con JSF podemos:
Mostrar datos al usuario en cajas de texto y/o etiquetas. Recoger datos introducidos. Controlar el estado de los controles de los formularios. Realizar validaciones de los datos introducidos por los usuarios. Controlar eventos. Pginas JSP que representan los formularios JSF. Vista del usuario. Beans java. Clases java lgica y negocio. Ficheros de configuracin. Recursos de la aplicacin: imgenes, javascript, etc.

Resumiendo, las aplicaciones JSF estn conformadas por los siguientes elementos:

Erick Arauco Moreno

49

9.1. Java Server Faces

Cada pgina JSP que necesite utilizar elementos JSF para construir la interfaz grfica del usuario deber definir inicialmente las directivas JSF que le permiten utilizar las etiquetas respectivas. En la siguiente figura observamos el uso de las directivas JSF:
<%@ page contentType="text/html"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>

Erick Arauco Moreno

49

9.2. Algunos elementos JSF

Elemento JSF h:commandButton h:commandLink h:form h:inputText h:message

Descripcin
Botones. Enlaces. Formulario. Campo de texto. Imprime un mensaje de error.

Erick Arauco Moreno

49

9.3. Ejemplo de una pgina JSF


<%@ page contentType="text/html"%> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%> <f:view> <html> <body> <h:form> <h2>A simple JSF page</h2> <h:inputText value=#{modelBean.username}/> <h:commandButton value=Ckick here/> </h.form> </body> </html> </f:view>

Erick Arauco Moreno

49

9.4. Ciclo de vida del procesamiento de una peticin JSF

Restaurar los componentes de la vista (restore view). El controlador crea una estructura tipo rbol de cada componente grfico utilizado en la pgina. En la siguiente figura observaremos la representacin grfica de la estructura creada.

Erick Arauco Moreno

49

9.4. Ciclo de vida del procesamiento de una peticin JSF

Aplicar valores de la solicitud (apply request values). Una vez creada la estructura de rbol de la vista en memoria; se recuperan los parmetros de entrada y los mismos van siendo almacenados en la propiedad value de cada componente grfico a medida que se recorre el rbol.

UIViewRoot

HtmlForm

HtmlInputT ext

HtmlSelect OneRadio

HtmlSelect OneMenu

Erick Arauco Moreno

49

9.4. Ciclo de vida del procesamiento de una peticin JSF

Procesamiento de las validaciones (process validations). Se inicia la el procedimiento de validacin de los datos almacenados en cada componente segn las reglas definidas en un fichero de configuracin. En este punto podemos decir que si alguno de los campos no supera la validacin respectiva aparecer el mensaje correspondiente.

Validation error.

Invalid email

Erick Arauco Moreno

49

9.4. Ciclo de vida del procesamiento de una peticin JSF

Actualizar los valores del modelo (update model values). Una vez que los datos han sido verificados es tiempo que los datos sean almacenados en el Bean correspondiente.
UIViewRoot

HtmlForm

HtmlInputT ext

HtmlSelect OneRadio

HtmlSelect OneMenu

UserBean #{UserBean.firstName} #{UserBean.lastName} #{UserBean.gender} ..

Erick Arauco Moreno

49

9.4. Ciclo de vida del procesamiento de una peticin JSF

Invocacin a la aplicacin (Invoke application). Se usan los valores del Bean para ejecutar la lgica del negocio. Presentacin de la respuesta (render response). Se delega la autoridad al contenedor JSP para visualizar la pgina de resultado.

Erick Arauco Moreno

49

9.5. Modelo de navegacin

Invocacin a la aplicacin (Invoke application). Se usan los valores del Bean para ejecutar la lgica del negocio. Presentacin de la respuesta (render response). Se delega la autoridad al contenedor JSP para visualizar la pgina de resultado.

<navigation-rule> <from-view-id>/page1.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/page2.jsp</to-view-id> </navigation-case> </navigation-rule>

Erick Arauco Moreno

49

9.5. Modelo de navegacin


<navigation-rule> <from-view-id>/page1.jsp</from-view-id> <navigation-case> <from-outcome>success</from-outcome> <to-view-id>/page2.jsp</to-view-id> </navigation-case>

<navigation-case> <from-outcome>failure</from-outcome> <to-view-id>/page3.jsp</to-view-id> </navigation-case> </navigation-rule>

Erick Arauco Moreno

49

9.6. Beans gestionados

Antes del desarrollo de aplicaciones java empresariales, los desarrolladores java eran los responsables de la instanciacin y gestin de las propiedades una clase java o un JavaBean. Los Bean gestionados son esencialmente objetos java que almacenan informacin y que a su vez son gestionados por el contenedor j2ee. Estos beans son registrados a travs del fichero de configuracin faces-config.xml.

<managed-bean> <managed-bean-name>UserBean</managed-bean-name> <managed-bean-class>project1.UserBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

Erick Arauco Moreno

49

9.6. Beans gestionados

<h:outputText value=#{userBean.firstName}/>

<h:inputText value=#{userBean.firstName}/>

Erick Arauco Moreno

49

9.6. Beans gestionados

<managed-bean> <managed-bean-name>UserBean</managed-bean-name> <managed-bean-class>project1.UserBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>firstName</property-name> <value>Jane</value> </managed-property> <managed-property> <property-name>lastName</property-name> <value>Hopson</value> </managed-property> </managed-bean>

Erick Arauco Moreno

49

9.6. Beans gestionados


<managed-bean> <managed-bean-name>addresBean</managed-bean-name> <managed-bean-class>project1.Address</managed-bean-class> <managed-bean-scope>none</managed-bean-scope> </managed-bean> <managed-bean> <managed-bean-name>UserBean</managed-bean-name> <managed-bean-class>project1.UserBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> <managed-property> <property-name>homeAddress</property-name> <value>#{addressBean}</value> </managed-property> </managed-bean>

<h:inputText value=#{userBean.homeAddress.street}/> Erick Arauco Moreno 49

9.7. Backing Beans

Erick Arauco Moreno

49

10.1. Validaciones

Para la implementacin de validaciones en JSF pone a disposicin de los desarrolladores la interface javax.faces.validator.Validator. Como regla general, esta interface es implementada por objetos que funcionan como validadores. El mtodo contiene algunos parmetros como: FacesContext quien contiene toda la informacin asociada a una peticin, UIComponent, que representa el objeto a validar y Object que presenta el valor sobre el cual se aplicar la validacin.
public void validate (FacesContext context, UIComponent component, Object value)

Erick Arauco Moreno

49

10.2. Validadores ms comunes

javax.faces.DoubleRange. Valida datos de tipo java.lang.Double en un rango determinado. javax.faces.Length. Valida datos de tipo String verificando que su longitud se encuentre en un espeficado rango. javax.faces.LongRange. Valida que los datos de tipo java.lang.Long se ubiquen en un determinado rango.

Erick Arauco Moreno

49

10.2. Validadores ms comunes


<p>Cdigo: <h:inputText value=#{user.codigo} id=cod> <f:validateLenght minimum=3 /> </h:inputText> </p>

Erick Arauco Moreno

49

10.3. Validaciones personalizadas


public void txtusuario_validator(FacesContext facesContext, UIComponent uIComponent, Object object) { // Add event code here... String usuario = (String)object; if (usuario.indexOf(" ") >= 0) { FacesMessage message; message = new FacesMessage("*El nombre de usuario no puede contener espacios en blanco"); throw new ValidatorException(message); } }

<h:inputText binding="#{backing_Registro.txtusuario}" id="txtusuario" validator="#{backing_Registro.txtusuario_validator}"/>

Erick Arauco Moreno

49

10.4. Validaciones personalizadas Parte II


public class No_Espacios_Blanco implements Validator { public void validate(FacesContext context, UIComponent component, Object object) throws ValidatorException { String datos = (String)object; if (datos.indexOf(" ") >= 0) { FacesMessage message; message = new FacesMessage("*El campo no puede contener espacios en blanco"); throw new ValidatorException(message); } } }

<validator> <validator-id>no_espacios_blanco</validator-id> <validator-class>project__1.No_Espacios_Blanco</validator-class> </validator>

Erick Arauco Moreno

49

10.4. Validaciones personalizadas Parte II


<h:outputLabel value="Usuario: " binding="#{backing_Registro.lblusuario}" id="lblusuario"/> <h:inputText binding="#{backing_Registro.txtusuario}" id="txtusuario" required="true"> <f:validator validatorId="no_espacios_blanco"/> </h:inputText>

Erick Arauco Moreno

49

También podría gustarte