JAVASERVER PAGES (JSP)

Anuncio
JavaServer Pages (JSP)
PFC-INX84
JAVASERVER PAGES (JSP)
Introducción
JSP es una extensión de la tecnología Java Servlets. Mientras que estos últimos
tienen que mantener plantillas de código HTML dentro del programa, JSP contiene
estas plantillas dentro de las propias páginas. La tecnología JSP está ideada para facilitar
la creación de aplicaciones web gracias a características como [Sun 99]:
§
§
§
§
Separación entre generación de contenido y presentación. Mediante etiquetas
HTML o XML se da formato a la página, y mediante etiquetas JSP, código
script o JavaBeans se añade el componente dinámico. De esta forma,
encapsulando la lógica, se puede modificar la presentación de la página JSP sin
afectar a la generación del contenido.
Reutilización de componentes software. La descomposición en componentes que
caracteriza a esta tecnología facilita el que objetos de una aplicación vuelvan a
utilizarse en dominios diferentes. Por ejemplo, objetos como el analizador léxico
o el extractor de raíces definidos para el glosario, pueden ser reutilizados para
desarrollar otro tipo de aplicaciones en las que se necesite integrar técnicas de
RI.
Utilización de etiquetas XML para simplificar el desarrollo de las páginas. Así
se ocultan detalles de implementación y se facilita la construcción de páginas
que integren código JSP, incluso a desarrolladores web poco acostumbrados a
trabajar con lenguajes script. A través del mecanismo de extensibilidad de las
librerías de etiquetas, estas pueden personalizarse para las necesidades de cada
sistema.
Independencia de la plataforma tanto cliente como servidor. Por un lado, la
utilización de código Java garantiza la portabilidad de la aplicación para su
ejecución en cualquier servidor que contenga una maquina virtual Java. Esta es
una ventaja sustancial frente a otras tecnologías similares, como por ejemplo
Active Server Pages (ASP) [González et al. 00]. En el caso del cliente, al recibir
sólo páginas HTML hace que sea compatible con cualquier navegador.
Funcionamiento
Cuando se produce una solicitud de una página JSP por parte de un navegador, se
comienza comprobando si se trata de la primera solicitud de dicha página. En ese caso
se compila a un servlet, que es ejecutado y cuya salida es devuelta al usuario que realizó
la petición. Las siguientes solicitudes son más eficientes al no necesitar que dicha
página sea de nuevo compilada, ya que sólo se invoca al servlet que se generó en la
petición inicial. En este sentido esta tecnología es más ventajosa que otras como ASP,
que requieren cada vez una nueva compilación.
El proceso de compilación de las páginas consiste en analizar su contenido
buscando etiquetas JSP y traduciendo éstas a código Java equivalente. El contenido
estático de las páginas (código html) es traducido a cadenas de caracteres en lenguaje
Java. Las etiquetas de componentes JavaBeans son traducidas a su correspondiente
Carlos Cuervo Martínez
1
JavaServer Pages (JSP)
PFC-INX84
objeto, mientras que los elementos script son transferidos tal cual. Todo este código
fuente es usado para formar los métodos de servicio del servlet que se va a generar.
Componentes de una página JSP
A continuación se hace una breve descripción de los componentes más generales
de las páginas JSP [Hall 00].
Directivas JSP
Son instrucciones que son procesadas por el compilador JSP cuando la página se
compila a un Servlet, las directivas son usadas para insertar datos de ficheros externos,
especificar librerías definidas por el usuario, etc. Estas directivas de definen dentro de
las etiquetas <%@ y %>.
Por ejemplo para importar la librería java.util y tener acceso a las clases de esta librería
dentro de una página JSP, se pondrá la siguiente línea al principio de la página, puede ir
antes o después de la etiqueta <HTML>:
<%@ page import=”java.util.*” %>
Declaraciones
Son similares a las declaraciones de variables en Java, sirven para definir
variables para su uso en expresiones o scripts, las declaraciones se definen entre las
etiquetas <%! y %>. Por ejemplo se va a definir una variable entera la cual contendrá el
valor de la hora del día.
<%! int time = Calendar.getInstance().ger(Calendar.AM_PM); %>
Expresiones
Son variables o constantes que son usadas para insertar valores dentro de la
página que devuelve el servidor web, se introducen entre las etiquetas <%= y %>. La
expresión que va entre esas dos etiquetas es evaluada y ejecutada por el compilador JSP,
sustituyendo las etiquetas y la expresión por el valor que se genera de la ejecución de
dicha expresión.
Por ejemplo, para obtener la fecha del sistema dentro de una página JSP se
podría insertar la siguiente expresión que crea un objeto Date, el cual devuelve la fecha
del sistema:
<%= new java.util.Date() %>
El compilador JSP, evalúa la expresión anterior, la ejecuta y la sustituye por la
fecha del sistema .
Carlos Cuervo Martínez
2
JavaServer Pages (JSP)
PFC-INX84
Para las expresiones JSP puede usarse una sintaxis basada en XML de la
siguiente forma:
<jsp: expresión >
Expresión en lenguaje java
</jsp: expresión>
Estas etiquetas también pueden tener parámetros, como los usados para asignar
valores a los atributos de un Java Bean, a continuación se muestra un ejemplo en el que
se supone que tenemos una instancia de un objeto Java Bean con el nombre “fuente” y
tiene un atributo llamado “codigo” al cual se le va a asignar el valor “Carlos”:
<jsp: setProperty
name=”fuente”
property=”codigo”
value=”Carlos” />
En vez de asignarle al parámetro “value” una constante, se le puede asignar el
valor obtenido de la evaluación de una expresión, por el siguiente ejemplo asigna a un
objeto llamado “usuario” el valor “Usuario” seguido de un número aleatorio al atributo
“id”:
<jsp:setProperty name=”usuario”
property=”id”
value’<%= “Usuario “+ Math.random() %>’ />
Variables predefinidas
Dentro de una página JSP se puede acceder a una serie de variables que
simplifican el código de las expresiones y scripts JSP. Las más importantes son:
§
§
§
§
request: Es el objeto HttpServletRequest asociado con la solicitud del
cliente, con esta variable se puede acceder a los parámetros recibidos del
formulario del cliente, así como a las cabeceras http.
response: Es el objeto HttpServletResponse asociado con la respuesta al
cliente.
session: El objeto HttpSession (sesión) asociado con la solicitud del
cliente.
out: Es el PrintWriter usado para enviar la salida al cliente.
A continuación se muestra un ejemplo, con el cual se puede obtener nombre del
ordenador cliente (o la dirección IP):
<html>
......
El nombre de su host: <%= request.getRemoteHost() %>
</html>
Carlos Cuervo Martínez
3
JavaServer Pages (JSP)
PFC-INX84
Scripts JSP
Los scripts JSP son trozos de código Java que se pueden insertar dentro de las
página JSP para realizar cualquier tipo de procesamiento lógico. Para insertar un trozo
de código dentro de una página JSP, este irá entre las etiquetas <% y %>.
Desde estos scripts se tiene acceso a las variables predefinidas.
Ejemplo:
<%
String queryData = request.getQueryString();
out.println(“La cadena con los parámetros recibidos es: “ + queryData);
%>
Este script muestra el mensaje “La cadena con los parámetros recibidos es: “ y a
continuación se muestra la cadena que se recibe cuando el cliente envia un formulario
mediante un método GET.
Este script anterior es muy sencillo y podía haberse sustituido por:
La cadena con los parámetros recibidos es: <%= request.getQueryString() %>
Dentro de los scripts pueden insertarse sentencias condicionales, iterativas,etc.,
ya que el código utilizado es Java, y de esta forma se tiene toda la funcionalidad del
mismo. A continuación se muestra un script que muestra un mensaje distinto en
función de un valor aleatorio.
<% if (Math.random() < 0.5 ) { %>
Hoy salgo de copas!!!
<% } else { %>
Mier.., Hoy me quedo en casa!!!!
<% } %>
El script anterior obtiene un número aleatorio entre 0 y 1, si el valor obtenido es
inferior
a 0.5, entonces se muestra el mensaje “Hoy salgo de copas!!!”, en caso
contrario se muestra “Mier.., Hoy me quedo en casa!!!!”.
JavaBeans
Los JavaBeans son unos objetos que tienen unas características que los
diferencian del resto de los objetos Java y deben cumplir las siguientes características:
1
2
3
Una clase bean debe tener un constructor sin argumentos.
Una clase bean no debería tener variables de instancia públicas.
Los valores persistentes deberían ser accedidos a través de
métodos llamados getXxx y setXxx. Por ejemplo si se tiene una
clase Coche que almacena el número de pasajeros, deberían
definirse los métodos: getNumPasajeros(), que devolvería el
número de pasajeros del coche, y setNumPasajeros(int n), que
Carlos Cuervo Martínez
4
JavaServer Pages (JSP)
PFC-INX84
actualiza el atributo número de pasajeros de la clase coche al
valor indicado por n.
Otra característica que los diferencia es que implementan la interfaz
java.io.Serializable, esta interfaz proporciona a estos objetos la característica
de
persistencia,
por ejemplo, podemos transmitirlos por una red de comunicaciones y
recuperar el estado en el que se encontraban cuando fueron enviados.
Los JavaBeans tienen otra característica que es la introspección, esta
característica permite a los beans guardar y recuperar los valores de sus atributos de
forma automática, sin tener que llamar explícitamente a cada método getXxx o setXxx.
Para usar un JavaBean en una página JSP lo primero es obtener una instancia del
objeto mediante la etiqueta:
<jsp:useBean id=”nombre” class=”clase” type=”tipo” scope=”ámbito” />
El parámetro “id”, especifica el nombre de la instancia del bean con el que será
conocido dentro del ámbito en el que se define, el ámbito puede ser :
. page: es conocido únicamente dentro de la página en el que se define.
. sessión: es accesible durante el tiempo que dure la sesión del usuario
.aplication: es accesible durante el tiempo que dure la aplicación en la que se
usa.
El parámetro “class” indica la clase a la que pertenece el bean que se va a
instanciar.
El parámetro “type” indica el tipo de objeto que se va a instanciar, por ejemplo
si el bean va a implementar la interfaz Runnable, se indica type=”Runnable”.
Para acceder a las propiedades del bean se usan las siguientes etiquetas:
<jsp:getProperty name=”nombreInstancia” property=”propiedad” />
<jsp:setProperty name=”nombreInstancia” property=”propiedad”
value=”valor” />
La primera etiqueta se usa para recuperar el valor de la propiedad indicada en el
parámetro “property”, para la instancia con el nombre indicado en el parámetro “name”.
La segunda etiqueta se usa para establecer el valor de la propiedad indicada a la
derecha del parámetro property con el valor del parámetro value para la instancia del
bean indicada con el parámetro “name”.
Finalmente, como ejemplo, se va a instanciar un bean de la clase FuenteBean,
después se va a modificar la propiedad “codigo” de una instancia del bean FuenteBean,
asignándole primero un valor al código de la fuente y a continuación se recupera dicho
valor:
<jsp:useBean id=”fuente” class=”FuenteBean” />
<jsp:setProperty name=”fuente” property=”codigo” value=”YO”/>
Carlos Cuervo Martínez
5
JavaServer Pages (JSP)
PFC-INX84
<jsp:getProperty name=”fuente” property=”codigo”/>
Comparación con otras tecnologías
Para desarrollar una aplicación como la que se presenta, se podían haber usado
otras tecnologías como Active Server Pages (ASP) o Java Servlets, entre otras.
JSP vs. Servlets
Como las páginas son automáticamente traducidas a Java Servlets, no hay
diferencia entre lo que se puede hacer en una página JSP y un Servlet. Ambas
tecnologías son ejecutadas en una máquina virtual de Java (JVM), eliminando la
necesidad para el servidor web de crear un nuevo proceso cada vez que llega una
petición de una página web, lo que supone una gran ventaja sobre otros mecanismos
como los scripts CGI.
La principal ventaja de JSP sobre los servlets es que JSP sigue una división más
lógica entre la visualización (el HTML generado) y la lógica del lado del servidor, que
indica como es rellenada la página. Es fácil modificar la apariencia de una página JSP
sin tener que modificar ningún código java ni en la página ni en los JavaBean (si se
usan).
JSP vs. ASP
En lo referente a sus características, JSP y ASP son muy similares. Ambos crean
páginas web dinámicamente desde páginas HTML marcadas con unas etiquetas
especiales. Ambas soportan la inclusión de código directamente en la página, así como
el uso de componentes encapsulados: componentes COM en ASP y JavaBeans en JSP.
La mayor diferencia entre las dos tecnologías es la compatibilidad de
plataforma. ASP está únicamente disponible para Windows, a través de Microsoft's IIS
Web Server. JSP está disponible para cualquier servidor web y cualquier plataforma con
soporte para Java Servlets. Además, el motor JSP está escrito completamente en Java.
Otra diferencia es que las páginas JSP se compilan la primera vez que son
solicitadas mientras que las siguientes solicitudes se cargan más rápidamente debido a
que quedan residentes en la memoria del servidor. Por el contrario, en ASP las páginas
tienen que ser traducidas por cada solicitud. Esta contrapartida se ve compensada con el
hecho de que la mayoría de las máquinas virtuales de Java son todavía más lentas que el
código nativo, en el cual está escrito el motor de ASP. Con nuevas y más rápidas
máquinas virtuales de Java, JSP podrá ser más rápido que ASP en conjunto.
Carlos Cuervo Martínez
6
Descargar