13

Click here to load reader

20010703 Introducción a JSP y WML

Embed Size (px)

DESCRIPTION

Artículo publicado en el WMLClub en 2001 sobre la creación de páginas WML usando JSPs, para el desarrollo de aplicaciones WAP

Citation preview

Page 1: 20010703 Introducción a JSP y WML

1

Publicado en el WMLClub en Enero de 2001

JSP y WML

Por Santiago Márquez Solís

INTRODUCCION A JSP Y WML

Continuando con el estudio de la creación de páginas WML dinámicas y dejando de

lado por un momento la serie sobre los distintos gateways que comenzamos con el

gateway de Ericsson, iniciamos el análisis de una tecnología que esta muy de moda en

estos momentos debido fundamentalmente a su potencia y flexibilidad en el desarrollo

de páginas web dinámicas. Como suele suceder si es bueno para el desarrollo de páginas

web en general porqué no vamos a utilizarlo nosotros en nuestros proyectos y porqué no

vamos a hacer uso de las ventajas que nos reporta máxime si de lo que estamos

hablando viene avalado por una de las mayores empresas de software y hardware que

existen actualmente a nivel mundial como es Sun Microsystems, de qué tecnología

estamos hablando os preguntareis algunos, pues ni más ni menos que de JSP o Java

Server Pages. En este artículo vamos a ver los elementos fundamentales que constituyen

las páginas JSP así como sus características básicas, veremos también que ventajas nos

aportan con respecto a su más directo competidor: las páginas ASP (Active Server

Pages) de Microsoft a las cuales también dedicamos unas líneas en otro artículo y que

podéis consultar en la siguiente dirección:

http://wmlclub.com/articulos/programaaspywml.htm

Otro aspecto que también analizaremos será su integración con otro elemento muy

importante dentro de la actualmente llamada plataforma Java 2 como son los servlets y a

los cuales ya dedicamos un artículo completo no hace mucho tiempo y al cual os remito

antes de iniciar vuestro viaje por el mundo de JSP ya que aunque no es necesario saber

mucho sobre servlets para empezar a programar en JSP si es recomendable conocer al

menos las ideas básicas que hay debajo de ellos para que todo lo que digamos sobre JSP

en referencia a los servlets no resulte confuso. Si queréis acceder a este artículo podéis

hacerlo desde la siguiente dirección del club:

http://wmlclub.com/articulos/servletsywml.htm

Y sin más preámbulos comencemos.

1.- INTRODUCCIÓN A JSP

Las páginas JSP o Java Server Pages es una tecnología desarrollada por Sun

Microsystems como respuesta a la aparición de las páginas ASP (Active Server Pages)

por parte de Microsoft (en la tabla 1 podemos ver las diferencias que existen entre una y

otra tecnología). Una página JSP no es más que una página web normal y corriente que

contiene porciones de código en Java y porciones de código en HTML o en nuestro caso

porciones de código en WML junto con otros elementos que proporcionan información

adicional al terminal en el que la página va a ser visualizada. Actualmente la versión

más reciente que existe sobre JSP es la 1.2 pero se encuentra aun en fase de revisión por

Page 2: 20010703 Introducción a JSP y WML

2

lo que vamos a centrarnos en la versión estable de JSP que es la inmediatamente

anterior la 1.1.

JSP ASP

Servidores web disponibles Internet Information Server

Apache

Netscape

Internet Information Server

Personal Web Server

Plataformas HW Disponible en todas las

plataformas para las que

existe Java

Plataformas compatibles

con Win32

Uso de scripts Uso de JavaScript Uso de VBScript y Jscript

Seguridad Modelo de seguridad de

Java

Modelo de seguridad

basado en la arquitectura de

NT

Acceso a bases de datos A través de JDBC A través de ADO (Active

Data Object)

Personalización de tags Se puede ampliar a través

del uso de librerias

No puede ampliarse

Tabla 1. Diferencias entre JSP y ASP

La tecnología JSP está muy relacionada con otra tecnología que comentábamos al

principio, los servlets, tal es así que cuando nosotros estamos escribiendo una página

JSP debemos de ser conscientes que cuando posteriormente veamos el resultado en

nuestro terminal será debido a que un servlet estará generando dicho resultado. Por

tanto, si recordáis del articulo de los servlets, vimos que si queríamos hacer uso de ellos

necesitábamos de un componente adicional instalado en nuestro servidor web que fuese

capaz de manipular toda la lógica que dichos servlets implementaban, dicho de otro

modo necesitábamos de un motor (engine) de servlets que se integrase de algún modo

con nuestro servidor web a fin de que las peticiones hechas al servidor pudiesen ser

recogidas por el servlet para generar la respuesta adecuada con JSP va a suceder lo

mismo, si queremos crear páginas JSP no nos queda más remedio que instalar junto con

nuestro servidor web un motor adicional que permita la ejecución de este tipo de

páginas. El motor que vimos en aquel artículo sobre servlets, fue el JRun de Allaire y

comentamos en el tutorial que llevaba asociado la manera de instalarlo y configurarlo

para un determinado servidor web y os redirijo a este tutorial si queréis saber más sobre

JRun:

http://wmlclub.com/tutoriales/instjrun.htm

El mayor inconveniente de JRun es que es un producto que requiere del pago de

licencia para hacer uso de él en un entorno de desarrollo normal ya que el número de

usuarios que admite la versión de evaluación es insuficiente para trabajar. Pero también

dijimos que existían otros motores que podíamos utilizar para nuestros desarrollos y

Page 3: 20010703 Introducción a JSP y WML

3

comentamos algo de un proyecto llamado Jakarta cuyo producto más destacado Tomcat

seguía la línea marcada por Java, es decir, la de ser gratuito y en este caso servirnos

totalmente como motor para la ejecución sin que la funcionalidad del mismo se vea por

este hecho disminuida de ninguna manera. Os redirijo a la página sobre Tomcat dentro

del club para aquellos que queráis saber más sobre este programa:

Independientemente del motor que decidáis instalar en vuestro servidor web lo que

siempre sucede cuando se realiza una solicitud para visualizar una página JSP es lo

siguiente: el motor de JSP compila la página JSP que hayamos solicitado y la convierte

en un servlet el cual al ejecutarse será el que genere la respuesta en el terminal. Este

proceso de compilación se realiza siempre y cuando el servlet asociado a la página no

exista o en caso de existir el contenido del fichero JSP no haya cambiado desde que se

creo el servlet, el encargado de generar el fichero .java correspondiente a la página JSP

y que será el fuente para generar el servlet, es un elemento dentro del motor de JSP que

recibe el nombre de contenedor JSP. De este modo posteriores llamadas a la página

JSP no generan nuevas compilaciones y el rendimiento del sistema aumenta

considerablemente, además al estar basado en servlets se pueden aprovechar todas las

características que de estos ya conocemos.

El enlace entre una páginas JSP y su correspondiente servlet se realiza mediante dos

clases contenidas dentro del paquete javax.servlet.jsp (fijaros que es una clase dentro de

un paquete destinado a la manipulación de servlets), estas dos clases son JSPPage y

HttpJspPage que son las clases que nos permitirán crear la interfaz de la JSP compilada

o dicho de otro modo del servlet, el cual a diferencia de un servlet normal de los que ya

vimos los métodos que debe de implementar son los siguientes: jspInit(), jspDestroy y

_jspService(HttpServletResponse,HttpServletRequest), la finalidad de estos métodos es

similar a los de un servlet normal, es decir, inicialización, destrucción y determinación

del tipo de servicio que se llama por parte del cliente, es decir, post, get, etc.

2.- ELEMENTOS BASICOS DE LAS PÁGINAS JSP

Una vez visto las características básicas necesarias para comprender el funcionamiento

de las páginas JSP vamos a continuación a analizar los distintos elementos que podemos

encontrarnos dentro de ellas, para posteriormente ver algunos ejemplos de integración

con WML.

En los siguientes puntos vamos a ir viendo los aspectos más importantes sobre JSP que

debemos conocer antes de poder elaborar nuestra primera página.

2.1.- ALCANCE DE LOS OBJETOS JSP

Antes hemos dicho que una página JSP no es más que un fichero de texto (y cuya

extensión es .jsp) en cuyo interior hacemos uso de determinados elementos para generar

una respuesta en el terminal del cliente, estos elementos en su mayoría son vistos por el

motor de JSP como objetos y como tales objetos tienen un alcance o duración durante la

cual van a ser accesibles. Estos alcances (scope) son de cuatro tipos diferentes.

- De página (page): Los objetos que se declaran a este nivel son solo

accesibles dentro de la página en la cual fueron creados. Las referencias de

Page 4: 20010703 Introducción a JSP y WML

4

los objetos creados con alcance de página se almacenan en otro objeto

denominado pagecontext.

- De petición (request): En este caso los objetos declarados a este nivel son

accesibles por todas las páginas que van a procesar la misma petición

(request). Las referencias creadas sobre estos objetos se almacenan en el

objeto request.

- De sesión (session): Los objetos con alcance de sesión son accesibles por

todas aquellas páginas que están procesando peticiones dentro de la misma

sesión en la cual el objeto fue creado. Las referencias de los objetos creados

se almacenan dentro del objeto session.

- De aplicación (application): Es el nivel más alto en el sentido en que los

objetos creados a este nivel son accesibles por todas las páginas que procesan

peticiones dentro de la misma aplicación. Las referencias se almacenan en el

objeto application

Fijaros que cada uno de los niveles anteriores implica un mayor grado de visibilidad

para los diferentes objetos que creemos, esto es muy importante a tener en cuanta sobre

todo cuando estemos desarrollando páginas JSP que estén compuesta por múltiples

páginas, muchos errores se deben a estar tratando de acceder a objetos que están fueran

del alcance de la ejecución de la página actual.

2.2.- ELEMENTOS DE LAS PAGINAS JSP

Toda página JSP se compone de dos elementos básicos que más adelante describiremos

detenidamente: las directivas (directives) y las acciones (actions). Las directivas se

utilizan para proporcionan información global a la página JSP, es decir, sirven para

establecer determinados valores que son válidos independientemente de las peticiones

que la página reciba, estos valores se utilizan para indicar al motor como debe generar la

página. Las directivas siguen una sintaxis similar a la siguiente:

<%@ nombre de la directiva %>

Por el contrario las acciones dependen de las peticiones que se estén efectuando sobre la

página JSP y en función de estas realizar un proceso u otro como puede ser la creación

de un determinado tipo de objeto, ejecutar otra página JSP, etc. Las acciones van ligadas

a la ejecución de terminadas etiquetas las cuales pueden ser nativas de JSP o por el

contrario creadas por nosotros mismos mediante un mecanismo de extensión de

etiquetas que viene definido dentro de JSP. Las acciones tienen una sintaxis como

sigue:

<etiqueta atributo=”valor”>

Adicionalmente a estos dos tipos de elementos en JSP se incluye como elemento

adicional los elementos de script (script elements) los cuales a su vez se dividen en

declaraciones, scriptlets y expresiones. Las declaraciones se utilizan para declarar

elementos validos en el lenguaje de script y que pueden ser accedidos por otros

elementos de script, tienen una sintaxis similar a la siguiente:

<%! Declaracion %>

Page 5: 20010703 Introducción a JSP y WML

5

Los scriptlets son acciones que se ejecutan como respuesta a una petición y

generalmente es código en Java que se encierra entre los caracteres <% y %>. Por

ejemplo un fragmento de un scriptlet podría ser algo similar a lo siguiente:

<%

out.println(“Hola”);

%>

Este mini-scriptlet lo que haría sería retorna la cadena “Hola” en el terminal del cliente.

Finalmente las expresiones son al igual que sucede en otros lenguajes operaciones que

pueden ser evaluadas y que devuelven un determinado valor, en JSP se utiliza la sintaxis

siguiente para retornar el valor de una expresión:

<%= Expresion %>

Si os fijáis en los ejemplos anteriores todos los elementos que forman parte de JSP se

encierran dentro de los caracteres <% y %>.

2.3.- COMENTARIOS

En JSP existen dos tipos de comentarios que podemos utilizar en nuestras páginas y

que debemos de saber diferenciar. Por un lado tenemos el comentario típico que se

utiliza para documentar el código que vamos escribiendo y que no se envía a los

terminales clientes, este tipo de comentario sigue la siguiente sintaxis:

<%-- comentario %>

Y por otro lado tenemos los comentarios que si son enviados al terminal cliente como

parte de la página y cuya sintaxis es:

<!-- comentario -->

2.4.- DESCRIPCION DE LAS DIRECTIVAS

En este punto vamos a ver que directivas nos proporciona JSP y como podemos

utilizarlas. Antes vimos que una directiva no era más que información para el motor de

JSP para que este en función de los valores de la directiva generase la página de un

modo u otro. En JSP se definen tres tipos diferentes de directivas que debemos conocer:

las directivas de página, las directivas de inclusión de ficheros y la directiva de librería

de etiquetas.

1.- Directiva de página (page directive): Se usa para definir atributos que se

aplican a una página JSP entera así como a cualquier fichero estático que se incluya con

la directivas include" o <jsp:include>. Las directivas page no se aplica sobre ficheros

dinámico incluidos (cuando veamos un poco más adelante la directiva include

explicaremos la diferencia entre un fichero estático y otro dinámico para JSP). La

sintaxis que presenta la directiva page es similar a la siguiente:

Page 6: 20010703 Introducción a JSP y WML

6

<%@ page atributo=”valor” %>

Como normal general de utilización de esta directiva podemos decir que se puede

especificar más de una vez en una página JSP aunque por norma general su situación

siempre suele estar al comienzo del fichero. Existe una regla que debemos conocer y es

que si bien podemos situar varias directivas page a lo largo de una página JSP como ya

hemos dicho, no podemos asignar diferentes valores para el mismo atributo más que

una sola vez, salvo en el caso del atributo import el cual dado que su semántica es

similar al import de java si que se nos deja usarlo (darle distintos valores) para los

ficheros que queramos importar.

Los atributos más importantes que la directiva page permite establecer son los que se

muestran a continuación:

language="java": Define el lenguaje de script usado tanto en los scriptles,

como en las declaraciones y expresiones del fichero JSP y de cualquier fichero

incluido. Actualmente en la especificación 1.0 de JSP el único lenguaje

permitido es Java por lo que este atributo tendrá siempre este valor.

session="true|false": Sirve para indicar la disponibilidad del objeto session

para un cliente. El valor por defecto es true.

buffer="none|8kb|sizekb": Se utiliza para indicar el tamaño del buffer (siempre

en kilobytes) que se utilizará por el objeto out para manejar la salida enviada

desde la página JSP compilada hasta el navegador cliente. El valor por defecto

es 8kb, aunque podemos indicar ningún valor (none) o un valor cualquiera.

import= "{ package.class | package.* }, ...": Con este atributo indicamos una

lista (separada por comas) de uno o más paquetes o clases que el fichero JSP

debería importar. De esta manera las clases importadas pueden ser utilizadas

por los scriptlets, expresiones, declaraciones y etiquetas del fichero JSP.

autoFlush="true|false" : Mediante el autoFlush podemos indicar si la salida

será enviada o no cuando el buffer de salida esté lleno. Por defecto, el valor es

true, con lo que el buffer será descargado, si especificamos false, se lanzará una

excepción cuando el buffer se sobrecargue y que deberemos de tratar.

isThreadSafe="true|false" : Indica si la seguridad de threads (hilos) está

implementada (soportada) en el fichero JSP. Por defecto el valor asociado a este

atributo es el de true lo que significa que el motor puede enviar múltiples

solicitudes concurrentes a la página o dicho de otro modo varios threads pueden

acceder a la página JSP y por lo tanto se hace necesario sincronizar nuestros

métodos para proporcionar seguridad de threads.

info="text" : Este atributo nos permite especificar una cadena de texto que es

incorporada en el página JSP compilada, posteriormente podemos recuperar el

esta cadena con el método getServletInfo() (revisar el artículo sobre servlets que

ya vimos).

Page 7: 20010703 Introducción a JSP y WML

7

contentType="mimeType; charset=characterSet “: Se utiliza para indicar el

tipo de contenido que se envia como respuesta al cliente así como el juego de

caracteres utilizado.

errorPage="Url" : Sirve para indicar un fichero que se encargara de manipular

las excepciones que se produzcan.

isErrorPage="true|false" : Se utiliza para indicar si el fichero JSP va a mostrar

o no una página de error. Si el valor que toma este atributo es true, significa que

podemos usar el objeto exception el cual si recordáis del mundo Java contiene

una referencia a la excepción lanzada. El valor por defecto es false.

2.- Directiva de inclusión de ficheros (include directive): Sirve para incluir

ficheros dentro de la página JSP cuando esta es traducida a un servlet. La sintaxis que

presenta esta directiva es la siguiente:

<%@ include file="url relativa del fichero a incluir" %>

El contenido del fichero incluido puede ser HTML estático, elementos de script, otras

directivas o incluso acciones. Es interesante llegados a este punto hacer una distinción

entre includes estáticos y dinámicos en JSP. Un include estático significa que el texto

del fichero incluido se añade al fichero JSP como si fuera parte del mismo. Por el

contrario un include dinámico siempre actúa sobre la solicitud de llamada al mismo, de

manera que el fichero dinámico se procesa y el resultado es lo que es incluido en la

página desde la que se llama.

3.- Directiva de librería de etiquetas (tablib directive): Mediante este tipo de

directiva se puede ampliar el conjunto de etiquetas que el interprete de JSP es capaz de

entender de manera que la funcionalidad del mismo sea prácticamente ilimitada. La

sintaxis de esta directiva es la siguiente:

<%@ taglib uri=”url” %>

El atributo uri especifica la ruta donde se encuentra el fichero que implementa las

nuevas etiquetas.

2.5.- DESCRIPCION DE LAS ACCIONES

Lo primero que hay que decir sobre las acciones es que hay que tener cuidado con las

mayúsculas y las minúsculas ya que se diferencia entre un tipo y otro de carácter. Las

acciones dijimos que serian el elemento que se encargan de controlar el funcionamiento

del motor JSP y se establecen mediante el siguiente conjunto de etiquetas: jsp:include,

jsp:useBean, jsp:setProperty, jsp:getProperty, jsp:forward y jsp:plugin. Veamos en

detalle el significado de cada acción anterior:

Page 8: 20010703 Introducción a JSP y WML

8

Acción jsp:include: Sirve para insertar ficheros en una página que está siendo

generada en el mismo momento en que la página es solicita y no cuando la

página se transforma en servlet. La síntaxis de esta acción es la siguiente:

<jsp:include page="url" flush="true" />

El atributo page se corresponde con la nueva página a incluir, mientras que

flush siempre debe aparecer como true para indicar que se el vaciado del buffer de

lectura de la nueva página.

Acción jsp:plugin: Esta acción nos permite insertar un elemento OBJECT o

EMBED específico del navegador utilizado aunque en nuestro caso y para WML

no tiene mucho sentido hacer uso de este tipo de acción, por lo menos de

momento.

Acción jsp:forward: Sirve para reenviar la petición a otra página que se

especifica en el único atributo (page) que esta acción contiene. La sintaxis es la

siguiente:

<jsp:forward page="nueva URL" />

Acción jsp:getProperty: Sirve para recuperar el valor de una propiedad de un

bean que ha sido creado con la acción jsp:useBean. Para usar esta acción

debemos indicar el bean a usar (atributo name) y la propiedad que queremos

recuperar (atributo property), la sintaxis es como sigue:

<jsp:getProperty name=”nombre del bean” property=”propiedad a recuperar”/>

Acción jsp:setProperty: Sirve para establecer el valor de una propiedad de un

bean que ha sido creado con la acción jsp:useBean. Para usar esta acción

debemos indicar el bean a usar (atributo name), la propiedad que queremos

establecer (atributo property) y el valor de la misma (atributo value), la sintaxis

es como sigue:

<jsp:setProperty name=”nombre del bean” property=”propiedad a

recuperar” value=”valor”/>

Accion jsp:useBean: Esta acción nos permite cargar y utilizar un JavaBean en

la página JSP. El síntaxis para indicar el Bean a usar:

<jsp:useBean id="name" class="package.class" />

Con la sintaxis anterior lo que estamos haciendo es crear un objeto de la clase

especificada y asociarlo a la variable cuyo id estamos estableciendo. Para establecer y

modificar los valores de las propiedades de los beans podemos hacer uso de

jsp:setproperty y jsp:getproperty.

Page 9: 20010703 Introducción a JSP y WML

9

2.6.- OBJETOS INTEGRADOS EN JSP

Al igual que sucedía en ASP disponemos de una serie de objetos que se encuentran

integrados dentro de JSP y que van a sernos muy útiles para acceder a determinadas

propiedades que de otra manera no tendríamos. Estos objetos los tenéis en la siguiente

tabla así como una pequeña explicación sobre su finalidad.

OBJETO

Request

Se corresponde con el HttpServletRequest asociado con la petición, y nos va a permitir acceder a la

siguiente información: los parámetros que se pasan con la petición, para ello haremos uso del método

getParameter,, el tipo de petición, es decir, si es un get, un post, etc y las cabeceras HTTP como son las

cookies.

Response Se corresponde con el HttpServletResponse asociado con la respuesta al cliente.

out

Es el PrintWriter usado para envíar la salida al cliente. El uso de out se aplica casi siempre en scriptlets

ya que las expresiones JSP obtienen un lugar en el stream de salida, y por eso raramente se refieren

explícitamente a out.

session. Este es el objeto HttpSession asociado con la petición.

application Se corresponde con el ServletContext obtenido mediante getServletConfig().getContext().

config Este es el objeto ServletConfig para la página.

Tabla 2. Objetos integrados en JSP

3.- EJEMPLOS

Visto los elementos que pueden constituir una página JSP el siguiente punto en que

vamos a detenernos es en ver algunos ejemplos que muestren como se puede integrar

esta tecnología dentro de una aplicación WML.

El primer ejemplo que vamos a desarrollar en JSP va a ser algo tan simple como

mostrar en la pantalla de nuestro terminal el mensaje “Hola Mundo desde JSP”. Para

ello el código que debemos de introducir es el siguiente:

<%@ page contentType="text/vnd.wap.wml" %>

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

<card id="Principal" title="Principal">

<p><b><u>Hola Mundo desde JSP </u></b></p>

</card>

</wml>

Hay varias cosas importantes en el ejemplo anterior que debemos de considerar y que

van a ser una constante por cada programa que desarrollemos. En primer lugar fijaros

que la primera línea de la que consta el programa es una llamada a la directiva page

Page 10: 20010703 Introducción a JSP y WML

10

indicando el tipo de contenido que se va a generar como salida hacia el cliente, fijaros

que estamos indicando que será información de texto asociada a las extensiones .wap,

.wml y .vnd. Si obviamos esta línea obtendremos el clásico error de Content-Type error

que ya muchos de vosotros conocéis. Una vez escrito el código anterior debéis de

grabarlo como fichero de texto con extensión .jsp y un aspecto importante que no debéis

olvidar es que al hacer la llamada al nombre del fichero debemos de diferenciar entre

mayúsculas y minúsculas, ya que de lo contrario el motor de JSP que genera el servlet

dirá que no encuentra el fichero, por ejemplo, si hemos guardado el programa anterior

con el nombre de “uno.jsp” dentro de la ruta de ejemplos de Tomcat en el directorio de

samples en una nueva carpeta llamada wap, la llamada que tendremos que hacer para

poder visualizar la página sería la siguiente:

http://máquina:8080/examples/jsp/wap/uno.jsp

Donde máquina es el nombre del host que alberga la página. Fijaros que se hace una

llamada al puerto 8080 en vez de al puerto 80 que es el puerto Http por excelencia, esto

es así porque estamos haciendo uso de Tomcat y éste por defecto queda esperando

peticiones en este puerto.

El aspecto que presenta el programa anterior ejecutado sobre el UP de Phone es el

siguiente (figura 1):

Figura 1. Primer programa JSP

Page 11: 20010703 Introducción a JSP y WML

11

Veamos otro ejemplo un poco más complejo y que consiste en la representación dentro

de nuestro terminal de la hora del sistema junto con algunos datos sobre la fecha, para

hacer esto tenemos el siguiente código JSP:

<%@ page contentType="text/vnd.wap.wml" %>

<%@ page session="false"%>

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

<card id="Principal" title="Principal">

<jsp:useBean id='clock' scope='page' class='dates.JspCalendar'

type="dates.JspCalendar" />

<p>Dia: <jsp:getProperty name="clock" property="dayOfMonth"/></p>

<p>Año: <jsp:getProperty name="clock" property="year"/></p>

<p>Mes: <jsp:getProperty name="clock" property="month"/></p>

<p>Hora: <jsp:getProperty name="clock" property="time"/></p>

</card>

</wml>

Igual que antes almacenamos este fichero con la extensión .jsp. Si os fijáis en el código

veréis que en este caso estamos haciendo uso del atributo session a parte del atributo

contentType de la directiva page, el objetivo en este caso es que el programa no tenga

acceso al objeto Session que se encuentra disponible desde JSP. Por otro lado, para

poder acceder a los atributos de la fecha y de la hora lo que hacemos es indicar que

vamos a hacer uso de la clase dates.JspCalendar la cual implementa las características

que andamos buscando, para ello tenemos que hacer uso de la acción jsp:useBean

indicando el objeto nuevo que vamos a crear y que queda identificado por el valor

id=’clock’ (cuidado con esto, hacemos uso de las comillas simples y no dobles). Para

acceder a las propiedades del objeto clock que hemos definido hacemos uso de la acción

jsp:getProperty, de manera que el resultado final que obtenemos es el que podéis

apreciar en la figura 2:

Figura 2. Fechas desde JSP

Page 12: 20010703 Introducción a JSP y WML

12

Otro ejemplo más, hasta ahora en los ejemplos anteriores hemos visto la utilización de

algunos elementos importantes que antes habíamos explicado, siguiendo con esto

dijimos que dentro de JSP podíamos acceder a una serie de objetos predefinidos, en el

siguiente ejemplo vamos a ver el uso del objeto request para obtener información sobre

la conexión que estamos efectuando, protocolos, puertos, etc. El código podría ser algo

similar al siguiente:

<%@ page contentType="text/vnd.wap.wml" %>

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"

"http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

<card id="Principal" title="Principal">

<p><strong><u> Objeto Request</u></strong></p>

<p>Tipo de JSP Request: <%= request.getMethod() %></p>

<p>URI del Request: <%= request.getRequestURI() %></p>

<p>Protocolo: <%= request.getProtocol() %></p>

<p>Ruta del Servlet: <%= request.getServletPath() %></p>

<p>Query string: <%= request.getQueryString() %></p>

<p>Longitud del Content: <%= request.getContentLength() %></p>

<p>Content type: <%= request.getContentType() %></p>

<p>Nombre del Servidor: <%= request.getServerName() %></p>

<p>Puerto: <%= request.getServerPort() %></p>

<p>Usuario: <%= request.getRemoteUser() %></p>

<p>Direccion Remota: <%= request.getRemoteAddr() %></p>

<p>Nombre de Host Remoto: <%= request.getRemoteHost() %></p>

<p>User-Agent: <%= request.getHeader("User-Agent") %></p>

</card>

</wml>

Y donde el resultado lo tenemos en la figura 3:

Figura 3. Acceso al objeto Request

Page 13: 20010703 Introducción a JSP y WML

13

CONCLUSIONES

Bien nuestro viaje por el mundo de las páginas JSP toca a su fin, espero que todo lo que

hemos ido viendo en los distintos puntos de este artículo sirva para aclarar vuestras

ideas sobre qué se puede hacer con JSP y cómo hacerlo, también espero que haya

servido de introducción clara para todos vosotros que conociendo el mundo Java y

WML nunca hayáis fundido ambas tecnologías por lo que JSP es una buena manera de

empezar debido a que los resultados obtenidos compensan con creces el esfuerzo de

aprendizaje. Como suelo hacer cuando finalizo un artículo os animo a que hagáis

vuestras propias pruebas e intentéis llevar a JSP hasta el máximo de sus posibilidades ya

que de este modo lograreis los mejores resultados. Y por mi parte nada más nos vemos

en la próxima.

Santiago Márquez Solís