Programación en castellano
Inicio > Tutoriales > J2EE > Introducción a J2EE
-Tutoriales

Introducción a J2EE


Tecnología JavaBeans

Podemos usar la tecnología JavaBeans™ para poner un JavaBean entre una página JSP y el bean de sesión CalcBean para obtener una mejor separación "Model, View, Controller (MVC)". MVC es un patrón de diseño que consiste en tres tipos de objetos. El Modelo proporciona la lógica de negocio de la aplicacón, la Vista es la presentación en pantalla, y el Controlador es un objeto que maneja lo que sucede cuando el usuario interactúa con la Vista. Un patrón de diseño describe un problema recurrente y sus soluciones cuando la solución no es siempre exactamente la misma para cada recurrencia.

La lección sobre Tecnología JSP se configuró para que las páginas HTML y JSP proporcionaran la presentación en pantalla (Vista) y manejar lo que sucedia cuando el usuario interactúa con los datos (Controlador). Los beans de entidad y de sesión ( BonusBean y CalcBean) son los objetos de la aplicación o Modelo.

Esta lección usa una página JSP para la presentación en pantalla (View), un JavaBean para manejar lo que sucede cuando el usuario interactúa con la vista (Controlador), y los beans de entidad y de sesión para los objetos de aplicación (Modelo). Separando el Controlador de la Vista permite al JavaBean servir como una envoltura para el bean de sesión y ofrece un ejemplo mucho más claro de la separación MVC. Una aplicación que usa patrones de diseño es mucho más sencilla de actualizar, mantener y manejar.

. Sobre el Ejemplo

En la Lección anterior, el interface de usuario de la aplicación consiste en una página HTML con un formulario HTML. El formulario llama a la página JSP cuando el usuario pulsa el botón Submit de la página HTML.

Otra forma de crear el interface de usuario es con una página JSP que incluya el formulario HTML, scriptlets JSP, y etiquetas específicas JSP para interactúar con el JavaBean. Cuando se carga la página JSP, se muestra el formulario HTML y se ejecutan los escriptlets y las etiquetas especificas JSP para interactuar con el JavaBean. Como todavía no se han suministrado datos, la pantalla se parecerá a la de la siguiente figura:

Cuando el usuario introduce algún dato y pulsa el botón Submit, se vuelve a mostrar el formulario HTML, y se ejecutan de nuevo los scriptlets y las etiquetas especificas JSP con los datos suministrados. La pantalla se parecería algo a la de la siguiente figura. Esto es porque el parámetro ACTION del formulario HTML de bonus.jsp se llama a sí mismo de forma recursiva.

Si el usuario introduce el mismo número de la seguridad social, se devuelve un error de clave duplicada y se muestra sobre la página JSP como se muestra en la siguiente figura:

. Crear bonus.jsp

El código de bonus.jsp es bastante sencillo poque el código que busca el bean de sesión y calcula el bono está ahora en el JavaBean. La primera parte del fichero contiene el código HTML para crear el formulario. El código para pasar los datos del formulario HTML al JavaBean está en la segunda parte del fichero. Abajo podemos ver el fichero bonus.jsp completo:

<HTML>
<BODY BGCOLOR = "WHITE">
<HEAD>
<TITLE>Bonus Calculation</TITLE>
</HEAD>

<BLOCKQUOTE>
<H3>Bonus Calculation</H3>

<!--ACTION parameter calls this page-->
<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>

<!--Scriptlet and JavaBeans Tags start here -->
<jsp:useBean id = "jbonus" class = "JBonusBean"/>

<%! String sMult, ssec; %>
<%
sMult = request.getParameter("MULTIPLIER");
ssec = request.getParameter("SOCSEC");
%>

<jsp:setProperty name = "jbonus" property="strMult"
value="<%=sMult%>"/>
<jsp:setProperty name = "jbonus" property="socsec"
value="<%=ssec%>"/>

Social security number retrieved:
<jsp:getProperty name="jbonus" property="socsec"/>

<P>
Bonus Amount retrieved:
<jsp:getProperty name="jbonus" property="bonusAmt"/>

<P>
Error messages:
<jsp:getProperty name = "jbonus" property="message"/>

</BLOCKQUOTE>
</BODY>
</HTML>

. Especificar el JavaBean

La siguiente etiqueta HTML especifica el JavaBean que se esta utilizando en este ejemplo. El parámetro id define un alias para usarlo como referencia al JavaBean, y el parámetro class especifica la clase JavaBean. En este ejemplo el id es jbonus y el class es JBonusBean.

<jsp:useBean id = "jbonus" class = "JBonusBean"/>

. Obtener los Datos

Los siguientes scriptlets JSP recuperan los datos suministrados por el usuario desde los campos del formulario HTML. El multiplicador se almacena en la variable sMult String, y el número de la seguridad social en la variable ssec String.

<%! String sMult, ssec; %>
<%
sMult = request.getParameter("MULTIPLIER");
ssec = request.getParameter("SOCSEC");
%>

. Pasar los Datos al JavaBean

Las siguientes etiquetas HTML configuran dos propiedades del JavaBean. Una propiedad es un campo privado de la clase JavaBean. La primera línea usa la etiqueta jsp:setProperty para configurar el campo strMult en la clase JBonusBean (con el alias jbonus id) al valor almacenado en la variable sMult. La segunda línea realiza una operación similar para el campo socsec de la clase JBonusBean.

<jsp:setProperty name = "jbonus" property="strMult" value="<%=sMult%>"/>
<jsp:setProperty name = "jbonus" property="socsec" value="<%=ssec%>"/>

La expresión value="<%=ssec%>" envía el dato contenido en la variable ssec al campo socsec del JavaBean.

. Recuperar los Datos desde el JavaBean

Recuperar los datos desde el JavaBean es similar a enviárselos. Usamos la etiqueta jsp:getProperty e indicamos la propiedad (campo privado) cuyo dato queremos obtener. La siguiente etiqueta getProperty obtiene el dato almacenado en el campo privado socsec de la clase JBonusBean (con el alias jbonus id ).

Social security number retrieved:
<jsp:getProperty name="jbonus" property="socsec"/>

Las siguientes etiquetas realizan operaciones similares para los campos bonusAmt y message de la clase JBonusBean.

<P>
Bonus Amount retrieved:
<jsp:getProperty name="jbonus" property="bonusAmt"/>

<P>
Error messages:
<jsp:getProperty name = "jbonus" property="message"/>

. Crear la Clase JavaBean

Una clase JavaBeans™ (o bean para acortar) se parece a cualquier clase normal del lenguaje Java™. Pero para ser un bean, una clase JavaBean debe seguir un conjunto de sencillas convenciones de nombres y diseño explicados en la especificación JavaBeans. Como los Beans cumplen la especifiación JavaBean, pueden ser accedidos y manejados por otros programas y herramientas que cumplan las mismas convenciones.

En la sección Crear bonus.jsp, se utilizarón etiquetas HTML y scriptlets JSP para obtener y seleccionar los datos privados de la clase JBonusBean. Esto es posible porque la clase JBonusBean sigue las convenciones de nombrado y diseño de JavaBeans.

Esta sección describe el código de JBonusBean y nos ofrece una sencilla presentación de la tecnología JavaBeans cuando se usa con páginas JSP.

Aquí tenemos la clase JBonusBean completa.

import javax.naming.*;
import javax.rmi.PortableRemoteObject;
import Beans.*;

public class JBonusBean {
  private String strMult, socsec, message;
  private double bonusAmt;
  CalcHome homecalc;

  public JBonusBean() {
    try{
      InitialContext ctx = new InitialContext();
      Object objref = ctx.lookup("calcs");
      homecalc = (CalcHome)
         PortableRemoteObject.narrow(
            objref, CalcHome.class);
    } catch (javax.naming.NamingException e) {
      e.printStackTrace();
    }
  }
  public double getBonusAmt() {
    if(strMult != null){
      Integer integerMult = new Integer(strMult);
      int multiplier = integerMult.intValue();
      try {
        double bonus = 100.00;
        Calc theCalculation = homecalc.create();
        Bonus theBonus = theCalculation.calcBonus(
           multiplier, bonus, socsec);
        Bonus record = theCalculation.getRecord(
            socsec);
        bonusAmt = record.getBonus();
        socsec = record.getSocSec();
      } catch (javax.ejb.DuplicateKeyException e) {
        message = e.getMessage();
      } catch (javax.ejb.CreateException e) {
        e.printStackTrace();
      } catch (java.rmi.RemoteException e) {
        e.printStackTrace();
      }
      return this.bonusAmt;
    } else {
      this.bonusAmt = 0;
      this.message = "None.";
      return this.bonusAmt;
    }
  }

  public String getMessage(){
    return this.message;
  }
  public String getSocsec(){
    return this.socsec;
  }
  public String getStrMult(){
    return this.strMult;
  }
  public void setSocsec(String socsec) {
   this.socsec = socsec;
  }
  public void setStrMult(String strMult) {
   this.strMult = strMult;
  }
}

. Propiedades del Bean

Las propiedades definen los datos que un JavaBean pone a disposición de otros programas o herramientas a través de métodos get o set. Los datos podrían hacer cosas como definir la apariencia o el comportamiento del JavaBean, o utilizarse para algún cálculo, etc. Las propiedades realmente son campos privados de la clase que siempre deberían ser privados y sólo accesibles a través de métodos set y get.

El siguiente segmento de código muestra las propiedades privadas de la clase JBonusBean. Esta clase tiene un correspondiente método get<property> para cada campo y sus correspondientes métodos set<property> para los campos strMult y socsec.

public class JBonusBean {
private String strMult, socsec, message;
private double bonusAmt;

. Constructor

El constructor JBonusBean busca el bean de sesión.

public JBonusBean() {
try{
InitialContext ctx = new InitialContext();
Object objref = ctx.lookup("calcs");
homecalc = (CalcHome)
PortableRemoteObject.narrow(
objref, CalcHome.class);
} catch (javax.naming.NamingException e) {
e.printStackTrace();
}
}

. Métodos Set

JBonusBean tiene dos métodos set (métodos precedidos por la palabra set). Estos métodos seleccionan propiedades (campos privados) con valores especificados. Los dos métodos set son setSocsec y setStrMult para seleccionar los campos privados socsec y strMult (propiedades JavaBean) .

En este ejemplo, los valores usados para las propiedades socsec y strMult vienen de las etiquetas setProperty name de la página JSP. El servidor J2EE usa la información suministrada en la siguiente etiqueta setProperty name para localizar el correspondiente método set en JBonusBean (con el alias jbonus id ):

<jsp:setProperty name = "jbonus"
property="strMult" value="<%=sMult%>"/>
<jsp:setProperty name = "jbonus" property="socsec"
value="<%=ssec%>"/>

En la clase JBonusBean, los métodos set<property> siguen las convenciones de nombrado para que el servidor J2EE pueda mapear las etiquetas setProperty name del fichero JSP a los métodos set<property> correctos para pasar los datos desde la página JSP al JavaBean.

Con los métodos set, el nombre de método consiste en la palabra set y el nombre de la propiedad. El nombre de la propiedad es el nombre de uno de los campos privados de JBonusBean. Mientras que los nombres de campos por convención empiezan siempre con una letra minúscula, la segunda palabra de un nombre de método siempre empieza con una máyuscula. Por eso, para seleccionar el campo privado socsec, el nombre del método es setSocsec. El servidor J2EE mapea la mayúscula de Socsec en el nombre del método a la minúscula socsec del campo. Los métodos set no tienen valor de retorno y tienen un argumento del tipo apropiado.

public void setSocsec(String socsec) {
this.socsec = socsec;
}
public void setStrMult(String strMult) {
this.strMult = strMult;
}

. Métodos Get

JBonusBean tiene cuatro métodos get (métodos precedidos por la palabra get ). Los métodos Get obtienen y devuelven un valor de propiedad (valores de campos privados). Los cuatro métodos get son getBonusAmt, getMessage, getSocsec, y getStrMult para devolver datos desde los campos privados bonusAmt, message , socsec , y strMult (propiedades JavaBean).

En este ejemplo, los valores usados para seleccionar los campos bonusAmt y message vienen desde el método getBonusAmt. La página JSP recupera los datos de las propiedades de JBonusBean usando las siguientes etiquetas getProperty name. La página JSP sólo recupera los valores que le interesan, por eso podríamos observar que aunque hay una propiedad en JBonusBean para el multiplicador (el campo strMult), este valor no es recuperado por la página JSP.

Social security number retrieved:
<jsp:getProperty name="jbonus" property="socsec"/>

<P>
Bonus Amount retrieved:
<jsp:getProperty name="jbonus" property="bonusAmt"/>

<P>
Error messages:
<jsp:getProperty name = "jbonus" property="message"/>

Los métodos Get siguen las mismas convenciones de nombres que los métodos Set por eso la página JSP puede recuperar los datos del JBonusBean. Los métodos Get siempre tienen un valor de retorno y no tienen argumentos. Podríamos observar que aunque el método getBonusAmt seleccciona valores de propiedades, realmente no necesita devolver ningún valor en este ejemplo, devuelve this.bonusAmt para evitar un error en tiempo de ejecución del servidor J2EE.

El método getBonusAmt usa una sentencia if-else para manejar el caso cuando no se suministra ningún valor strMult. Cuando la página JSP se carga por primera vez, el usuario final no ha suministrado ningún dato, pero todas las etiquetas y scriptlets de la página son ejecutados de cualquier forma. En este caso, el valor de la propiedad strMult pasada a JBonusBean es null, lo que resulta en un multiplicador nulo y un valor nulo de bonusAmt. Ocurre un error de servidor cuando la página JSP obtiene e intenta mostrar el valor null de bonusAmt. Para evitar este error, bonusAmt se selecciona a cero en el caso de que se reciba un valor null desde la página JSP.

public double getBonusAmt() {
if(strMult != null){
Integer integerMult = new Integer(strMult);
int multiplier = integerMult.intValue();
try {
double bonus = 100.00;
Calc theCalculation = homecalc.create();
Bonus theBonus = theCalculation.calcBonus(
multiplier, bonus, socsec);
Bonus record = theCalculation.getRecord(
socsec);
bonusAmt = record.getBonus();
socsec = record.getSocSec();
} catch (javax.ejb.DuplicateKeyException e) {
message = e.getMessage();
} catch (javax.ejb.CreateException e) {
e.printStackTrace();
} catch (java.rmi.RemoteException e) {
e.printStackTrace();
}
return this.bonusAmt;
} else {
this.bonusAmt = 0;
this.message = "None.";
return this.bonusAmt;
}
}
public String getMessage(){
return this.message;
}
public String getSocsec(){
return this.socsec;
}
public String getStrMult(){
return this.strMult;
}
public void setSocsec(String socsec) {
this.socsec = socsec;
}
public void setStrMult(String strMult) {
this.strMult = strMult;
}

. 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 :

  • 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 JBonusBean.class
  • 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.

  • 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_L5.zip

 
Patrocinados
 

Copyright © 1999-2010 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Desarrollo web y diseño profesional por Color Vivo Internet. Un proyecto de los Hermanos Carrero

red internet: videos gratis | messenger gratis | decoración | juegos gratis | servidores dedicados
más internet: recursos gratis | bitácoras | gifs animados