JavaBeans y JavaServer Pages: Guía rápida. Manuel Urueña



Documentos relacionados
Laboratorio de Aplicaciones Telemáticas

Curso Java Web (JSP's/Servlets)

Contiene código HTML normal junto elementos especiales de JSP. Internamente, el servidor de aplicaciones las compilará a un servlet

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

Computación Web (Curso 2013/2014)

Aplicaciones Web (Curso 2014/2015)

JSP Básico. Índice. 2 Traducción de los JSP a servlets Acciones Introducción a JSP... 2

Aplicaciones Web (Curso 2015/2016)

Agosto. Un primer JSP. Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / j a v a. p h p ]

Aplicaciones Web con Servlets y JSP (II)

Aplicaciones Web con Servlets y JSP (II)

Mario Muñoz Organero & Norberto Fernández * Departamento de Ingeniería Telemática

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente

Formato para prácticas de laboratorio

JSP (I) Aplicaciones Distribuidas

Práctica 4 PROGRAMACIÓN WEB CON SERVLETS Y JSP. 1. Introducción a JSP... 2

Sistemas de Información 12/13 Ejercicios Tecnologías Web

apa de presentación: JSP Copyright Universidad de Alicante JSP básico 1 Capa de presentación: JSP Sesión 1: JSP Básico

Formatos para prácticas de laboratorio

Curso Desarrollo Java Web con JSP, Servlets y el MVC

Java EE JavaServer Pages (JSP)

Universidad Tecnológica del Valle del Mezquital. Desarrollo de Aplicaciones Web. Manual JSP

Programación Orientada a Objetos con Java

Seguridad de la aplicación para servlets y JSP (página activas java)

Modulo 1 El lenguaje Java

envía al browser. El browser despliega el archivo.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Requisitos. Universidad ORT Arquitectura de Software

Figura 7-1 Enlace para instalar el servidor web Apache Jakarta Tomcat

Introducción a la programación orientada a objetos

Elementos sintácticos de una JSP.

Capitulo III. Diseño del Sistema.

Práctica sobre compartición de instancias remotas.

Modelo de Objetos Distribuidos

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Ejemplos de Servlet y JSP Web Application Development

Repaso de las características más importantes de la programación Java y su adaptación a Android

Curso PHP Módulo 1 R-Luis

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

Curso de Java POO: Programación orientada a objetos

Tema 1. Introducción a JAVA

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Manual del Protocolo XML-RPC de Mensajería Negocios

Java Inicial (20 horas)

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción al desarrollo web (idesweb)

Productos para desarrollar aplicaciones web: ASP, CFM, JSP y PHP

2. Estructura de un programa en Java

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

PROGRAMACIÓN PÁGINAS WEB CON PHP

Programación Orientada a Objetos. Java: Excepciones

Web Tier en JAVA. Nicolás Troncoso Carrère. Valparaíso, ILI 258 Departamento de Informática Universidad Técnica Federico Santa María

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Curso de JavaServer Faces

Elementos léxicos del lenguaje de programación Java

Una página JSP es simplemente una página web con elementos JSP. Todo en la página no son elementos JSP, el resto se denomina plantilla de texto.

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet DLSI - Universidad de Alicante 1

ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS

Curso Introducción JAVA Pág.: 1

aplicaciones web: ASP, CFM, JSP y PHP

8. Sentencia return y métodos

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

XPERTO EN DISEÑO DE PÁGINAS WEB

Capitulo VI. Conclusiones.

Configuración servidor Tomcat

Primera Escuela de la Red Temática SVO. Madrid, Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Sistemas de Información 12/13 Servlets y JSPs (Java Server Pages)

CAPÍTULO 14. DESARROLLO

Diplomado Java Web Programming with Servlets, JSP, JSF & Ajax

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

HTTP, CGI, Applets y Servlets

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

EXTENSIÓN DE UML PARA APLICACIONES WEB

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Introducción (1) En una aplicación web, especialmente en Internet, los cambios a la interfaz gráfica son muy frecuentes

Uso de excepciones en Java

19. Packages o paquetes

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

Primer Parcial Septiembre 5 de 2009

GUÍA Nro. 1 TECNOLOGÍA DE INTERNET. TIII PIII

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Tema 2. El lenguaje de programación Java (Parte 1)

Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades:

JavaScript como Orientación a Objetos

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

Prof. Dr. Paul Bustamante

Pruebas de unidad con JUnit

JSP(JAVA SERVER PAGES)

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Programación orientada a objetos

Person IP CRM Manual MOBILE

Un servlet es una clase java que implementa la Servlet interface. Un servlet corre dentro de un contexto denominado Servlet engine.

TUTORIAL DESARROLLO DE APLICACIONES PARA EVOLUTION CON MS ACCESS

Transcripción:

JavaBeans y JavaServer Pages: Guía rápida Manuel Urueña 2 de diciembre de 2002

1. JavaBeans Los JavaBeans se idearon como un mecanismo para diseñar componentes, generalmente de tipo gráfico, que pudiesen ser reutilizados por los entornos de desarrollo integrado (IDE). Para ello el interfaz de un JavaBean debería ser capaz de mostrar su contenido en tiempo de ejecución. Esta característica ha hecho que los JavaBeans se utilicen en otros entornos, como puede ser el desarrollo de aplicaciones web. Un JavaBean no es más que una clase java que sigue ciertas convenciones en el nombrado de sus métodos, de forma que sea posible operar con ella en tiempo de ejecución. Se dice que un JavaBean tiene propiedades 1 (propiedad) y en función de que los métodos getpropiedad() y setpropiedad() estén definidos la propiedad será de lectura, de escritura o de lectura/escritura. 1.1. Ejemplo public class UserInfoBean implements java.io.serializable private String first_name; private String last_name; private int lucky_number; private boolean registered; private byte[] categories; Un JavaBean debe tener, al menos, un constructor sin argumentos. public UserBean() Does nothing public String getfirstname() return first_name; public void setfirstname ( String name ) first_name = name; public String getlastname() return last_name; 1 Además de propiedades los JavaBeans tienen eventos asociados aunque por simplicidad no se describen en este documento. 2

public void setlastname ( String name ) last_name = name; Una propiedad no tiene que coincidir con un atributo de la clase. public String getfullname() return first_name + " " + last_name; Las propiedades pueden ser de cualquier tipo básico, no sólo String. public void setluckynumber ( int num ) lucky_number = num; public int getluckynumber() return lucky_number; Una propiedad de tipo boolean tiene una convención de nombres diferente para el método get() public boolean isregistered() return registered; public void setregistered ( boolean reg ) registered = reg; 3

2. JavaServer Pages La tecnología de las JavaServer Pages (JSP) aparece para aliviar el engorro que supone generar páginas web mediante servlets. Además de esta forma es posible dividir el trabajo de construir una aplicación web entre programadores (servlets) y diseñadores gráficos (JSPs). Una página JSP no es más que una página HTML que contiene ciertas etiquetas especiales (acciones) o fragmentos de código (scriptlets) para incluir contenido dinámico en dichas página. El código HTML se añade tal cual a la respuesta, mientras que los elementos dinámicos se evalúan con cada petición. Figura 1: Petición de una página JSP Cuando un cliente pide esa página al servidor de aplicaciones, se traduce a un fichero fuente de Java que implementa un Servlet, se compila y se ejecuta para devolver el resultado de la petición. Una vez compilado el servlet, las peticiones posteriores se reducen a ejecutar dicho servlet en lugar de realizar el proceso una y otra vez. Esta es la razón por la que la primera petición tarda mucho más en responderse que las siguientes. Dado que una JSP no es más que un servlet, hay que recordar que tódo el código se ejecuta en el servidor, las respuestas son púramente páginas HTML 2. 2 También es posible incluir javascript, applets o cualquier otro código que ejecute en el cliente 4

2.1. Ejemplo Veamos ahora un sencillo ejemplo de página JSP 3 y los diferentes estados por los que va pasando. Página JSP original: <%@ page language= java contenttype= text/html;charset=iso-8859-1 %> <%@ page import= java.util.date %> <html> <head> <title>hola Mundo</title> </head> <body> Hola, esto es una página JSP. <p>la hora del servidor es <%= new Date() %></p> </body> </html> Tras la fase de traducción, se obtiene el siguiente Servlet: package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import org.apache.jasper.runtime.*; <%@ page import= java.util.date %> import java.util.date; public class hola_jsp extends HttpJspBase private static java.util.vector _jspx_includes; public java.util.list getincludes() return _jspx_includes; public void _jspservice(httpservletrequest request, HttpServletResponse response) throws java.io.ioexception, ServletException Ver sección de variables implícitas 3 La sintaxís de las páginas JSP es muy similar a la utilizada por las ASPs. 5

JspFactory _jspxfactory = null; javax.servlet.jsp.pagecontext pagecontext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; try _jspxfactory = JspFactory.getDefaultFactory(); <%@ page language= java contenttype= text/html;charset=iso-8859-1 %> response.setcontenttype("text/html;charset=iso-8859-1"); pagecontext = _jspxfactory.getpagecontext(this, request, response, null, true, 8192, true); application = pagecontext.getservletcontext(); config = pagecontext.getservletconfig(); session = pagecontext.getsession(); out = pagecontext.getout(); _jspx_out = out; out.write("\n"); out.write("\n\n"); out.write("<html>\n "); out.write("<head>\n "); out.write("<title>hola Mundo"); out.write("</title>\n "); out.write("</head>\n "); out.write("<body>\n Hola, esto es una página JSP.\n "); out.write("<p>la hora del servidor es "); <%= new Date() %> out.print( new Date() ); out.write("</p>\n "); out.write("</body>\n"); out.write("</html>\n"); catch (Throwable t) out = _jspx_out; if (out!= null && out.getbuffersize()!= 0) out.clearbuffer(); if (pagecontext!= null) pagecontext.handlepageexception(t); finally if (_jspxfactory!= null) _jspxfactory.releasepagecontext(pagecontext); 6

Evidentemente el servlet tiene más cosas que la traducción directa de la página JSP y no es necesario comprender totalmente su significado. Normalmente el diseñador de páginas JSP nunca accede a este fichero si no es para depurar ciertos errores al compilar el Servlet, y por supuesto nunca lo modifica directamente sino el JSP que lo genera. Trás la ejecución del servlet anterior, este es el resultado: <html> <head> <title>hola Mundo</title> </head> <body> Hola, esto es una página JSP. <p>la hora del servidor es Wed Nov 06 13:25:34 CET 2002</p> </body> </html> Como puede verse, el resultado es muy similar a la página JSP original. 2.2. Comentarios <%!-- Esto es un comentario --%> Los comentarios JSP, a diferencia de los comentarios en HTML, no se envían al cliente. Hay que recordar que las páginas JSP son interpretadas exclusivamente por el servidor. 2.3. Directivas <%@ page language= java contenttype= text/html iserrorpage= false errorpage= error.jsp %> Todas las páginas JSP deberían tener esta directiva. Los atributos más usuales son: language: lenguaje empleado por la JSP (java por defecto). contenttype: contenido de la página JSP (text/html por defecto). iserrorpage: indica si es una página de error (false por defecto). errorpage: página a la que dirigirse cuando ocurre una excepción al procesar esta página. Ver iserrorpage. <%@ include file= footer.html %> Esta directiva añade el contenido del archivo especificado antes de comenzar la fase de traducción a Servlet. <%@ page import= java.util.* %> Con esta directiva se puede importar clases que se utilizan en scriptlets dentro de la página. 7

2.4. Scriplets Los Scriptlets no son más que fragmentos de código delimitados entre <% y %>, que se ejecutan para resolver la petición de un usuario. Hay un tipo especial de Scriplet delimitado entre <%= y %>. La expresión 4 contenida se calcula y el resultado se añade a la respuesta. Es decir, <%= user.getname() %> es exactamete igual a: <% out.println(user.getname()); %> Veamos ahora algunos fragmentos de scriptlets: Browser: <% String user_agent = request.getheader("user-agent"); if (user_agent.indexof("msie")!= -1) %> Internet Explorer <% else if (user_agent.indexof("mozilla")!= -1) %> Netscape <% else %> Unknown <% %> Dependiendo del tipo de navegador que emplea el cliente, la respuesta contendrá la cadena de texto adecuada. Otro ejemplo, en este caso se crea una tabla con tantas filas como elementos tenga el catálogo: <table> <tr><th>product</th><th>price</th></tr> <% for (int i=0; i<catalog.length; i++ ) ProductInfoBean product = catalog[i]; %> <tr> <th> <a href= <%= response.encodeurl("view?id=" + product.getid()) %> > <%= product.getshortname() %> </a> </th> <td><%= product.getprice() %> Euros</td> </tr> <% %> </table> 4 Nótese que no es necesario añadir un ; puesto que se trata de una expresión. 8

En este ejemplo es también interesante la utilización del método encodeurl(string). Aunque el servidor de aplicaciones suele emplear cookies para enlazar peticiones con sesiones de clientes automáticamente, suele ser interesante reescribir los enlaces a otras páginas de la aplicación para que contengan dicho identificador de sesión. Eso es lo que hace exactamente el método encodeurl(string). 2.4.1. Variables implícitas Al traducir una página JSP, el servlet generado define una serie de variables que pueden emplearse en los scriptlets de la página: javax.servlet.servletcontext application javax.servlet.servletconfig config javax.servlet.jsp.jspwriter out javax.servlet.jsp.pagecontext pagecontext javax.servlet.http.httpservletrequest request javax.servlet.http.httpservletresponse response javax.servlet.http.httpsession session java.lang.throwable exception El caso de la variable exception es un poco especial. Esta variable sólo se define en las páginas de error, es decir aquellas que definen en su directiva page el atributo iserrorpage= true. En dicha variable se almacena la exceptión que se ha lanzado al procesar una página JSP, que apunta a la página de error con el atributo errorpage en su directiva page. De esta forma es posible tratar dichos errores. 2.5. Acciones Las acciones son etiquetas HTML que se interpretan en la fase de traducción y que realizan diferentes operaciones. 2.5.1. jsp:include La etiqueta jsp:include añade a la respuesta, el resultado de ejecutar la página JSP o servlet specificado por el atributo page. Esta acción admite especificar parámetros mediante la acción jsp:param. <jsp:include page= header.jsp > <jsp:param name= title value= Welcome /> </jsp:include> <%!-- header.jsp?title=welcome --%> Notese que esta acción es diferente a la directiva <%@ include file= header.jsp %>. La directiva include simplemente añade el contenido del fichero indicado a la página JSP que luego se traduce en un sólo servlet, mientras que con esta acción se tienen dos servlets y se ejecutan ambos para obtener la respuesta. 9

2.5.2. jsp:forward Al igual que con la etiqueta anterior, jsp:forward añade a la respuesta el contenido generado por la página JSP o servlet indicado. Sin embargo, en este caso el control no vuelve a la página original, sino que el tratamiento de la petición se pasa completamente a la segunda página. <jsp:forward page= list.jsp > <jsp:param name= order value= date /> </jsp:forward> 2.5.3. Acciones con JavaBeans Las páginas JSP tienen varias acciones para crear JavaBeans y acceder a sus propiedades. <jsp:usebean id= user class= foo.userinfobean scope= session > <jsp:setproperty name= user property= name value= Pepe /> </jsp:usebean> La acción jsp:usebean permite a la página que lo emplea acceder a un JavaBean definido en el contexto especificado. En caso de que no exista lo crea en dicho contexto. Cuando se crea un JavaBean es posible inicializar sus propiedades mediante el uso de acciones jsp:setproperty. <jsp:getproperty name= user property= fullname /> Con esta acción se accede a la propiedad fullname del JavaBean user definido anteriormente (getfullname()) y se añade a la respuesta. <jsp:setproperty name= user property= firstname value= <%= request.getparameter("fisrtname") %> /> Por último la acción jsp:setproperty actualiza el valor de la propiedad del JavaBean especificado. Esta acción también se encarga de convertir el valor especificado al tipo de la propiedad: Tipo de propiedad boolean, Boolean byte, Byte char, Character double, Double int, Integer float, Float long, Long Método de conversión Boolean.valueOf(String) Byte.valueOf(String) String.charAt(int) Double.valueOf(String) Integer.valueOf(String) Float.valueOf(String) Long.valueOf(String) 10

Hay una característica muy útil de esta accion, especialmente para tratar formularios, con la que no es necesario especificar las propiedaes y los valores sino que estos se optienen de los parámetros de la página. Para ello se emplea la sintaxis siguiente: <jsp:setproperty name= user property= * /> Por ejemplo, con la etiqueta anterior, para tratar una petición como page.jsp?firstname=pepe&lastname=perez evitaríamos escribir: <jsp:setproperty name= user property= firstname value= <%= request.getparameter("fisrtname") %> /> <jsp:setproperty name= user property= lastname value= <%= request.getparameter("lastname") %> /> 2.6. Contexto de los atributos Client request response request response Page 1 forward Page 2 Page 3 forward Page 4 page scope page scope page scope page scope request scope request scope session scope Figura 2: Contexto de los atributos Como se ha visto en la sección de JavaBeans las aplicaciones web son capaces de almacenar variables con diferentes contextos. <jsp:usebean... scope= page request session application /> Por ejemplo se puede definir un JavaBean en el contexto de una petición (request) para pasar datos entre dos páginas JSP. La información del usuario que esta accediendo a la aplicación debería almacenanarse como un JavaBean en el contexto de sesión (session) mientras 11

que estadísticas de la aplicación, u otra información común a todos los usuarios debería tener un alcance global (application). El contexto de page debería emplearse tan sólo para variables auxiliares que se empleen únicamente en una página. Desde un scriplet es posible acceder a los JavaBeans almacenados en los diferentes contextos a través del método getattribute(string) de la variables implícitas explicadas anteriormente. Cada variable representa a un tipo de contexto diferente: pagecontext#getattribute(string) pagecontext#setattribute(string, Object) request#getattribute(string) request#setattribute(string, Object) session#getattribute(string) session#setattribute(string, Object) application#getattribute(string) application#setattribute(string, Object) También es posible almacenar atributos en los diferentes contextos mediante el método setattribute(string, Object) 5. 5 En versiones anteriores del API de servlets se utilizaban los métodos setvalue() y getvalue() 12

3. JSPs-JavaBeans-Servlets if (login failed) then forward() POST(login,password) forward() login.jsp validate_login.jsp welcome.jsp Figura 3: Aplicación Web con JSPs Aunque es posible desarrollar una aplicación web empleando únicamente JSPs, para proyectos más grandes es mucho más recomendable emplear tanto Servlets como JSPs. La cooperación entre ambas es muy sencilla puesto que en el fondo todos son Servlets. if (login failed) then forward(login) login.jsp POST (login,password) Login Servlet if (not logged) then forward() session.setattribute(userinfobean) GET() list.jsp forward(listbean) Product Servlet forward(productbean) welcome.jsp GET (productid) GET() DB Figura 4: Aplicación Web con JSPs y Servlets En este escenario deberían utilizarse JSPs para la representación y dejar todo la lógica a los Servlets puros. Los datos de la aplicación se modelarían con JavaBeans. A este diseño se le conoce como Model-View-Controller (MVC). 3.0.1. Forward Desde un JSP: <jsp:forward page= login.jsp > <jsp:param name= login value= pepe /> </jsp:forward> 13

Desde un Servlet: RequestDispatcher rd = request.getrequestdispatcher("login.jsp?login=pepe"); rd.forward(request, response); 3.0.2. Redirect Desde un JSP: <a href= <%= response.encodeurl("products") %> > Desde un Servlet: String products_servlet = response.encoderedirecturl("products"); response.sendredirect(products_servlet); 3.0.3. Compartir datos Desde un JSP: <jsp:usebean id= user class= UserInfoBean scope= session > <jsp:setproperty name= user property= lastname value= Perez /> </jsp:usebean> <jsp:setproperty name= user property= firstname value= Pepe > <jsp:getproperty name= user property= firstname /> Desde un Servlet: UserInfoBean user = (UserInfoBean) session.getattribute("user"); if (user == null) user = new UserInfoBean(); user.setlastname("perez"); session.setattribute("user", user); user.setfirstname = "Pepe"; out.println(user.getfirstname()); 14