Desarrollo de aplicaciones Web con JSP y XML Parte I: Fast Track JSP

Si ha tenido la oportunidad de construir aplicaciones web utilizando tecnologías como la Interfaz de puerta de enlace Común (CGI) y servlets, está acostumbrado a la idea de escribir un programa para generar toda la página (la parte estática y la dinámica) utilizando ese mismo programa. Si está buscando una solución en la que pueda separar las dos partes, no busque más. Las páginas de JavaServer (JSP) están aquí.

Las páginas JSP le permiten separar la presentación de front-end de la lógica de negocio (niveles medio y de back-end). Es un gran enfoque de Desarrollo Rápido de Aplicaciones (RAD) para aplicaciones Web. Esta serie de artículos proporciona un tutorial práctico que explica cómo desarrollar aplicaciones web modernas para el mercado de hoy y del mañana. Esta serie comienza con este artículo, que explica los conceptos y beneficios de la tecnología JSP, y luego le muestra cómo utilizar esta emocionante tecnología y cómo crear componentes reutilizables para manipular formularios.

La Web dinámica

La Web ha evolucionado de un sistema de información distribuida hipermedia basado en redes que ofrece información estática a un mercado para la venta y compra de bienes y servicios. Las aplicaciones cada vez más sofisticadas para permitir este mercado requieren una tecnología para presentar información dinámica.

Las soluciones de primera generación incluían CGI, que es un mecanismo para ejecutar programas externos a través de un servidor web. El problema con los scripts CGI es la escalabilidad; se crea un nuevo proceso para cada solicitud.

Las soluciones de segunda generación incluían proveedores de servidores web que proporcionaban complementos y API para sus servidores. El problema es que sus soluciones eran específicas para sus productos de servidor. Por ejemplo, Microsoft proporcionó Páginas de servidor activo (ASP) que facilitaron la creación de contenido dinámico. Sin embargo, su solución solo funcionaba con Microsoft IIS o Servidor Web Personal. Por lo tanto, si quería usar ASP, tenía que comprometerse con los productos de Microsoft y no disfrutaría de la libertad de seleccionar su servidor web y sistema operativo favoritos.

Otra tecnología de segunda generación que es bastante popular en la computación empresarial son los servlets. Los servlets facilitan la escritura de aplicaciones del lado del servidor utilizando tecnología Java. Sin embargo, el problema con CGI o servlets es que debe seguir el ciclo de vida de escritura, compilación e implementación.

Las páginas JSP son una solución de tercera generación que se puede combinar fácilmente con algunas soluciones de segunda generación, creando contenido dinámico y haciendo que sea más fácil y rápido crear aplicaciones basadas en la web que funcionen con una variedad de otras tecnologías: servidores web, navegadores web, servidores de aplicaciones y otras herramientas de desarrollo.

JavaServer Pages (JSP)

La tecnología JSP es una especificación abierta y de libre acceso desarrollada por Sun Microsystems como una alternativa a la tecnología de Páginas de servidor activo (ASP) de Microsoft, y un componente clave de la especificación Java 2 Enterprise Edition (J2EE). Muchos de los servidores de aplicaciones disponibles comercialmente (como BEA WebLogic, IBM WebSphere, Live JRun, Orion, etc.) ya son compatibles con la tecnología JSP.

JSP versus ASP

JSP y ASP ofrecen una funcionalidad similar. Ambos usan etiquetas para permitir el código incrustado en una página HTML, el seguimiento de sesiones y la conexión a la base 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 el lenguaje de programación 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 utilizan la tecnología JavaBeans como arquitectura de componentes y las páginas ASP utilizan componentes ActiveX.

Más allá de estas diferencias triviales, hay una serie de diferencias importantes que pueden ayudarlo a elegir una tecnología para su organización:

  • Velocidad y escalabilidad: Aunque las páginas ASP se almacenan en caché, siempre se interpretan. Por el contrario, las páginas JSP se compilan en servlets Java y se cargan en memoria la primera vez que se llaman, y se ejecutan para todas las llamadas posteriores. Esto le da a las páginas JSP una ventaja de velocidad y escalabilidad sobre las páginas ASP.
  • Etiquetas extensibles: Las páginas JSP tienen una función avanzada conocida como etiquetas extensibles. Este mecanismo permite a los desarrolladores crear etiquetas personalizadas. En otras palabras, las etiquetas extensibles le permiten extender la sintaxis de etiquetas de páginas JSP. No puede hacer esto con páginas ASP.
  • Libertad de elección: A menos que instale Chili!Soft ASP, ASP pages solo funcionan con Microsoft IIS y Servidor Web Personal. El uso de páginas ASP requiere un compromiso con los productos de Microsoft, mientras que las páginas JSP no lo vinculan a ningún servidor web o sistema operativo específico. Las páginas JSP se están convirtiendo en un estándar ampliamente soportado.

Para obtener una comparación más detallada entre páginas JSP y páginas ASP, consulte Comparación de páginas JSP y ASP.

Entorno de software

Para ejecutar páginas JSP, necesita un servidor web con un contenedor web que cumpla con las especificaciones JSP y servlet. El contenedor web se ejecuta en el servidor web y administra la ejecución de todas las páginas JSP y servlets que se ejecutan en ese servidor web. Tomcat 3.2.1 es una implementación de referencia completa para las especificaciones Java Servlet 2.2 y JSP 1.1. Descargue e instale versiones binarias de Tomcat.

Para configurar Tomcat:

  • Establezca la variable de entorno JAVA_HOME para que apunte al directorio raíz de su instalación de Java 2 Standard Edition (J2SE).
  • Establezca la variable de entorno TOMCAT_HOME para que apunte al directorio raíz de su instalación de Tomcat.
  • Para iniciar Tomcat, utilice TOMCAT_HOME/bin/startup.bat para Windows o startup.sh para UNIX.
    De forma predeterminada, comenzará a escuchar en el puerto 8080.
  • Guarde sus archivos .jsp en TOMCAT_HOME/webapps/examples/jsp y sus clases de JavaBeans en TOMCAT_HOME/webapps/examples/web-inf/classes.

Nota: Si trabaja en Windows, es posible que aparezca un error de entorno Fuera de espacio cuando intente iniciar Tomcat. Hay dos maneras de solucionar esto: cambiar la configuración de memoria inicial de la ventana DOS a un valor mayor que 3200 O editar la configuración.archivo sys y agregue la siguiente línea: 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 bits de código Java. La extensión de archivo de una página JSP es «.jsp» en lugar de «.html» o «.htm», y eso le dice al servidor que esta página requiere un manejo especial que se logrará mediante una extensión de servidor o un complemento. Este es un ejemplo simple:

Muestra 1: fecha.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 algo de código Java. La etiqueta <% identifica el principio de un scriptlet y la etiqueta %> identifica el final de un scriptlet. Cuando se solicita date.jsp desde un navegador web, se ve algo similar a la Figura 1.

Figura 1: Fecha de solicitud.jsp

Detrás de escena

Cuando se llama a esta página (date.jsp), se compilará (por el motor JSP) en un servlet java. En este punto, el servlet es manejado por el motor servlet como cualquier otro servlet. El motor servlet carga la clase servlet (usando un cargador de clases) y la ejecuta para crear HTML dinámico que se enviará al navegador, como se muestra en la Figura 2. Para este ejemplo, el servlet crea un objeto Date y lo escribe como una cadena en el objeto out, que es un flujo de salida al navegador.

Figura 2: Flujo de solicitud / respuesta al Llamar a un JSP

La próxima 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 se recompila automáticamente en un servlet y se ejecuta.

Elementos de Scripting

En el ejemplo date.jsp se utiliza el nombre de clase completo Date, incluido el nombre del paquete, que puede resultar tedioso. Si desea crear una instancia de Date simplemente usando: Date today = new Date(); sin tener que especificar la ruta de acceso de clase completa, use la directiva page de la siguiente manera:

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>

Sin embargo, otra forma de hacer lo mismo usando la etiqueta <%= es escribiendo:

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 puedes ver, lo mismo se puede lograr usando diferentes etiquetas y técnicas. Hay varios elementos de scripting JSP. Aquí hay algunas reglas convencionales que lo ayudarán a usar elementos de scripting JSP de manera efectiva:

  • Use <% ... %> para manejar declaraciones, expresiones o cualquier otro tipo de fragmento de código válido. La muestra 1 de arriba es un ejemplo.
  • Utilice la directiva page como en <%@page ... %> para definir el lenguaje de scripting. Además, se puede usar para especificar sentencias import. Este es un ejemplo:
    <%@page language="java" import="java.util.*" %>.
  • Use <%! .... %> para declarar variables o métodos. Por ejemplo:
    <%! int x = 10; double y = 2.0; %>.
  • Use <%= ... %> para definir una expresión y convertir el resultado como String. Por ejemplo:
    <%= a+b %> o <%= new java.util.Date() %>.
  • Utilice la directiva include como en <%@ include ... %> para insertar el contenido de otro archivo en el archivo JSP principal. Por ejemplo:
    <%@include file="copyright.html" %>.

Formularios de manejo

Una de las partes más comunes de las aplicaciones de comercio electrónico es un formulario HTML donde el usuario ingresa cierta información, como el nombre y la dirección. Usando JSP, los datos del formulario (la información que el usuario ingresa en el formulario) se almacenan en el objeto request que se envía desde el navegador al contenedor JSP. La solicitud se procesa y el resultado se envía de vuelta al navegador a través del objeto response. Estos dos objetos están implícitamente disponibles para usted.

Para demostrar cómo manejar formularios HTML usando JSP, aquí hay un formulario de ejemplo con dos campos: uno para el nombre y el otro para el correo electrónico. Como puede ver, el formulario HTML está definido en un archivo fuente JSP. El método request.getParameter se utiliza para recuperar datos del formulario en variables creadas con etiquetas JSP.

La página process.jsp imprime un formulario o la información proporcionada por el usuario dependiendo de los valores de los campos del formulario. Si los valores del formulario son null , se muestra el formulario, de lo contrario, se muestra la información proporcionada por el usuario. Tenga en cuenta que el formulario se crea y se maneja mediante código en el mismo archivo JSP.

Muestra 4: proceso.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="/developer/technicalArticles/xml/WebAppDev/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 se solicita process.jsp desde un servidor web, verá algo similar a la Figura 3.

Figura 3: proceso.jsp loaded

Ingrese su nombre y correo electrónico y haga clic en Proceso para enviar el formulario para su procesamiento, y verá algo similar a la Figura 4.

Figura 4: El formulario se procesa

Componentes reutilizables

El formulario de ejemplo anterior es simple en el sentido de que no hay mucho código involucrado. Cuando más código, por lo que es importante no mezclar la lógica de negocio con la presentación en el mismo archivo. Separar la lógica de negocio de la presentación permite realizar cambios en cualquiera de las partes sin afectar a la otra. Sin embargo, el código JSP de producción debe limitarse a la presentación frontal. Entonces, ¿cómo implementas la parte de lógica de negocios?

Ahí es donde entran los JavaBeans para jugar. Esta tecnología es un modelo de componentes portátil e independiente de la plataforma que permite a los desarrolladores escribir componentes y reutilizarlos en cualquier lugar. En el contexto de JSP, los JavaBeans contienen 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 que los muestre el navegador. Una página JSP utiliza un componente JavaBean configurando y obteniendo las propiedades que proporciona.

Cuáles son los beneficios

Hay varios beneficios al usar JavaBeans para aumentar las páginas JSP:

  • Componentes reutilizables: diferentes aplicaciones podrán reutilizar los componentes.
  • Separación de la lógica de negocio y la lógica de presentación: puede cambiar la forma en que se muestran los datos sin afectar la lógica de negocio.
  • Proteger su propiedad intelectual manteniendo el código fuente seguro.

Ejemplo: Uso de JavaBeans con JSP

Ahora, veamos cómo modificar el ejemplo anterior de process.jsp para usar JavaBeans. En el formulario anterior, estos son dos campos: name y email. En JavaBeans, se llaman propiedades. Por lo tanto, primero escribe un componente JavaBean con métodos setX y getX, donde X es el nombre de la propiedad. Por ejemplo, si tiene métodos get y set: setName y getName, entonces tiene una propiedad conocida como name. El ejemplo 5 muestra un componente FormBean.

Los buenos componentes deben poder interoperar con otros componentes de diferentes proveedores. Por lo tanto, para lograr la reutilización de componentes, hay dos reglas importantes (que son impuestas por la arquitectura JavaBeans) a seguir:

  1. Su clase bean debe proporcionar un constructor sin argumentos para que pueda ser creado usando Beans.instantiate.
  2. Su clase bean debe admitir persistencia implementando la interfaz 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 usar el componente FormBean en el archivo JSP, debe crear una instancia del componente bean. Esto se hace usando la etiqueta <jsp:useBean>. La siguiente línea <jsp:setProperty> se ejecuta cuando se crea una instancia del frijol, y se usa para inicializar las propiedades del frijol. En este caso, ambas propiedades (name y email) se establecen mediante una sola instrucción. Alternativamente, es posible establecer las propiedades de una en una, pero primero necesita recuperar la fecha del formulario. Aquí hay un ejemplo de cómo establecería la propiedad name :

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

Una vez inicializadas las propiedades con los datos recuperados del formulario, los valores de las propiedades se recuperan para su presentación utilizando <jsp:getProperty> en la parte else, como se muestra en la muestra 6.

Muestra 6: proceso2.jsp

 <jsp:useBean 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="/developer/technicalArticles/xml/WebAppDev/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:getPropertyname="formbean" property="email"/> <% } %> </BODY> </HTML> 

Conclusión

Los desarrolladores interesados en desarrollar aplicaciones web de producción de calidad deben familiarizarse con tecnologías que son aplicables no solo para el mercado actual, sino también para el futuro, a saber, JSP y XML. El siguiente artículo discutirá las capacidades que proporciona la tecnología JSP que son ideales para trabajar con XML; y le mostrará cómo usar JSP con XML de manera efectiva. JSP y XML son una excelente combinación para aplicaciones web que comparten información, ya que las páginas JSP tienen soporte XML integrado en ellas en forma de bibliotecas de etiquetas personalizadas JSP. Manténgase atento para obtener más información sobre esto en el próximo artículo de esta serie.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.