Introducción a J2EE

La tecnolog�a JavaServer Pages� (JSP) nos permite poner segmentos de c�digo servlet directamente dentro de una p�gina HTML est�tica. Cuando el navegador carga una p�gina JSP, se ejecuta el c�digo del servlet y el servidor de aplicaciones crea, compila, carga y ejecuta un servlet en segundo plano para ejecutar los segmentos de c�digo servlet y devolver una p�gina HTML o imprimir un informe XML.

Esta lecci�n modifica el fichero WAR de la Lecci�n anterior para usar una p�gina JSP en lugar de BonusServlet.

.�Crear la P�gina JSP

Una p�gina JSP se parece a una p�gina HTML con segmentos de c�digo servlet embebidos entre varias etiquetas de apertura ( <% ) y cierre (%> ) JSP. No hay m�todos HttpServlet como init , doGet, o doPost. En su lugar, el c�digo que normalmente ir�a en estos m�todos est� directamente embebido en la p�gina JSP usando etiequetas JSP.

La siguiente p�gina JAP ( Bonus.jsp ) es equivalente al BonusServlet de la lecci�n anterior. Despu�s del c�digo podremos ver una descripci�n detallada de las etiquetas JSP. Observa que las etiquetas JSP no pueden estar anidadas. Por ejemplo, no podemos anidar una etiqueta de comentario JSP con una etiqueta scriptlet JSP.

<HTML>
<HEAD>
<TITLE>Bonus Calculation</TITLE>
</HEAD>
  <%--  Comment
    Scriptlet for import statements
    <%@ indicates a jsp directive --%>
  <%@ page import="javax.naming.*" %>
  <%@ page import="javax.rmi.PortableRemoteObject" %>
  <%@ page import="Beans.*" %>
  <%-- Comment
    Scriptlet to get the parameters, 
    convert string to Integer to int for bonus
    calculation, and declare/initialize bonus
    variable. <% indicates a jsp scriptlet  --%>
  <%! String strMult, socsec; %>
  <%! Integer integerMult; %>
  <%! int multiplier; %>
  <%! double bonus; %>
<%
  strMult = request.getParameter("MULTIPLIER");
  socsec = request.getParameter("SOCSEC");
  integerMult = new Integer(strMult);
  multiplier = integerMult.intValue();
  bonus = 100.00;
%>
  <%-- Comment
    Scriptlet to look up session Bean --%>
<%
  InitialContext ctx = new InitialContext();
  Object objref = ctx.lookup("calcs");
  CalcHome homecalc = (CalcHome)
                    PortableRemoteObject.narrow(
                    objref, CalcHome.class);
%>
  <%-- Comment
    Scriptlet to create session Bean, 
    call calcBonus method, and retrieve a database
    record by the social security number 
   (primary key) --%>
<%
  try {
    Calc theCalculation = homecalc.create();
    Bonus theBonus = theCalculation.calcBonus(
                                  multiplier, 
                                  bonus, 
                                  socsec);
    Bonus record = theCalculation.getRecord(socsec);
%>
  <%-- Comment
    HTML code to display retrieved data
    on returned HTML page.  --%>
    <H1>Bonus Calculation</H1>
    Social security number retrieved: 
                    <%= record.getSocSec() %>
    <P>
    Bonus Amount retrieved: <%= record.getBonus() %>
    <P>
  <%-- Comment
    Scriptlet to catch DuplicateKeyException --%>
<%
  } catch (javax.ejb.DuplicateKeyException e) {
    String message = e.getMessage();
%>
  <%-- Comment
    HTML code to display original data passed to JSP
    on returned HTML page --%>
    Social security number passed in: <%= socsec %>
    <P>
    Multiplier passed in: <%= strMult %>
    <P>
    Error: <%= message %>
  <%-- Comment
    Scriptlet to close try and catch block --%>
<%
  }
%>
  <%--  Comment
    HTML code to close HTML body and page --%>
</BODY>
</HTML>

.�Comentarios

Las primeras siete l�neas de Bonus.jsp muestran un HTML normal seguido por un comentario JSP. Los comentarios JSP son similares a los comentarios HTML excepto en que empiezan con <%-- en lugar de <!--, que es como empiezan en HTML. Podemos usar comentarios JSP o HTML en una p�gina HTML. Los comentarios HTML se env�an al navegador web del cliente donde aparezcan como parte de la p�gina HTML, y los comentarios JSP son eliminados y no aparecen en el HTML generado.

Nota:
Hemos visto que poner dos puntos (:) en un comentario JSP como en <%-- Comment: Scriptlet for import statements . . . creaba un error en tiempo de ejecuci�n que desaparec�a cuando eliminamos los dos puntos.
<HTML>
<HEAD>
<TITLE>Bonus Calculation</TITLE>
</HEAD>
<%-- Comment
Scriptlet for import statements
<%@ indicates a jsp directive --%>

.�Directivas

Las directivas JSP son instrucciones procesadas por el motor JSP cuando la p�gina JSP se traduce a un servlet. Las directivas usadas en este ejemplo le dicen al motor JSP que incluya ciertos paquetes y clases. Las directivas est�n encerradas entre etiquetas de directiva <%@ y %>.

<%@ page import="javax.naming.*" %>
<%@ page import="javax.rmi.PortableRemoteObject" %>
<%@ page import="Beans.*" %>

.�Declaraciones

Las declaraciones JSP nos permiten configurar variables para su uso posterior en expresiones o scriptlets. Tambi�n podemos declarar variables dentro de expresiones o scriptlets en el momento de usarlas. El �mbito es toda la p�gina JSP, no hay concepto de variables de ejemplar. Es decir, no tenemos que declarar variables de ejemplar para usar en m�s de una expresi�n o scriptlet. Las declaraciones van encerradas entre etiquetas de declaraci�n <%! y %>. Podemos tener varias declaraciones. Por ejemplo, <%! double bonus; String text; %> .

  <%! String strMult, socsec; %>
  <%! Integer integerMult; %>
  <%! int multiplier; %>
  <%! double bonus; %>

.�Scriptlets

Los scriptlets JSP nos permiten embeber segmentos de c�digo java dentro de una p�gina JSP. El codigo embebido se inserta directamente en el servlet generado que se ejecuta cuando se pide la p�gina. Este scriptlet usa las variables declaradas en las directivas descritas arriba. Los Scriptlets van encerradas entre etiquetas <% y %>.

<%
strMult = request.getParameter("MULTIPLIER");
socsec = request.getParameter("SOCSEC");
integerMult = new Integer(strMult);
multiplier = integerMult.intValue();
bonus = 100.00;
%>

.�Variables Predefinidas

Un scriptlet puede usar las siguientes variables predefinidas: session, request, response, out , e in. Este ejemplo usa la variable predefinida request, que es un objeto HttpServletRequest. De igual forma, response es un objeto HttpServletResponse, out es un objeto PrintWriter, e in es un objeto BufferedReader.

Las variables predefinidas se usan en los scriptlets de la misma forma que se usan en los servelts, excepto que no las declaramos.

<%
strMult = request.getParameter("MULTIPLIER");
socsec = request.getParameter("SOCSEC");
integerMult = new Integer(strMult);
multiplier = integerMult.intValue();
bonus = 100.00;
%>

.�Expresiones

La expresiones JSP nos permiten recuperar din�micamente o calcular valores a insertar directamente en la p�gina JSP. En este ejemplo, una expresi�n recupera el n�mero de la seguridad social desde el bean de entidad Bonus y lo pone en la p�gina JSP.

<H1>Bonus Calculation</H1>
Social security number retrieved:
<%= record.getSocSec() %>
<P>
Bonus Amount retrieved: <%= record.getBonus() %>
<P>

.�Etiquetas Especificas de JSP

La especificaci�n JavaServer Pages 1.1 define etiquetas espec�ficas de JSP que nos permiten extender la implementaci�n JSP con nuevas caracter�sticas y ocultar mucha complejidad a los dise�adores visuales que necesitan buscar la p�gina JSP y modificarla. El ejemplo JSP de esta lecci�n no usa ninguna de estas etiquetas espec�ficas, pero las veremos en la siguiente lecci�n. Las etiquetas espec�ficas JSP definidas en la especificaci�n 1.1 son las siguientes:

jsp:forward y jsp:include para instruir al motor JSP que pase de la p�gina actual a otra p�gina JSP.

jsp:useBean, jsp:setProperty, jsp:getProperty nos permiten embeber y utilizar tecnolog�a JavaBeans en p�ginas JSP.

jsp:plugin descarga autom�ticamente el Plug-In Java al cliente para ejecutar applet en la plataforma Java adecuada.

.�Modificar bonus.html

El �nico cambio que necesitamos hacer a bonus.html es hacer que el parametro ACTION del formulario HTML invoque a Bonus.jsp en lugar de a BonusServlet .

<HTML>
<BODY BGCOLOR = "WHITE">
<BLOCKQUOTE>
<H3>Bonus Calculation</H3>
<FORM METHOD="GET" ACTION="Bonus.jsp">
<P>
Enter social security Number:
<P>
<INPUT TYPE="TEXT" NAME="SOCSEC"></INPUT>
<P>
Enter Multiplier:
<P>
<INPUT TYPE="TEXT" NAME="MULTIPLIER"></INPUT>
<P>
<INPUT TYPE="SUBMIT" VALUE="Submit">
<INPUT TYPE="RESET">
</FORM>
</FORM>
</BLOCKQUOTE>
</BODY>
</HTML>

.�Arrancar la Plataforma y las Herramientas

Para ejecutar este ejemplo, necesitamos arrancar el servidor J2EE, la herramienta Deploy, y la base de datos Cloudscape. En diferentes ventanas, tecleamos los siguientes comandos:

j2ee -verbose
deploytool
cloudscape -start

Si esto no funciona, tecleamos esto desde el directorio J2EE:

Unix

j2sdkee1.2.1/bin/j2ee -verbose
j2sdkee1.2.1/bin/deploytool
j2sdkee1.2.1/bin/cloudscape -start

Windows

j2sdkee1.2.1\bin\j2ee -verbose
j2sdkee1.2.1\bin\deploytool
j2sdkee1.2.1\bin\cloudscape -start

.�Eliminar el Fichero WAR

Como se ha a�adido una p�gina JSP al componente Web, tenemos que borrar el fichero WAR de las lecciones anteriores y crear uno nuevo con la p�gina JSP.

Local Applications:

  • Pulsar el icono 2BeansApp para poder ver los componentes de nuestra aplicaci�n.
  • Seleccionamos BonusWar para que se ilumine.
  • Seleccionamos Delete desde el men� Edit.

Crear el Nuevo Fichero WAR

Men� File:

  • Seleccionamos New Web Component

Introduction:

  • Leemos y pulsamos Next .

War File General Properties :

Nota:
Parece que hay un bug en la herramienta Deploy. Debemos asegurarnos de a�adir primero Bonus.jsp seguido de bonus.html. Si a�adimos primero bonus.html, la herramienta Deploy pone bonus.html donde deber�a ir Bonus.jsp y Bonus.jsp donde deber�a ir bonus.html. Si esto sucede, podemos corregirlo manualmente copi�ndolos en las localizaciones correctas. As� es como deben estar despu�s del despliegue:
~/j2sdkee1.2/public_html/JSPRoot/bonus.html
~/j2sdkee1.2/public_html/JSPRoot/WEB-INF/classes/Bonus.jsp
  • Especificamos BonusWar para el nombre de display.
  • Pulsamos Add
  • Vamos al directorio ClientCode y a�adimos Bonus.jsp,
  • Pulsamos Next
  • Vamos al directorio ClientCode y a�adimos bonus.html
  • Pulsamos Finish .

Propiedades Generales del Fichero War:

  • Pulsamos Next.

Elegir el tipo de Componente: .

  • Seleccionamos Describe a JSP.
  • Pulsamos Next.

Propiedades generales del Componente:

  • Ponemos Bonus.jsp como nombre de fichero JSP.
  • Ponemos BonusJSP como nombre de display.
  • Pulsamos Finish .

Ventana Inspecting:

  • Seleccionamos Web Context
  • Especificamos JSPRoot.

.�Verificar y Desplegar la Aplicaci�n J2EE

Antes de desplegar la aplicaci�n, es una buena idea ejecutar el verificador. El verificador mostrar� los errores en los componentes de la aplicaci�n como m�todos inexistentes que el compilador no captura.

Verificar:

  • Con 2BeansApp seleccionado, elegimos Verifier desde el men� Tools.
  • En el di�logo que aparece, pulsamos OK. La ventana deber�a decir que no hay ning�n fallo.
  • Cerramos la ventana del verificador porque ahora estamos listos para desplegar la aplicaci�n.
Nota:
En la versi�n 1.2.1 del software podr�amos obtener un error tests app.WebURI. Esto significa que la herramienta DeployTool no puso la extensi�n .war al fichero WAR durante su creacci�n. Es un error menor y la aplicaci�n J2EE se despliega sin problemas.

Desplegar:

  • Desde el men� Tools, elegimos Deploy Application. Se mostrar� una caja de di�logo Deploy BonusApp.
  • Verificar que la selecci�n de Target Server es un host local o el nombre de un host donde se est� ejecutando el servidor J2EE.
Nota:
No marcamos la caja "Return Client Jar". El �nico momento en que debemos chequear esta caja es cuando usamos persistencia controlada por el bean o desplegamos una aplicaci�n solitaria para el programa cliente. Este ejemplo usa un servlet y una p�gina HTML por lo que no debe est�r marcada. Esta caja crea un fichero JAR con toda la informaci�n de despliegue necesaria para una aplicaci�n solitaria.
  • Pulsamos Next .
  • Nos aseguramos de que los nombres JNDI muestran calcs para CalcBean y bonus para BonusBean. Si no es as�, tecleamos los nombres JNDI nosotros mismos, y pulsamos la tecla Return.
  • Pulsamos Next. Nos aseguramos de que el nombre Context Root muestra JSPRoot. Si no es as�, lo tecleamos nosotros mismos y pulsamos la tecla Return.
  • Pulsamos Next .
  • Pulsamos Finish para empezar el despliegue. Se mostrar� una caja de di�logo que mostrar� el estado de la operaci�n de despliegue.
  • Cuando se haya completado, las tres barras de la izquierda se habr�n sombreado completamente, como se ve en la siguiente figura. Cuando esto suceda pulsamos OK.

.�Ejecutar la Aplicaci�n J2EE

El servidor web se ejecuta por defecto en el puerto 8000. Para abrir la p�gina bonus.html apuntamos nuestro navegador a http://localhost:8000/JSPRoot/bonus.html, que es d�nde la herramienta de despliegue puso el fichero HTML.

Nota:
La Herramienta Deploy pone Bonus.jsp bajo public_html/JSPRoot , y bonus.html bajo public_html/JSPRoot/WEB-INF/classes, que es lo opuesto a donde realmente pertenecen. Manualmente los copiamos en sus localizaciones correctas como sigue public_html/JSPRoot/bonus.html y public_html/JSPRoot/WEB-INF/classes/Bonus.jsp.
  • Rellenamos un n�mero de la seguridad social y un multiplicador.
  • Pulsamos el bot�n Submit. Bonus.jsp procesa nuestros datos y devuelve una p�gina HTML con el bono calculado.
Bonus Calculation

Social Security number retrieved: 777777777
Bonus Amount Retrieved: 200.0

Si hemos suministrado dos veces el mismo n�mero de la seguridad social, veremos algo similar a esto:

Bonus Calculation

Soc Sec passed in: 777777777
Multiplier passed in: 2
Error: Duplicate primary key

.�C�digo Fuente de los Ejemplos

Aqu� tienes un fichero Zip con los ficheros fuente de los ejemplos de esta p�gina:

fuentes_L4.zip

COMPARTE ESTE ARTÍCULO

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