4.4 Tutorial de JSTL y Jakarta Struts

4.4 Tutorial de JSTL y Jakarta Struts ¿ Qué es JSTL ? n Existen numerosas librerías de tags JSP que permiten n n n n n n n Iterar sobre coleccio

2 downloads 147 Views 463KB Size

Story Transcript

4.4 Tutorial de JSTL y Jakarta Struts

¿ Qué es JSTL ? n

Existen numerosas librerías de tags JSP que permiten n n

n n n n

n

Iterar sobre colecciones Imprimir valores de propiedades de JavaBeans de forma segura Internacionalización de mensajes, números, fechas, etc. Generación de URLs aplicando URL rewriting Acceso a documentos XML Etc.

Recientemente, se ha estandarizado JSTL (JSP Standard Tag Library) n

Librería de tags estándar y lenguaje de expresiones

Tags en JSTL (1) n

Core n n

n

I18n (internacionalización) n

n

Control de flujo Soporte para URLs Soporte para internacionalización: establecimiento del Locale, generación de mensajes, formateo de números, cantidades monetarias, fechas, etc.

XML n n

n

Parsing de un documento XML Flujo de control para recorrer un documento XML (alternativa a XSL para casos sencillos) Tags para lanzar transformaciones XSL

Tags en JSTL (y 2) n

Acceso a BDs n n

n

n

Permiten lanzar sentencias SQL a BDs relacionales Sólo deberían usarse para prototipado rápido o aplicaciones muy simples

En este apartado y en los dos siguientes se ilustran parte de los tags de los grupos Core e I18n Existen dos versiones de la librería de tags (“twin libraries”) n n

JSTL-RT: no soporta el lenguaje de expresiones JSTL-EL: soporta el lenguaje de expresiones n

Es la que usaremos

Lenguaje de expresiones en JSTL (1) n

Actualmente en JSP si se desea dar valor a un atributo de un tag, es preciso usar una expresión n

Ejemplo

... n

JSTL proporciona un lenguaje de expresiones para facilitar su construcción n

Ejemplo

... n

JSP 2.0 incluirá este lenguaje de expresiones n

Estará disponible para cualquier librería de tags

Lenguaje de expresiones en JSTL (2) n

Expresiones y literales n n

Las expresiones tienen que ir rodeadas por ${ y }. Cualquier valor que no empiece por ${, se considera un literal n

n

Los literales que incluyen el símbolo ${, han de escaparlo rodeándolo de ${' y '} Ejemplo:

n

Acceso a atributos de objetos Java en expresiones n

Se puede acceder a las propiedades de un JavaBean, y a objetos de un Map, List o vector

Lenguaje de expresiones en JSTL (3) n

Acceso a atributos de objetos Java en expresiones (cont) n

Ejemplos n n n

n

n

${user.firstName} = user.getFirstName() ${user.address.city} = user.getAddress().getCity() ${user.preferencesMap["shipping"]} = user.getPreferencesMap().get("shipping") ${user.preferencesList[0]} = user.getPreferencesList().get(0)

Unifica el tratamiento de los operadores . y [] n

n

${user.firstName} es

equivalente a ${user["firstName"]} ${user.preferencesMap["shipping"]} es equivalente a ${user.preferencesMap.shipping}

n

Para determinados casos, es preciso usar el operador [] n

n

${user.preferencesMap["book.fiction"]} es equivalente user.getPreferencesMap().get("book.fiction")

a

${user.preferencesMap[product.category]} es equivalente user.getPreferencesMap().get(product.getCategory())

a

Lenguaje de expresiones en JSTL (4) n

Objetos implícitos n

Entre otros n n n n n

n

n

pageScope (Map) requestScope (Map) sessionScope (Map) applicationScope (Map) param (Map que mapea nombres de parámetros univaluados a String) paramValues (Map que mapea nombres de parámetros multivaluados a String[])

Cuando se usa un objeto sin especificar su ámbito (el objeto implícito en el que está contenido), se busca en los ámbitos page, request, session y application (en este orden) n

Ejemplo

...

Lenguaje de expresiones en JSTL (y 5) n

Literales n n n n

n

Boolean (true y false) Numéricos Cadenas de caracteres (entre comillas simples o dobles) null

Operadores n n n n n

Aritméticos: +,-, *, /, div, %, mod Lógicos: &&, and, ||, or, !, not Relacionales: ==, eq, !=, ne, , gt, =, ge empty: permite comprobar si un valor es null Ejemplos ... ...

n

Se pueden usar paréntesis

¿ Qué es Struts ? n

n

Framework OpenSource para implementar aplicaciones web con servlets y JSP según el patrón arquitectónico Model-View-Controller Subproyecto de Jakarta n

n

n

Autor principal: Craig R. McClanahan

Funciona sobre cualquier servidor de aplicaciones web que implemente las APIs de servlets y JSP Ha ganado gran relevancia en el mundo de las aplicaciones web Java n n n

Versión 1.0 estable en Julio 2001 Posteriormente, surgieron muchos otros framework MVC Actualmente se está estandarizando JavaServer Faces (http://java.sun.com/j2ee/javaserverfaces), que formará parte de J2EE n

Struts 1.2 estará parcialmente integrado con JSTL y JavaServer Faces, y la integración será completa en Struts 2.0

¿ Qué proporciona Struts ? n n

Un servlet Front Controller y clases relacionadas Una librería de tags JSP muy completa

El patrón Front Controller en Struts (1) javax.servlet.http.HttpServlet

org.apache.struts.action.ActionServlet 0..n

# doGet # doPost

org.apache.struts.action.Action + execute



org.apache.struts.action.ActionForm + reset + validate

Action1

ActionN

...

ActionForm1

ActionFormN

...



El patrón Front Controller en Struts (2) n

ActionServlet n n

Servlet Front Controller En web.xml se especifica que todas las URLs que impliquen procesamiento (por GET o POST) vayan a este servlet n

n

Clases ActionForm n

Si el programador lo desea, puede acceder a los parámetros de la request a través de un JavaBean que extiende ActionForm n

n

Ej.: las URLs que termine en .do

Especialmente útil en formularios

Clase Action => método execute n

n

n

n

Accede a los parámetros de la request, directamente o vía el ActionForm correspondiente Realiza la operación invocando un método de un Session Facade del modelo o una fachada del controlador Deja el resultado devuelto por el método en la request o en la sesión Devuelve un objeto ActionForward, que representa la URL que hay que visualizar a continuación (sendRedirect o forward)

El patrón Front Controller en Struts (3) n

Fichero de configuración n

Clases ActionForm que usa nuestra aplicación n n

n

Nombre lógico (ej.: loginForm) Nombre completo de la clase (ej.: es.udc.fbellas.j2ee.strutstutorial.portal3.http .view.actionforms.LoginForm)

URLs que implican procesamiento n

URL de tipo path relativo a contexto (ej.: /Login) n

n

n

No llevan el .do final

Nombre completo de la clase Action (ej.: es.udc.fbellas.j2ee.strutstutorial.portal3.http .controller.actions.LoginAction) Nombre lógico de la clase ActionForm asociada

El patrón Front Controller en Struts (y 4) n

Fichero de configuración (cont) n

Definiciones de nombres lógicos de URLs n

n n

n

n

Nombre que usan las acciones cuando devuelven un ActionForward (ej.: ShowMainPage) sendRedirect o forward URL a invocar (ej.: /MainPage.jsp)

Cuando el servlet ActionServlet arranca (init), lee el fichero de configuración Crea una única instancia de cada clase Action n

n n

No se crea una instancia de una clase Action por cada petición que se recibe Tienen que ser thread-safe Misma situación que cuando se trabaja con servlets

La librería de tags de Struts (1) n

Bean n

n n

n

Imprimir el valor de las propiedades de JavaBeans de manera segura Soporte para internacionalización de mensajes No los usaremos, dado que JSTL ofrece una alternativa estándar

HTML n

Generación de HTML básico n n

n

Campos de entrada en formularios Enlaces (con URL rewriting)

Logic n n

Control de flujo No los usaremos, dado que JSTL ofrece una alternativa estándar

La librería de tags de Struts (y 2) n

Template n

n

n

Caso particular del patrón Composite View (plantillas de páginas JSP) Lo veremos con MiniBank y MiniPortal

Tiles n n

Una versión mejorada de Template Se incorporó en la versión 1.1

Arquitectura MVC con Struts n

Modelo n

n

Controlador n n

n

Clases independientes de la vista y el controlador Conjunto de clases Action Interactúan con el modelo y seleccionan la siguiente vista (dejándole los datos en uno de los cuatro posibles ámbitos, normalmente request o session)

Vista n n

Conjunto de clases ActionForm Conjunto de páginas JSP n n n

No contienen código Java Sólo visualizan datos Usan acciones JSP para recuperar los valores a mostrar y formatearlos

Demo Portal-3 (1) Lanzar el navegador

Acceder a Portal-3 main page

Demo Portal-3 (2) Clic Login

Demo Portal-3 (y 3)

Clic en Logout Terminar y lanzar el navegador dos días más tarde

Acceder a Portal-3 main page

Portal-3 main page (Welcome to Portal-3)

Estructura de paquetes es.udc.fbellas.j2ee.util.struts.action es.udc.fbellas.j2ee.strutstutorial.portal3 http controller actions view actionforms messages model userfacade delegate exceptions

jar tvf StrutsTutorial.war (1) MainPage.jsp InternalError.jsp Login.jsp Index.jsp WEB-INF/Struts/struts-html.tld WEB-INF/Struts/struts-config.xml WEB-INF/StdTagLibs/fmt.tld WEB-INF/StdTagLibs/c.tld WEB-INF/lib/standard.jar WEB-INF/lib/jstl.jar WEB-INF/lib/jaxen-full.jar WEB-INF/lib/saxpath.jar WEB-INF/lib/struts.jar WEB-INF/lib/commons-*.jar WEB-INF/lib/StandardUtil.jar WEB-INF/lib/WebUtil.jar

jar tvf StrutsTutorial.war (y 2) WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/model/ userfacade/delegate/UserFacadeDelegate.class WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/model/ userfacade/exceptions/IncorrectPasswordException.class WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/http/ controller/actions/LoginManager.class WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/http/ controller/actions/LogoutAction.class WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/http/ controller/actions/LoginAction.class WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/http/ controller/actions/MainPageAction.class WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/http/view/ actionforms/LoginForm.class WEB-INF/classes/es/udc/fbellas/j2ee/strutstutorial/portal3/http/view/ messages/Messages.properties WEB-INF/web.xml

Comentarios n

WEB-INF/Struts n

n

n

Ficheros *.tld: descriptores de las librerías de las acciones proporcionadas por Struts struts-config.xml: configuración de Struts para la aplicación del tutorial

WEB-INF/StdTagLibs n

Ficheros *.tld: descriptores de las librerías de las acciones proporcionadas por JSTL

n

WEB-INF/lib

n

struts.jar, commons-*.jar: Struts n standard.jar, jstl.jar, jaxen-full.jar, saxpath.jar: Jakarta Standard TagLibs (implementación OpenSource de JSTL) n StandardUtil.jar y WebUtil.jar: subsistema Util de J2EEExamples WEB-INF/classes/es/.../Messages.properties n

n

Internacionalización de mensajes

WEB-INF/web.xml (1)

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.