Desarrollo de Aplicaciones Web con JSP y XML

Si hemos tenido la oportunidad de construir aplicaciones Web usando tecnolog�as como CGI y Servlets, estaremos acostumbrados a la idea de escribir un programa que genere la pagina entera (las partes est�ticas y din�micas) usando el mismo programa. Si estamos buscando una soluci�n en la cual podamos separar las dos partes, no tenemos que buscar m�s. Las JavaServer Pages (JSP) est�n aqu�.

Las p�ginas JSP permiten que separemos la presentaci�n final de la l�gica de negocio (capas media y final). Es un gran "Rapid Application Development" (RAD) de aplicaciones Web. Esta secci�n explica los conceptos y las ventajas de la tecnolog�a JSP, y luego demostraremos c�mo utilizar esta tecnolog�a emocionante, y c�mo crear componentes reutilizables para manejar formularios.

.�La Web Din�mica

El Web se ha desarrollado desde un sistema de informaci�n distribuido hypermedia basado en red que ofrec�a informaci�n est�tica hasta un mercado para vender y comprar mercancias y servicios. Las aplicaciones cada vez m�s sofisticadas para permitir este mercado requieren una tecnolog�a para presentar la informaci�n din�mica.

Las soluciones de primera generaci�n incluyeron CGI, que es un mecanismo para ejecutar programas externos en un servidor web. El problema con los scripts CGI es la escalabilidad; se crea un nuevo proceso para cada petici�n.

Las soluciones de segunda generaci�n incluyeron vendedores de servidores Web que proporcionaban plug-ins y a APIs para sus servidores. El problema es que sus soluciones eran espec�ficas a sus productos servidores. Por ejemplo, Microsoft proporcion� las p�ginas activas del servidor (ASP) que hicieron m�s f�cil crear el contenido din�mico. Sin embargo, su soluci�n s�lo trabajaba con Microsoft IIS o Personal Web Server. Por lo tanto, si deseabamos utilizar ASP ten�amos que confiarnos a los productos de Microsoft y no estar�amos gozando de la libertad de seleccionar nuestro servidor web y sistema operativo preferidos!

Otra tecnolog�a de segunda generaci�n que es absolutamente popular en las empresa son los Servlets. Los Servlets hacen m�s f�cil escribir aplicaciones del lado del servidor usando la tecnolog�a Java. El problema con los CGI o los Servlets, sin embargo, es que tenemos que seguir el ciclo de vida de escribir, compilar y desplegar .

Las p�ginas JSP son una soluci�n de tercera generaci�n que se pueden combinar f�cilmente con algunas soluciones de la segunda generaci�n, creando el contenido din�mico, y haci�ndo m�s f�cil y m�s r�pido construir las aplicaciones basadas en Web que trabajan con una variedad de otras tecnolog�as: servidores Web, navegadores Web, servidores de aplicaci�n y otras herramientas de desarrollo.

.�JavaServer Pages (JSP)

La tecnolog�a JSP es una especificaci�n abierta (y gratis) disponible y desarrollada por Sun Microsystems como un alternativa a Active Server Pages (ASP) de Microsoft, y son un componente dominante de la especificaci�n de Java 2 Enterprise Edition (J2EE). Muchos de los servidores de aplicaciones comercialmente disponibles (como BEA WebLogic, IBM WebSphere, Live JRun, Orion, etc�tera) ya utilizan tecnolog�a JSP.

.�JSP contra ASP

JSP y ASP ofrecen funciones similares. Ambos utilizan etiquetas para permitir c�digo embebido en una p�gina HTML, seguimiento de sesi�n, y conexi�n a bases de datos. Algunas de las diferencias triviales son:

  • Las p�ginas ASP est�n escritas en VBScript y las p�ginas JSP est�n escritas en lenguaje Java. Por lo tanto, las p�ginas JSP son independientes de la plataforma y las p�ginas ASP no lo son.
  • Las p�ginas JSP usan tecnolog�a JavaBeans como arquitectura de componentes y las p�ginas ASP usan componentes ActiveX.

M�s all� de estas diferencias triviales, hay varias diferencias importantes, que podr�an ayudarnos a elegir la tecnolog�a para nuestras aplicaciones:

  • Velocidad y Escalabilidad: Aunque las p�ginas ASP son cacheadas, siempre son interpretadas, las p�ginas JSP son compiladas en Servlets Java y cargadas en memoria la primera vez que se las llama, y son ejecutadas para todas las llamadas siguientes. Esto le da a las p�ginas JSP la ventaja de la velocidad y escalabilidad sobre las p�ginas ASP.

  • Etiquetas Extensibles: Las p�ginas JSP tiene una caracter�stica avanzada conocida como etiquetas extensibles. Esto mecanismo permite a los desarrolladores crear etiquetas personalizadas. En otras palabras, las etiquetas extensibles nos permiten extender la s�ntaxis de las etiquetas de las p�ginas JSP. No podemos hacer esto en ASP.
  • Libertad de Elecci�n: A menos que instalemos Chili!Soft ASP, las p�ginas ASP s�lo trabajan con Microsoft IIS y Personal Web Server. El uso de p�ginas ASP requiere un compromiso con los productos de Microsoft, mientras que las p�ginas JSP no nos imponen ning�n servidor web ni sistema operativo. Las p�ginas JSP se est�n conviertiendo en un est�ndard ampliamente soportado.

Para una comparaci�n m�s detallada entre las p�ginas JSP y ASP puedes ver Comparing JSP and ASP.

.�Entorno de Software

Para ejecutar las p�ginas JSP, necesitamos un servidor web con un contenedor Web que cumpla con las especificaciones de JSP y de Servlet. El contenedor Web se ejecuta en el servidor Web y maneja la ejecuci�n de todas las p�ginas JSP y de los servlets que se ejecutan en ese servidor Web. Tomcat 3.2.1 es una completa implementaci�n de referencia para las especificacions Java Servlet 2.2 y JSP 1.1. Dese aqu� puedes descargar las versiones binarias de Tomcat.

Para configurar Tomcat:

  • Configuramos la variable de entorno JAVA_HOME para que apunte al directorio ra�z de nuestra instalaci�n de Java 2 Standard Edition (J2SE).
  • Configuramos la variable de entorno TOMCAT_HOME para que apunte al directorio ra�z de nuestra instalaci�n de Tomcat.
  • Para arrancar Tomcat, usamos TOMCAT_HOME/bin/startup.bat para Windows o startup.sh para UNIX.

    Por defecto, empezar� a escuchar en el puerto 8080.

  • Grabamos nuestros ficheros .jsp en TOMCAT_HOME/webapps/examples/jsp y nuestras clases JavaBeans en TOMCAT_HOME/webapps/examples/web-inf/classes.
Nota:

Si estamos trabajando bajo Windows, podemos obtener un error Out of space environment cuando intentemos arrancar Tomcat. Hay dos maneras de corregir esto: cambiar la configuraci�n inicial de la memoria de la ventana de DOS a un valor mayor de 3200. O editar el fichero config.sys y agregar la l�nea siguiente: SHELL=c:\PATHTO\command.com /E:4096 /P.

.��C�mo Funcionan las P�ginas JSP?

Una p�gina JSP es b�sicamente una p�gina Web con HTML tradicional y c�digo Java. La extensi�n de fichero de una p�gina JSP es ".jsp" en vez de ".html" o ".htm", y eso le dice al servidor que esta p�gina requiere un manejo especial que se conseguir� con una extensi�n del servidor o un plug-in. Aqu� hay un sencillo ejemplo :

Ejemplo 1: date.jsp

     
<HTML>     
<HEAD>     
<TITLE>JSP Example</TITLE>     
</HEAD>     
<BODY BGCOLOR="ffffcc">     
<CENTER>     
<H2>Date and Time</H2>     
<%     
java.util.Date today = new java.util.Date();     
out.println("Today's date is: "+today);     
%>     
</CENTER>     
</BODY>     
</HTML>     

Este ejemplo contiene HTML tradicional y alg�n c�digo Java. La etiqueta <% identifica el inicio de un scriptlet, y la etiqueta %> identifica el final de un scriptlet. Cuando un navegador solicite la p�gina date.jsp veremos algo similar a la Figura 1.


Figura 1: Petici�n de date.jsp

.�Detr�s de la Escena

Cuando se llame a �sta p�gina (date.jsp), ser� compilada (por el motor JSP) en un Servlet Java. En este momento el Servlet es manejado por el motor Servelt como cualquier otro Servlet. El motor Servlet carga la clase Servlet (usando un cargador de clases) y lo ejecuta para crear HTML din�mico para enviarlo al navegador, como se ve en la Figura 2. Para este ejemplo, el Servelt crea un objeto Date y lo escribe como un String en el objeto out, que es el stream de salida hacia el navegador.


Figura 2: Flujo Petici�n/Respuesta cuando se llama a una p�gina JSP.

La siguiente vez que se solicite la p�gina, el motor JSP ejecuta el Servlet ya cargado a menos que la p�gina JSP haya cambiado, en cuyo caso es autom�ticamente recompilada en un Servlet y ejecutada.

.�Elementos de Script

En el ejemplo date.jsp se usa todo el nombre de la clase Date incluyendo el nombre del paquete, lo que podr�a llegar a ser tedioso. Si queremos crear un ejemplar de la clase Date usando simplemente: Date today = new Date(); sin tener que especificar el path completo de la clase, usamos la directiva page de esta forma:

Ejemplo 2 :date2.jsp

     
<%@page import="java.util.*" %>     
<HTML>     
<HEAD>     
<TITLE>JSP Example</TITLE>     
</HEAD>     
<BODY BGCOLOR="ffffcc">     
<CENTER>     
<H2>Date and Time</H2>     
<%     
java.util.Date today = new java.util.Date();     
out.println("Today's date is: "+today);     
%>     
</CENTER>     
</BODY>     
</HTML>     

Todav�a hay otra forma de hacer lo mismo usando la etiqueta <%= escrbiendo:

Ejemplo 3:date3.jsp

     
<%@page import="java.util.*" %>     
<HTML>     
<HEAD>     
<TITLE>JSP Example</TITLE>     
</HEAD>     
<BODY BGCOLOR="#ffffcc">     
<CENTER>     
<H2>Date and Time</H2>     
Today's date is: <%= new Date() %>     
</CENTER>     
</BODY>     
</HTML>     

Como podemos ver, se puede conseguir el mismo resultado usando diferentes etiquetas y t�cnicas. Hay varios elementos de script JSP. Hay algunas reglas convencionales que nos ayudar�n a usar m�s efectivamente los elementos de Script JSP.

  • Usamos <% ... %> para manejar declaraciones, expresiones, o cualquier otro tipo de c�digo v�lido.
  • Usamos la directiva page como en <%@page ... %> para definir el lenguaje de escript. Tambi�n puede usarse para especificar sentencias import. Aqu� hay un ejemplo:
    <%@page language="java" import="java.util.*" %>
  • Usamos <%! .... %> para declarar variables o m�todos. Por ejemplo:
    <%! int x = 10; double y = 2.0; %>
  • Usamos <%= ... %> para definir una expresi�n y forzar el resultado a un String. Por ejemplo: <%= a+b %> o <%= new java.util.Date() %>.
  • Usamos la directiva include como en <%@ include ... %> para insertar el contenido de otro fichero en el fichero JSP principal. Por ejemplo:
    <%@include file="copyright.html" %>

Puedes encontrar m�s informaci�n sobre las directivas y scriptles de JSP en las p�ginas del tutorial sobre Servlets y JSP

.�Manejar Formularios

Una de las partes m�s comunes en aplicaciones de comercio electr�nico es un formulario HTML donde el usuario introduce alguna informaci�n como su nombre y direcci�n. Usando JSP, los datos del formulario (la informaci�n que el usuario introduce en �l) se almacenan en un objeto request que es enviado desde el navegador hasta el contenedor JSP. La petici�n es procesada y el resultado se env�a a trav�s de un objeto response de vuelta al navegador. Estos dos objetos est� disponibles impl�citamente para nosotros.

Para demostrar como manejar formularios HTML usando JSP, aqu� tenemos un formulario de ejemplo con dos campos: uno para el nombre y otro para el email. Como podemos ver, el formulario HTML est� definido en un fichero fuente JSP. Se utiliza el m�todo request.getParameter para recuperar los datos desde el formulario en variables creadas usando etiquetas JSP.

La p�gina process.jsp imprime un formulario o la informaci�n proporcionada por el usuario dependiendo de los valores de los campo del formulario. Si los valores del formulario son null se muestra el formulario, si no es as�, se mostrar� la informaci�n proporcionada por el usuario. Observa que el formulario es creado y manejado por el c�digo del mismo fichero JSP.

Ejemplo 4: process.jsp

     
<HTML>     
<HEAD>     
<TITLE>Form Example</TITLE>     
</HEAD>     
<BODY BGCOLOR="#ffffcc">     
<% if (request.getParameter("name")==
null && request.getParameter("email")
 == null) { %>     
<CENTER>     
<H2>User Info Request Form</H2>     
<FORM METHOD="GET" ACTION="process.jsp">     
<P>     
Your name: <input type="text" name="name" size=26>     
<P>     
Your email: <input type="text" name="email" size=26>     
<P>     
<input type="submit" value="Process">     
</FORM>     
</CENTER>     
<% } else { %>     
<%! String name, email; %>     
<%     
name = request.getParameter("name");     
email = request.getParameter("email");     
%>     
<P>     
<B>You have provided the following info</B>:     
<P>     
<B>Name</B>: <%= name %><P>     
<B>Email</B>: <%= email %>     
<% } %>     
</BODY>     
</HTML>     

Si solicitar�mos process.jsp desde un navegador Web, ver�amos algo similar a la figura 3:


Figura 3: imagen de process.jsp

Introducimos nuestro nombre y email y pulsamos Process para enviar el formulario para su proceso, y veremos algo similar a a la Figura 4:


Figura 4 : Formulario procesado

.�Componentes Reutilizables

El ejemplo del formulario anterior es simple en el sentido de que no hay mucho c�digo implicado. Cuanto m�s c�digo est� implicado, m�s importante es no mezclar la l�gica del negocio con la presentaci�n final en el mismo fichero. La separaci�n de la l�gica de negocio de la presentaci�n permite cambios en cualquier sitio sin afectar al otro. Sin embargo, el c�digo de producci�n JSP se debe limitar a la presentaci�n final. As� pues, �c�mo implementamos la parte de la l�gica de negocio?

Aqu� es donde los JavaBeans entran en juego. Esta tecnolog�a es un modelo de componente portable, independiente de la plataforma que permite a los desarrolladors escribir componentes y reutilizarlos en cualquier lugar. En el contexto de JSP, los JavaBeans contienen la l�gica de negocio que devuelve datos a un script en una p�gina JSP, que a su vez formatea los datos devueltos por el componente JavaBean para su visualizaci�n en el navegdor. Una p�gina JSP utiliza un componente JavaBean fijando y obteniendo las propiedades que proporciona.

.��Cu�les son los beneficios?

Hay muchos beneficios en la utilizaci�n de JavaBeans para mejorar las p�ginas JSP:

  • Componentes Reutilizables: diferentes aplicaciones pueden reutilizar los mismos componentes.
  • Separaci�n de la l�gica de negocio de la l�gica de presentaci�n: podemos modificar la forma de mostrar los datos sin que afecte a la l�gica del negocio.
  • Protegemos nuestra propiedad intelectual manteniendo secreto nuestro c�digo fuente.

.�Ejemplo: Usar JavaBeans con JSP

Ahora, veamos como modificar el ejemplo anterior, process.jsp para usar JavaBeans. En el formulario anterior hab�a dos campos: name y email. En JavaBeans, son llamados propiedades. Por eso, primero escribimos un componente JavaBean con m�todos setX getX, donde X es el nombre de la propiedad. Por ejemplo, si tenemos unos m�todos llamados setName y getName entonces tenemos una propiedad llamada name. El ejemplo 5 muestra un componente FormBean.

Los buenos componentes deben poder interoperar con otros componentes de diferentes vendedores. Por lo tanto, para conseguir la reutilizaci�n del componente, debemos seguir dos reglas importantes (que son impuestas por la arquitectura JavaBeans):

  1. Nuestra clase bean debe proporcionar un constructor sin argumentos para que pueda ser creado usando Beans.instantiate.
  2. Nuestra clase bean debe soportar persistencia implementando el interface Serializable o Externalizable.

Ejemplo 5: FormBean.java

     
package userinfo;     
import java.io.*;     

public class FormBean implements Serializable {     
  private String name;     
  private String email;     
  public FormBean() {     
   name = null;     
   email = null;     
  }     
  public void setName(String name) {     
   this.name = name;     
  }     
  public String getName() {     
   return name;     
  }     
  public void setEmail(String email) {     
   this.email = email;     
  }     
  public String getEmail() {     
   return email;     
  }     
}     

Para poder usar el componente FormBean en el fichero JSP, necesitamos ejemplarizar el componente. Esto se hace usando la etiqueta <jsp:useBean>. La siguiente l�nea <jsp:setProperty> se ejecuta cuando se ha ejemplarizado el bean, y se usa para inicializar sus propiedades. En este caso, ambas propiedades (name y email) se configuran usando una s�la sentencia. Otra posible forma de configurar las propiedades es hacerlo una a una, pero primero necesitamos recuperar los datos desde el formulario. Aqu� tenemos un ejemplo de como configurar la propiedad name:

     
<%! String yourname, youremail; %>     
<% yourname = request.getParameter("name"); %>     
<jsp:setProperty name="formbean" property="name" 
value="<%=yourname%>"/>     

Una vez que se han inicializado las propiedades con los datos recuperados del formulario, se recuperan los valores de las propiedades usando <jsp:getProperty> en la parte else, como se ve en el Ejemplo 6:

Ejemplo 6: process2.jsp

     
<jsp:useBean id="formbean" class="userinfo.FormBean"/>     
<jsp:setProperty name="formbean" property="*"/>     
<HTML>     
<HEAD>     
<TITLE>Form Example</TITLE>     
</HEAD>     
<BODY BGCOLOR="#ffffcc">     
<% if (request.getParameter("name")==null
 && request.getParameter("email") == null) { %>     
<CENTER>     
<H2>User Info Request Form </H2>     
<form method="GET" action="process2.jsp">     
<P>     
Your name: <input type="text" name="name" size=27>     
<p>     
Your email: <input type="text" name="email" size=27>     
<P>     
<input type="submit" value="Process">     
</FORM>     
</CENTER>     
<% } else { %>     
<P>     
<B>You have provided the following info</B>:     
<P>     
<B>Name</B>: <jsp:getProperty name="formbean" property="name"/>     
<P>     
<B>Email</B>: <jsp:getProperty name="formbean" property="email"/>     
<% } %>     
</BODY>     
</HTML>     

.�Conclusi�n

Los desarrolladores interesados en crear aplicaciones Web de calidad deben familiarizarse con las tecnolog�as que son aplicables no solamente para el mercado de hoy en d�a sino tambi�n para el de ma�ana, a saber JSP y XML. La siguiente p�gina discutir� las capacidades que proporciona la tecnolog�a JSP y que son ideales para trabajar con XML; y muestra c�mo utilizar con eficacia JSP y XML. JSP y XML hacen una combinaci�n excelente para las aplicaciones Web que comparten informaci�n, porque las p�ginas JSP tienen soporte interno de XML en la forma de librer�as de etiquetas JSP personalizadas.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR