1
MDULO 1: Introduccin al desarrollo Web con JSF y Spring
Introduccin
En la actualidad existen cientos de sitios pblicos en la Web utilizando la tecnologa Java Serve Faces (en adelante, JSF). Por otra parte, no se sabe cuntos sitios JSF no evidentes existen, ni el nmero de sitios de la intranet que lo estn utilizando, debido a la naturaleza secreta del mundo financiero. Lo cierto es que esta tecnologa cada da va ocupando un lugar ms importante dentro de los desarrolladores Web.
JSF surge como un framework muy prometedor y una opcin muy recomendable para nuevos desarrollos. Con JSF conseguimos un nivel de presentacin llamativo, sencillo de hacer y modificar, los elementos de la interfaz de usuario (componentes JSF) y dems aspectos grficos de las pginas estarn diseados de forma que se pueda cambiar posteriormente su aspecto sin necesidad de actuar sobre cada uno de los formularios o pginas de aplicacin. Estas ventajas que ofrece JSF han hecho que varias empresas acordaran ser usuarias JSF referenciadas. Sin embargo, no podemos pasar por alto que a JSF an le falta algn tiempo para consolidarse ms firmemente y que haya tanta informacin disponible sobre esta tecnologa como la hay sobre otros frameworks competidores.
De este modo, JSF es otra posibilidad que ha venido para quedarse, con buenas perspectivas de futuro, y nadie que se dedique al desarrollo Web en Java debera perderlo de vista.
Te invitamos a estudiar ms sobre esta tecnologa. A travs de este mdulo podrs conocer en qu consiste, cules son sus caractersticas, las ventajas que ofrece y te presentaremos la estructura Spring Framework sobre la que se soporta.
TEMA 1. Qu es JSF?
Java Server Faces (JSF) fue creado dentro del Java Community Process de SUN, en el que han participado lderes de la industria como Oracle, BEA, IBM, etc. Es el framework oficial de SUN para el desarrollo de aplicaciones Web en Java, liberado en marzo de 2004. Uno de los lderes,
2 Craig McClanahan, es el creador del popular framework Struts. Adems, como un desarrollo adicional al JCP, encontramos dentro del proyecto Yakarta, el framework MyFaces.
JSF es un framework basado en el patrn MVC (Modelo Vista Controlador) para aplicaciones Java basadas en Web que simplifica el desarrollo de interfaces grficas de usuario (GUI) en aplicaciones Java EE.
Un framework es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado.
Tpicamente suelen incluir soporte de programas, bibliotecas y un lenguaje interpretado, para entre otras cosas, ayudar a desarrollar y unir los diferentes componentes de un proyecto.
JSF pretende normalizar y estandarizar el desarrollo de aplicaciones Web.
Ofrece una clara separacin entre el comportamiento y la presentacin, lo que permite a cada miembro del equipo de desarrollo de una aplicacin Web enfocarse en su parte del proceso de desarrollo. Y, adems, proporciona un sencillo modelo de programacin para enlazar todas las piezas.
3 Dnde se utiliza JSF, ejemplos: Hay cientos de sitios pblicos en la Web utilizando la tecnologa JSF. Existen numerosos sitios JSF no evidentes, aunque no se sabe exactamente cuntos ni el nmero de sitios de la intranet que lo estn utilizando, debido a la naturaleza secreta del mundo financiero. Varias empresas han acordado ser usuarias JSF referenciadas, y sus historias estn documentadas en la pgina http://jsfcentral.com/trenches/. Cualquier cliente de JavaStudio Creator, Oracle JDeveloper, o cualquiera de los productos y herramientas que aparece en el Listado Central de Productos de JSF tambin estn utilizando JSF. Existe una lista de sitios desarrollados con Java Server Faces que se publica en Java.Net, una pgina Wiki sobre sitios desarrollados con JSF.
TEMA 2. Por qu otro estndar?
Los frameworks son diseados con el intento de facilitar el desarrollo de software, permitiendo a los diseadores y programadores pasar ms tiempo identificando requerimientos de software que tratando con los tediosos detalles de bajo nivel de proveer un sistema funcional. La tecnologa JSF surge como una solucin a la separacin entre la presentacin y el comportamiento en una aplicacin Web, de forma que las actividades de los autores de las pginas puedan separarse de las actividades de los desarrolladores de la lgica. Esto posibilita el desarrollo de entornos de desarrollos (IDE) que permitan trabajar en el diseo con funcionalidades del tipo drag-and-drop. JSF nos permite programar ms rpidamente, ahorra trabajo, da consistencia a nuestro cdigo, permite separar una presentacin de negocio y mejora la seguridad de nuestra aplicacin. JSF es posterior a la herramienta de soporte para el desarrollo de aplicaciones Web Apache Struts, por lo que se nutre de su experiencia y mejora algunas sus deficiencias. Struts es una herramienta de soporte para el desarrollo de aplicaciones Web bajo el patrn MVC bajo la plataforma J2EE (Java 2, Enterprise Edition). Veamos una pequea comparacin entre Struts y JSF: o JSF gana a Struts en flexibilidad del controlador y manejo de eventos, navegacin, desarrollo de pginas, integracin y extensibilidad (soporta diversas tecnologas de presentacin). o Struts nicamente sale vencedor en madurez.
Esto no significa que JSF vaya a desplazar a otros frameworks. Struts y JSF pueden combinarse para dotar a la aplicacin de una extensa plataforma de desarrollo en la que todas las capas de la implementacin tienen su espacio definido.
4 Otra de las caractersticas importantes que presenta JSF es que, a pesar de que HTML es su lenguaje por defecto, no est limitado a ste ni a ningn otro, pues tiene la capacidad de utilizar diferentes renderers para los componentes GUI y obtener as diferentes salidas para mandar al cliente.
Tema 3 Qu define y qu ofrece al desarrollo?
Principios de diseo. http://elearning.suniongesfor.com/ceim1/file.php/354/moddata/scorm/1582/modulo01/leccion03/course.html La especificacin JSF fue diseada segn los siguientes principios: o o o o o o Amigable. Independiente del protocolo y del dispositivo del cliente. Posibilidad de utilizarse con tecnologas JSP. Independencia de tecnologas JSP. Escalable. Posibilidad de utilizarse con navegadores Web actuales.
Principales componentes. Aula virtual CEIM: Entrar al sitio // setTimeout('fix_column_widths()', 20); // // function openpopup(url, name, options, fullscreen) { var fullurl = "http://elearning.sunion-gesfor.com/ceim1" + url; var windowobj = window.open(fullurl, name, options); if (!windowobj) { return true; } if (fullscreen) { windowobj.moveTo(0, 0); windowobj.resizeTo(screen.availWidth, screen.availHeight); } windowobj.focus(); return false; } function uncheckall() { var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length; i++) { inputs[i].checked = false;
5 } } function checkall() { var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length; i++) { inputs[i].checked = true; } } function inserttext(text) { text = ' ' + text + ' '; if ( opener.document.forms['theform'].message.createTextRange && opener.document.forms['theform'].message.caretPos) { var caretPos = opener.document.forms['theform'].message.caretPos; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text; } else { opener.document.forms['theform'].message.value += text; } opener.document.forms['theform'].message.focus(); } addonload(function() { if(el = document.getElementById('password')) el.focus(); }); function getElementsByClassName(oElm, strTagName, oClassNames){ var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName); var arrReturnElements = new Array(); var arrRegExpClassNames = new Array(); if(typeof oClassNames == "object"){ for(var i=0; i<oClassNames.length; i++){ arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)")); } } else{ arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\/g, "\\-") + "(\\s|$)")); } var oElement; var bMatchesAll; for(var j=0; j<arrElements.length; j++){ oElement = arrElements[j]; bMatchesAll = true; for(var k=0; k<arrRegExpClassNames.length; k++){ if(!arrRegExpClassNames[k].test(oElement.className)){ bMatchesAll = false; break; } } if(bMatchesAll){ arrReturnElements.push(oElement); }
6 } return (arrReturnElements) } //Usted no se ha autentificado. (Entrar) Principales usos Aula virtual CEIM: Entrar al sitio // setTimeout('fix_column_widths()', 20); // // function openpopup(url, name, options, fullscreen) { var fullurl = "http://elearning.sunion-gesfor.com/ceim1" + url; var windowobj = window.open(fullurl, name, options); if (!windowobj) { return true; } if (fullscreen) { windowobj.moveTo(0, 0); windowobj.resizeTo(screen.availWidth, screen.availHeight); } windowobj.focus(); return false; } function uncheckall() { var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length; i++) { inputs[i].checked = false; } } function checkall() { var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length; i++) { inputs[i].checked = true; } } function inserttext(text) { text = ' ' + text + ' '; if ( opener.document.forms['theform'].message.createTextRange && opener.document.forms['theform'].message.caretPos) { var caretPos = opener.document.forms['theform'].message.caretPos; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text; } else { opener.document.forms['theform'].message.value += text; } opener.document.forms['theform'].message.focus(); } addonload(function() { if(el = document.getElementById('password')) el.focus(); });
function getElementsByClassName(oElm, strTagName, oClassNames){ var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName); var arrReturnElements = new Array(); var arrRegExpClassNames = new Array(); if(typeof oClassNames == "object"){ for(var i=0; i<oClassNames.length; i++){ arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)")); } } else{ arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\/g, "\\-") + "(\\s|$)")); } var oElement; var bMatchesAll; for(var j=0; j<arrElements.length; j++){ oElement = arrElements[j]; bMatchesAll = true; for(var k=0; k<arrRegExpClassNames.length; k++){ if(!arrRegExpClassNames[k].test(oElement.className)){ bMatchesAll = false; break; } } if(bMatchesAll){ arrReturnElements.push(oElement); } } return (arrReturnElements) } //Usted no se ha autentificado. (Entrar) Principales ventajas Aula virtual CEIM: Entrar al sitio // setTimeout('fix_column_widths()', 20); // // function openpopup(url, name, options, fullscreen) { var fullurl = "http://elearning.sunion-gesfor.com/ceim1" + url; var windowobj = window.open(fullurl, name, options); if (!windowobj) { return true; } if (fullscreen) { windowobj.moveTo(0, 0); windowobj.resizeTo(screen.availWidth, screen.availHeight); } windowobj.focus();
8 return false; } function uncheckall() { var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length; i++) { inputs[i].checked = false; } } function checkall() { var inputs = document.getElementsByTagName('input'); for(var i = 0; i < inputs.length; i++) { inputs[i].checked = true; } } function inserttext(text) { text = ' ' + text + ' '; if ( opener.document.forms['theform'].message.createTextRange && opener.document.forms['theform'].message.caretPos) { var caretPos = opener.document.forms['theform'].message.caretPos; caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text; } else { opener.document.forms['theform'].message.value += text; } opener.document.forms['theform'].message.focus(); } addonload(function() { if(el = document.getElementById('password')) el.focus(); }); function getElementsByClassName(oElm, strTagName, oClassNames){ var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName); var arrReturnElements = new Array(); var arrRegExpClassNames = new Array(); if(typeof oClassNames == "object"){ for(var i=0; i<oClassNames.length; i++){ arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)")); } } else{ arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\/g, "\\-") + "(\\s|$)")); } var oElement; var bMatchesAll; for(var j=0; j<arrElements.length; j++){ oElement = arrElements[j]; bMatchesAll = true; for(var k=0; k<arrRegExpClassNames.length; k++){ if(!arrRegExpClassNames[k].test(oElement.className)){
9 bMatchesAll = false; break; } } if(bMatchesAll){ arrReturnElements.push(oElement); } } return (arrReturnElements) } //Usted no se ha autentificado. (Entrar)
TEMA 4. Marco de trabajo Spring
El Spring Framework (tambin conocido simplemente como Spring) es un framework de cdigo abierto de desarrollo de aplicaciones para la plataforma Java. A pesar de que Spring Framework no obliga a usar un modelo de programacin en particular, se ha popularizado en la comunidad de programadores en Java al considerrsele una alternativa y un sustituto del modelo de Enterprise JavaBean. Por su diseo, el framework ofrece mucha libertad a los desarrolladores en Java y soluciones muy bien documentadas y fciles de usar, prcticas comunes en la industria. Spring Framework est diseado como una serie de mdulos que pueden trabajar independientemente uno de otro. Adems, intenta mantener un mnimo acoplamiento entre la aplicacin y el propio framework de forma que podra ser desvinculado de l sin demasiada dificultad. El Principio de Inversin de Dependencia Spring se basa en IoC. IoC es lo que se conoce como El Principio de Inversin de Dependencia (Inversion of Control: IoC) o patrn Hollywood, que consiste en: Un contenedor que maneja objetos por el desarrollador. El contenedor generalmente controla la creacin de estos objetos. Es decir, el contenedor hace los new de las clases Java para que no los realice el desarrollador. El contenedor resuelve dependencias entre los objetos que contiene. Estos puntos son suficientes y necesarios para poder hablar de una definicin bsica de IoC. Spring proporciona un contenedor que maneja todo lo que se hace con los objetos del IoC. Debido a la naturaleza del IoC, el contenedor ms o menos ha definido el ciclo de vida de los objetos. Y, finalmente, el contenedor resuelve las dependencias entre los servicios que l controla. Mdulos de Spring Los principales mdulos de este framework se muestran en la siguiente figura: Principales caractersticas de Spring Entre las principales caractersticas de este framework se encuentran:
10 1. Se centra en la capa intermedia y proporciona enganches para manejar la solucin elegida para la capa de presentacin y de integracin. 2. Permite internacionalizacin y localizacin. Spring viene integrado con un framework de seguridad, Acegi Security, que gestiona todo el mecanismo de login, autentificacin y autorizacin. 3. No proporciona un mecanismo de plantillas propio, ya que permite elegir la tecnologa a utilizar para la vista (JSP, JSF, velocity, PDF) integrndola con el resto de la aplicacin. 4. Provee un sistema de validacin que no est ligado a una capa concreta, si no que puede ser usado en cualquier capa de la aplicacin. 5. Provee de una interfaz para escribir nuestra lgica de validacin y se encarga del manejo de errores. El sistema de seguridad Acegi tambin ofrece un paquete de validacin. Para los sistemas de navegacin ofrece el mdulo Spring Web Flow que proporciona un motor capaz de capturar los flujos de pginas de una aplicacin e integrarlo con otros frameworks de presentacin como JSF. No proporciona un sistema de cach nativo, pero su diseo permite la integracin de mdulos que se encarguen de ello, como por ejemplo Spring AOP Cache. 6. Spring proporciona un estupendo marco para el testing. Al estar basado en POJOs, los test de unidad son triviales con su adaptacin de JUnit (conjunto de bibliotecas utilizadas en programacin para realizar pruebas unitarias de aplicaciones). Para los test de integracin provee herramientas basadas en su capacidad de IoC (Inversin del Control) y de transaccionalidad. 7. En cuanto al mapeo objeto-relacional (ORM), proporciona integracin con varias implementaciones ORM. Existen dos formas de integracin: una, a travs de plantillas predefinidas del mdulo SpringDAO; la otra, codificando DAOs directamente contra el API del ORM elegido. Cualquiera de las dos aproximaciones ofrece los beneficios de Spring, como ser configuradas a travs de IoC, transaccionalidad, wrapping comn para excepciones de acceso a datos y manejo de la configuracin independiente de la implementacin. 8. Desde el punto de vista de la programacin orientada a aspectos, Spring permite el uso de aspectos en tiempo de ejecucin mediante proxys dinmicos y permite la integracin de AspectJ que ofrece funcionalidad completa. La Inyeccin de dependencias (DI) es una de las bases de Spring sobre la que se cimienta el resto de la arquitectura. La DI se encuentra en el corazn de Spring. A travs de la BeanFactory, el contenedor de IoC solicita los objetos y maneja las relaciones entre ellos, aadiendo funcionalidades como pooling o swapping (intercambio). Al permitir la eleccin de la tecnologa de la capa de presentacin, el soporte para AJAX depender principalmente de la eleccin. 9. La configuracin de Spring est basada en XML. Al no tener anotaciones no le hace dependiente de Java EE 5. Aunque en la versin 2.5 se introduce el uso de las anotaciones. Representacin del funcionamiento de Spring
El diseo de Spring est pensado para ofrecer un modelo de cmo debe trabajar la aplicacin y cmo se comunican sus partes. Est expresamente concebido para que deba ser extensible y acoplable con otros frameworks, ya que no ofrece una solucin completa que abarque desde la presentacin al modelo.
11
TEMA 6. Recuerda que
JSF surge como un framework muy prometedor y una opcin muy recomendable para nuevos desarrollos. Una de las principales ventajas de trabajar con la tecnologa JSF es que est basada en el patrn MVC (Modelo Vista Controlador) ofreciendo una limpia separacin entre el comportamiento y la presentacin. JSF pretende normalizar y estandarizar el desarrollo de aplicaciones Web. JSF nos ofrece un modelo de trabajo basado en componentes UI (user interface), definidos por medio de etiquetas y XML. Asocia (de forma modular) cada componente grfico con los datos (beans de respaldo) y permite la posibilidad de reutilizacin de beans de otras aplicaciones. Incluye la capa de control, definida de forma declarativa en archivos XML, lo que implica control de eventos y errores. Nos permite realizar la validacin en cliente y en servidor; as como llevar el control de mensajes y roles. El Spring Framework (tambin conocido simplemente como Spring) es un framework de cdigo abierto de desarrollo de aplicaciones para la plataforma Java. Spring Framework est diseado como una serie de mdulos que pueden trabajar independientemente uno de otro. La configuracin de Spring est basada en XML.