Un JavaBean o bean es un componente hecho en software que se puede
reutilizar y que puede ser manipulado visualmente por una herramienta de
programación en lenguaje Java.
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 sus propiedades 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, o simplemente
"bean", en el entorno JSP no es más que una clase Java que sigue
ciertas convenciones en el nombrado de sus métodos, con el objeto de permitir
que los motores JSP (como Tomcat) puedan conocer y acceder a las propiedades
que contiene. Así, el JavaBean tiene propiedades (las cuales no son más que
variables Java de esa clase) y, para cada una de ellas, deben definirse los
métodos getPropiedad() y setPropiedad() que permiten leer y escribir el valor
de la propiedad, respectivamente.
Las convenciones de codificación
que exige la especificación para una clase JavaBeans son las siguientes:
∙ Una clase JavaBean debe tener
un constructor sin argumentos.
∙ Una clase JavaBean no debería
tener variables de instancia públicas.
∙ Para cada variable (o
propiedad) deben crearse dos métodos cuyo nombre sea el nombre de la propiedad
comenzando por letra mayúscula y precedido por "get" (para método de
lectura) o "set" (para método de escrituta).
Así, un ejemplo de clase que
sigue la convención Javabean podría ser la siguiente:
clase_javabean.java
public class clase_javabean {
public clase_javabean() { }
private String propiedad = "valor";
public String getPropiedad() {
return propiedad;
}
public void setPropiedad(String prop) {
propiedad = prop;
}
}
|
De esta forma, las propiedades
del Javabean se exponen públicamente mediante esos métodos, cuyo nombre es
conocido de antemano al seguir la regla de nombrado Javabean. Esto confiere la
característica de instrospección que no es más que la capacidad que
tienen los motores JSP como Tomcat de acceder directamente a las variables de
la clase, al conocerse los métodos necesarios para ello.
Adicionalmante a lo anterior, las
clases Javabean tienen la característica de que pueden implementar la interfaz
"java.io.Serializable". Se denomina seriación al proceso de escribir el estado de un
objeto en un flujo de octetos, permitiendo con ello almacenar objetos en
archivos, transmitirlos por una red de comunicaciones y utilizarlos en
aplicaciones distribuidas. Por otro lado, se conoce como persistencia a la capacidad que tiene un objeto
para existir más allá de la ejecución de un programa (en un archivo, por
ejemplo). De acuerdo con ello, puede observarse como la seriación es la clave
para la implementación de la persistencia, ya que permite escribir un objeto en
un flujo y volver a leerlo posteriormente.
En un flujo de bytes solamente se
puede guardar y restablecer un objeto que implemente la interfaz Serializable.
Esta interfaz no dispone de métodos, sólo sirve para indicar que una clase se
puede seriar, para lo cual será necesario que todas las instancias de clases
usadas sean de tipo primario o clases que también se puedan seriar (por
ejemplo, esto no ocurre con la clase "Object", pero sí con
"String").
Consecuentemente con lo anterior,
una definición de clase Javabean que presente la capacidad de persistencia
podría ser la siguiente:
clase_javabean_persistente.java
package paquete;
import java.io.Serializable;
public class
clase_javabean_persistente implements Serializable {
public
clase_javabean_persistente() { }
private String propiedad =
"valor";
public String getPropiedad() {
return propiedad;
}
public void setPropiedad(String
propiedad) { }
}
|
Los Javabean, conforme a lo
anteriormente indicado, no son más que una clase Java que sigue unos criterios
estándar para el nombrado de los métodos que permiten acceder públicamente a
variables de dicha clase. Conforme con esto, el uso de Javabeans podría seguir
haciéndose mediante la inclusión de código Java dentro del fichero JSP, creando
por ejemplo una instancia del Javabean del siguiente modo:
<% paquete.clase_javabean
instancia = new paquete.clase_javabean (); %>
o recuperar el valor de una
variable mediante la llamada:
<%= instancia.getPropiedad()
%>
No obstante, esto no implicaría
ventaja substancial respecto al uso de los scriptlets. La principal ventaja de los Javabean es que tanto la creación de la
instancia de la clase Javabean como el acceso a sus variables puede realizarse
mediante etiquetas JSP, eliminando así el código Java de la página JSP. Las
etiquetas JSP que permiten esto son:
a) "jsp:useBean": crea
una instacia "nombre" de la clase Javabean "clase":
<jsp:useBean
id="nombre" class="clase" type="tipo"
scope="ámbito" />
donde se distinguen los
siguientes parámetros:
∙ id: especifica el nombre de la
instancia del JavaBean con el que será conocido dentro del ámbito en el que se
define.
∙ class: indica la clase JavaBean
que se va a instanciar.
∙ type: indica otra clase o
interfaz de la que deriva el bean, haciendo que éste deba usarse como tipo de
datos de esa clase o interfaz. Su valor puede ser el mismo que el del parámetro
"class", una superclase de "class" o una interfaz
implementada por "class". Así, por ejemplo, si el JavaBean va a
implementar la interfaz Runnable para ejecución en segundo plano, se indicaría
como tipo type="Runnable".
∙ scope: determina el ámbito en
el que puede usarse el JavaBean, pudiendo ser:
► page: es accesible únicamente
dentro de la página en la que se define.
► session: es accesible desde
todas las páginas que procesen peticiones dentro de la misma sesión (objeto
"session", asociado a un cliente, que ayuda a administrar datos
específicos del mismo en la aplicación Web).
► application: es accesible desde
todas las páginas de la misma aplicación Web.
b) "jsp:getProperty":
obtiene el valor de la propiedad (variable) "propiedad" de la
instancia de clase Javabean "nombre":
<jsp:getProperty
name="nombre" property="propiedad" />
c) "jsp:setProperty":
establece a "valor" el valor de la propiedad (variable) "propiedad
“de la instancia de clase Javabean "nombre":
<jsp:setProperty
name="nombreInstancia" property="propiedad"
value="valor" />
Para que las etiquetas anteriores
funcionen, el código Java del JavaBean requeriría:
∙ Variable miembro
"propiedad".
∙ Funciones miembro públicas
"getPropiedad()" y "setPropiedad()".
Como ejemplo de uso de estas
etiquetas, se crea una instancia fuente de la clase bean FuenteBean, se
modifica el valor de la propiedad codigo de esa instancia fuente y se recupera
a continuación dicho valor:
<jsp:useBeanid="fuente"
class="FuenteBean" />
<jsp:setProperty
name="fuente" property="codigo" value="YO"/>
<jsp:getProperty
name="fuente" property="codigo"/>
Resumiendo, el uso de JavaBeans
permite eliminar gran parte del código Java de las páginas JSP, de forma que
casi toda la lógica de programación de la página se encapsule en JavaBeans
(reduciendo la página a código HTML o XML) que, además, podrán ser
reutilizados. Esas clases o código Java podrán ser compilados y depurados
utilizando las herramientas habituales de programación, ventaja importante
frente a la inserción de código Java dentro de la página (que tiene que ser
depurado en la propia carga de la página).
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.