Sunteți pe pagina 1din 30

Introduccin La tecnologa JSP es una manera sencilla de implementar toda la potencia de Java en aplicaciones WEB.

Como su nombre indica, Java Server Pages, pginas de servidor en Java, o sea, pginas que cuando son llamadas ejecutan pgina Java en el lado del servidor y nos devuelven una respuesta en funcin de la ejecucin de las mismas. Las pginas JSP estn basadas en la tecnologa de servlets, sin embargo la programacin de las mismas es bastante mas sencilla que un servlet, ya que trabajamos directamente sobre la pgina web que vamos a devolver al cliente. Cuando se crea una pgina JSP, la primera vez que se a la misma, esta se traduce a un Servlet, crea el pgina del mismo y lo compila, debido a esto la primera vez que accedemos a la pgina JSP, esta tarda un rato en ser cargada, pero el resto de accesos son mucho mas rpidos debido a que el servlet ya esta creado. Para poder crear pginas JSP el servidor WEB que se utilice debe ser compatible con JSP, para el curso utilizaremos el Java Web Server (JSWDK), lo podis bajar directamente desde http://java.sun.com o copiarlo del cd de utilidades del curso.

Instalacin del Java Web Server 2.0 en Windows NT Una vez descargado el fichero de instalacin (jwsr2_0-win-try-gl.exe), arrancamos la misma. Cuando finalice podemos arrancar el servidor ejecutando httpd en el directorio \bin de la instalacin del Java web server. Hay que tener en cuenta que el JSWDK no incluye el JDK para la compilacin de las pginas JSP , por lo que tambin tenemos que instalar el JDK. Tambin tenemos que agregar al classpath la librera servlet.jar que se encuentra en el directorio \lib de la instalacin del JSWDK. SET CLASSPATH=c:\DIRECTORIO JSWDK\LIB\servlet.jar;%CLASSPATH% . Puede ocurrir que siga dando un error como que no encuentra una determinada librera , para solucionarlo entraremos en startserver.bat y modificaremos la lnea donde aparece JAVAHOME y pondremos el camino al \bin de JDK. De esta manera ya tenemos todo lo que nos hace falta para comenzar a escribir pginas JSP. Las pginas HTML y JSP las almacenaremos en el directorio \public_HTML de la instalacin del JSWDK. Para probar que funciona todo correctamente, arrancar el servidor web y poned: http://localhost:8080/, esto nos mostrar la confirmacin de que el servidor ha sido instalado correctamente. Las pginas que se desarrollen debern ir dentro del directorio WEBPAGES, dentro de la carpeta que se quiera. Por defecto, la pgina que se carga es </path/de/jswdk> /webpages/index.HTML Instalacin del Java Web Server 1.0.1 en Windows 98 La descarga del servidor se realiza en formato zip, para realizar su instalacin lo descomprimimos en el directorio que queramos, eso si, manteniendo su estructura de directorios. Como el otro servidor, este no tiene JDK implementado en su instalacin, por lo cual deberemos instalarlo.

Una vez instalados ambos programas, deberemos cambiar el classpath de nuestro equipo, as pues pondremos lo siguiente: SET CLASSPATH=C:\jdk1.2.2\lib\tools.jar;C:\jswdk1.0.1\lib\servlet.jar;%CLASSPATH% El tools.jar contiene las clases bsicas del jdk, y el servlet.jar las clases necesarias para la compilacin y ejecucin de servlets. Una vez realizadas todas estas operaciones, arrancamos el servidor llamando a startserver.bat, en el directorio de jwsdk, para pararlo stopserver.bat. Para probar que hemos realizado bien las operaciones anteriores, arrancaremos nuestro navegador y pondremos: http://localhost:8080 , esto nos sacara una pgina con documentacin sobre el jwsdk. Los directorios donde pondremos las pginas JSP es el \webpages de la instalacin del JWSDK. Y si creamos Servlets los pondremos en \examples\Webinf\servlets.

Tema 1. CONCEPTOS BSICOS DE JSP JSP es una tecnologa poderosa utilizada para generar HTML de forma

dinmica a peticin del usuario. El motor de JSP (que es un servlet) estar en un servidor que recibir peticiones del usuario. Estas peticiones llegarn del cliente, se analizarn y el servidor dar la respuesta adecuada. Para realizar este simple proceso los pasos que se siguen son: 1 El cliente enva una peticin de pgina 2 El motor de JSP compila la pgina en un servlet 3 El servlet generado se compila y se carga 4 El servlet generado se encarga de analizar la peticin y generar una respuesta. Las pgina Java Server Pages tienen de extensin .jsp, que es la extensin que va a reconocer el servidor. El servidor realiza el proceso anterior siempre que una pagina sea nueva o haya sido modificada. Si no es as y ya ha sido solicitada previamente, invoca el servlet que debe de estar generado. Componentes de JSP Los componentes que pueden formar una pgina jsp son : DIRECTIVAS Las directivas de JSP proporcionan informacin global a la pgina JSP, pueden contener una serie de parejas tipo atributo-valor. Estas directivas, no son obligatorias, ya que estn definidas por defecto, slo se utilizarn en el caso de que se quiera modificar alguno de los valores establecidos. La estructura que tienen estas directivas es : <%@ directiva {atributo=valor} %>

Existen 3 directivas definidas : include page taglib

include Esta directiva se usa para incluir un fichero dentro de la propia pgina JSP que se est construyendo. Se pueden aadir pginas JSP, HTML o ficheros de texto, incluso ficheros con pgina Java. Sobre todo hay que tener cuidado que los ficheros de texto que anexemos no incluyan las etiquetas <HTML>, </HTML>, <BODY>, o </BODY>, ya que podran confundirse con las propias de nuestra pgina JSP. Hay dos tipos de ficheros a incluir: -Esttico : Es un fichero que es analizado y su contenido es anexado a la pgina JSP resultante. -Dinmico: La pgina JSP realiza una solicitud a la URL indicada que enva de vuelta un resultado que es anexado a la pgina JSP. Sntaxis de la Directiva include La manera de realizar un include en una posicin especifica de una pgina JSP es: <%@ include file="URL" %> page Esta directiva se usa para definir las propiedades de la pgina JSP que estemos realizando. Esta directiva la podemos usar varias veces a lo largo de la pgina JSP, pero solo podemos asignar el valor de un atributo una vez por cada uno excepto para el atributo import este es similar al import que usamos cuando hacemos programas en java.

La directiva page la podemos poner en cualquier sitio de la pgina JSP, ya que su valor se aplicar a toda la pgina. Sntaxis de la Directiva page Aqu podemos ver la sintaxis de la directiva page. Los valores por defecto se muestran en negrita. Los corchetes ([...]) indican un trmino opcional. La barra vertical (|) proporciona un clusula or, eleccin ente varios valores. <%@ page [ language="java"] [ extends="package.class"] [ import= "{ package.class|package.*}, ..." ] [ session="true|false"] [ buffer="none|8kb|sizekb"] [ autoFlush="true|false"] [ isThreadSafe="true|false"] [ info="text"] [ errorPage="URLrelativa"] [ contentTYPE="mimeType[ ;charset=characterSet]" | "text/HTML; charset=ISO-8859-1"] [ isErrorPage="true|false"]
%>

Definicin de los atributos de la Directiva Page language="java" Este atributo define el lenguaje de script usado en los scriptles, declaraciones y expresiones en la pgina JSP y en cualquier fichero incluido. En JSP 1.0 el nico lenguaje permitido es Java. extends="package.class" Este atributo especifica un nombre totalmente cualificado de una superclase que ser extendida por la clase Java en la pgina JSP. Sun recomienda que usemos este atributo con cuidado, ya puede limitar la habilidad del motor del JSP a proporcionar la superclase especializada que mejora la calidad del fichero compilado. import= "{ package.class | package.* }, ..." Esta lista especifica una lista separada por comas de uno o ms paquetes o clases que la pgina JSP debera importar. Las clases de los paquetes se ponen a disposicin de los scriptlets, expresiones, declaraciones y etiquetas dentro de la pgina JSP. Como cabra esperar, el atributo import debe aparecer antes de cualquier etiqueta que refiera la clase importada. Para importar varios paquetes, podemos usar una lista separada por comas, ms de una directiva import o una combinacin de ambas. session="true|false" Todo cliente debe unirse a una sesin HTTP para poder usar una pgina JSP. Si el valor es true, el objeto session se refiere a la sesin actual o a una nueva sesin. Si el valor es false, no podemos utilizar el objeto session en la pgina JSP. El valor por defecto es true. buffer="none|8kb|sizekb" Este atributo especifica el tamao del buffer en kilobytes que ser usado por el objeto out para manejar la salida enviada desde la pgina JSP compilada hasta el navegador cliente. El valor por defecto es 8kb.

autoFlush="true|false" Este atributo especifica si la salida sera enviada o no cuando el buffer est lleno. Por defecto, el valor es true, el buffer ser descargado. Si especificamos false, se lanzar una excepcin cuando el buffer se sobrecargue. isThreadSafe="true|false" Este atributo especifica si la seguridad de threads est implementada en la pgina JSP, es decir, indica que soporta varios hilos de ejecucin a la vez. El valor por defecto, true, significa que el motor puede enviar mltiples solicitudes concurrentes a la pgina. Si usamos el valor por defecto, varios threads pueden acceder a la pgina JSP. Por lo tanto, debemos sincronizar nuestros mtodos para proporcionar seguridad de threads. Con false, el motor JSP no enva solicitudes concurrentes a la pgina JSP. Probablemente no querremos forzar esta restriccin en servidores de gran volumen porque puede daar la habilidad del servidor de enviar nuestra pgina JSP a mltiples clientes. info="text" Este atributo nos permite especificar una cadena de texto que es incorporada en el pgina JSP compilada. Podemos recuperar el string ms tarde con el mtodo getServletInfo(). Se utiliza para aadir algo de informacin al sevlet. errorPage="URLrelativa" Este atributo especifica un path a una pgina JSP al que esta pgina JSP enva excepciones. Esta pgina de error que se incluye en el path ser la que se mostrar cuando se produzca una excepcin. Si el path empieza con una "/", el path es relativo al directorio raz de documentos de la aplicacin por el servidor Web. Si no, el path es relativo al fichero JSP actual.

isErrorPage="true|false" Este atributo especifica si la pgina JSP es una pgina de error. Si es true, podemos usar el objeto exception, que contiene una referencia a la excepcin lanzada, en la pgina JSP. Si es false (el valor por defecto), significa que no podemos usar el objeto exception en la pgina JSP. contentType="mimeType [ ; charset=characterSet ]" | "text/html;charset=ISO8859-1" Este atributo especifica el tipo MIME y la codificacin de caracteres que use la pgina JSP cuando se enva la respuesta al cliente. Podemos usar cualquier tipo MIME o conjunto de caracteres que sean vlidos para el motor JSP. El tipo MIME por defecto es text/html y el conjunto de caracteres por defecto es ISO-8859JSP y es resuelto taglib Esta directiva sirve para indicar que en la pgina se van a utilizar directivas definidas por el usuario y qu prefijo (etiqueta) es el que van a utilizar . Sintaxis de la directiva taglib <%@ taglib uri = direccin prefix = nombre de la etiqueta%>

SCRIPTS Los Scripts JSP permiten insertar pgina java en el servlet resultante de la compilacin de la pgina JSP, hay tres formas: 1. 2. 3. Expresiones que se evalan y se insertan en la salida de la web resultante, <%= expresin %> Scriptlets: Es pgina java que se introducira en el mtodo service del servlet, <% cdigo %> Declaraciones: Es la manera de declarar variables globales para todo el servlet, <%! cdigo> Expresiones Se usan para mandar valores directamente a la pgina web resultante de la JSP, la expresin es ejecutada, se convierte a una cadena de caracteres e insertada en la pgina generada (dentro del objeto out JspWriter). La sintaxis es: <%= expresin %> En las expresiones podemos usar gran cantidad de variables predefinidas (objetos implcitos), las mas usados son: request, de la clase HttpServletrequest response, de la clase HttpServletresponse session, de la clase HttpSession que esta asociada al request, si es que trabajamos con session out, se trata de una clase PrintWriter usada para imprimir directamente en la pgina resultante.

Ejemplo <HTML> <BODY> <%! String nombre = new String(Enrique); %> <%! public String getNombre() {return nombre;} %> Hola <B><%=getNombre() %></B> </BODY> </HTML> Scriplets Si lo que queremos hacer es algo mas complejo que una expresin, es decir crear un cdigo java complejo e insertarlo en el servlet resultante de la compilacin de la pgina JSP usaremos Scriptlets, la manera de insertar este cdigo es: <% cdigo a incluir %> Con los Scriptlets tambin podemos escribir en la pgina resultante sin usar las expresiones, la manera de hacerlo es usar la variable out con su mtodo println: <% out.println("Salida a la pgina");%> Los scriptlets ofrecen la posibilidad de ser combinados fcilmente con cdigo HTML, ya que el mismo es como si se metiera dentro de un out.println por eso es lo mismo: <% if(condicion)%> Condicion 1 <%else%> Condicion 2 que: <% if(condicion) out.println("Condicion 1");else out.println("Condicion 2"); %>

Declaraciones Las declaraciones nos permiten la declaracin de mtodos o variables en el cuerpo principal del servlet resultante, es decir, estos mtodos y variables no se crearan en el mtodo service que procesa la peticin. Su sintaxis es: <%! Declaracin %> Las declaraciones no producen salida, y su uso mas comn es para la declaracin de variables que no queremos que cambien desde la compilacin de la pgina JSP, como por ejemplo pudiera ser un contador. <%! int contador=0; %> <% contador++; %> o tambin la declaracin de una funcin <%! public String getNombre() {return Nombre;}%> De esta manera la variable contador aumentara su valor en una unidad cada vez que la pgina fuese solicitada, el valor del contador se inicializara a 0 cada vez que se arranque el servidor o se modifique la clase.

OBJETOS IMPLCITOS Hay una serie de objetos propios de las pginas JSP a las que se puede acceder directamente, ya que estn definidos en el servlet resultante . Cada uno de los objetos implcitos tiene una clase o interface definida en JDK o JSDK. Response: Este objeto es el HttpServletresponse del Servlet y que Request : Este objeto es el HttpServletrequest del Servlet, de esta

esta asociado a la respuesta que la pgina JSP dar al cliente. manera podemos tratar los parmetros de la peticin realizada a la pgina JSP, las cabeceras y el tipo de peticin. Nos permite recoger los parmetros de la peticin con getParameter. <% request.getParameter(Nombre) %> out: Es el PrintWriter que nos sirve para escribir en la respuesta que

le daremos al cliente, es decir a la pgina resultante de la llamada a la pgina JSP. Sin embargo este PrintWriter no es uno normal, sino que tiene buffer y es llamado JSPWriter. Podemos ajustar el tamao del buffer o desactivarlo usando la directiva page: <%@page buffer=["none|8kb|sizekb"]%>. session: Es el HttpSession asociado a la peticin. Las sesiones se

crean automticamente, por eso este objeto siempre existe a no ser que con la directiva page se desactive. Se utilizan para guardar variables de peticiones de clientes. Para guardar un valor en session : <% session.setAttribute(Nombre,valor) %> Para recuperarlo : <% session.getArttribute(Nombre) %> Ejemplo:

<% Integer contador = (Integer)session.getAttribute(Contador); if (contador == null) contador = new Integer(1); else contador = new Integer (contador.intValue()+1); session.setAttribute(Contador,contador); %> application: Este es el ServletContext obtenido mediante

getServletConfig().getContext(). Se utiliza para compartir informacin entre los distintos JSP y servlets. Para guardar un valor en application : <% application.setAttribute(Nombre,valor) %> Para recuperarlo : <% application.getArttribute(Nombre) %> config: Este es el objeto ServletConfig para esta pgina. PageContext: Esto representa una clase llamada PageContext que sirve para encapsular caractersticas especificas del servidor, el significado de esto es que si accedemos a propiedades especificar del servidor mediante estas variables, entonces nuestro cdigo funcionar en la mayora de los motores JSP. Los mtodos ms utilizados son getServletContext(), getServletConfig(), getSession() y getOut(). de error. page: Es lo mismo que this en cualquier otra clase de java.(Hace exception : Representa el error capturado en la llamada a una pgina referencia a la pgina actual)

ACCIONES Encapsulan una serie de tareas comunes, crean o actan sobre objetos, normalmente javabeans. Las acciones sirven para controlar el motor de servlets del servidor mediante construcciones de sintaxis XML. Son las siguientes: - jsp:include - Incluye un fichero en el momento de peticin de esta pgina. La sintaxis es: <jsp:include page="URL" flush="true" /> <jsp:include page =URL flush = true> {<jsp:param/>} </jsp:include> Donde los atributos son : Page : Representa la pgina a ser incluida. Flush : De carcter booleano, indica si el buffer se vuelca solo o hace falta provocar un flush(volcado). No es igual que la directiva include, que como pudimos ver insertaba el fichero cuando se generaba el servlet despus de realizar la primera peticin a la pgina JSP, lo que hace esta accin es insertar el fichero en el momento que la pgina es solicitada. El problema de esta accin es que se pierde algo de velocidad, la pgina que vamos a cargar no puede tener cdigo JSP. Ejemplo: <HTML> <HEAD> <TITLE>Lo mas nuevo</TITLE> <LINK REL=STYLESHEET HREF="miestilo.css" TYPE="text/css"> </HEAD> <BODY BGCOLOR="#FDF5E6" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"> <CENTER> <TABLE BORDER=5 BGCOLOR="#EF8429">

<TR><TH CLASS="TITLE"> Lo mas nuevo...</TABLE> </CENTER> <P> Aqu tenemos las ultimas 4 noticias: <OL> <LI><jsp:include page="noticia1.HTML" flush="true"/> <LI><jsp:include page="noticia2.HTML" flush="true"/> <LI><jsp:include page="noticia3.HTML" flush="true"/> <LI><jsp:include page="noticia4.HTML" flush="true"/> </OL> </BODY> </HTML> - jsp:forward: Esta accin permite reenviar la peticin a otra pgina. Tiene un slo atributo, page, que debera consistir en una URL relativa. Este podra ser un valor esttico, o podra ser calculado en el momento de la peticin. Sintaxis : <jsp:forward page="URL" /> Ej: <jsp:forward page="<%= Expresion Java %>" /> Si se quieren enviar parmetros , se utiliza la accin <jsp:param> <jsp:forward page="URL" > {<jsp:param/>} </jsp:forward> -jsp:plugin:Esta accin nos permite insertar un elemento OBJECT o EMBED especfico del navegador para especificar que el navegador debera ejecutar un applet usando el Plug-in Java. Sintaxis : <jsp:plugin type =tipo de plugin code=Fichero.class codebase=URL relativa/> Si se quieren enviar componentes al applet o javabean, la sintaxis ser : <jsp:plugin type =tipo de plugin code=Fichero.class codebase=URL relativa> {<jsp:param/>} </jsp:plugin> Los atributos de esta accin son : type : Indica el tipo de plugin, applet o javabean

code : Fichero .class del plugin codebase : Direccin relativa del fichero .classs - jsp:useBean : Se asocia con una instanciacin de un JavaBean definido con un mbito y un id. Es decir, esto es lo que en java sera una creacin de un objeto instanciando una clase. La accin intenta buscar un objeto con un id y un mbito como el definido, si no lo encuentra, lo intenta crear. Tambin se puede utilizar para darle un nombre a un objeto definido en otra pgina, para ello se utiliza el atributo type. La sintaxis es la siguiente: <jsp:useBean id="nombre" class="clase.class" /> Existe una segunda manera que indica que el BODY solo se ejecutara la primera vez que el bean sea instanciado, no cuando este ya instanciado, como varias pginas JSP pueden compartir Beans, de hay que la instanciacin solo se realice una vez. <jsp:useBean id="nombre" scope = page | request | session | application resto> Cuerpo del bean </jsp:usebean> donde resto puede ser cualquiera de las siguientes expresiones: resto ::= class Nombre de la clase | class = Nombre de la clase type = Nombre | type = Nombre class = Nombre de la clase | beanNAME =Nombre del bean type = nombre | type = nombre beanNAME =Nombre del bean | type = Nombre Esto significa que instanciamos un objeto de la clase especificada y lo asociamos a una variable con el nombre especificado por el id. Podemos aadir otro atributo mas que es scope para que ese Bean se asocie con mas de una sola pgina JSP. Una vez que tenemos el bean podemos cambiar sus propiedades usando jsp:setProperty, o usando un scriptlet y llamando al mtodo sobre el objeto que tiene el mismo nombre que el id que le pusimos al bean. La clase especificada por el bean debe estar en el path normal del servidor, no en la parte reservada que obtiene la recarga automtica cuando se

modifican. Por ejemplo, en el Java Web Server, l y todas las clases que usa deben ir en el directorio classes o estar en un fichero JAR en el directorio lib, no en el directorio servlets. Aqu tenemos un ejemplo muy sencillo que carga un bean y selecciona y obtiene un sencillo parmetro String. <HTML> <HEAD> <TITLE>Uso de javaBeans en JSP</TITLE> <LINK REL=STYLESHEET HREF="estilos.css" TYPE="text/css"> </HEAD> <BODY> <CENTER> <TABLE BORDER=5> <TR><TH CLASS="TITLE"> Uso de Beans en JSP </TABLE> </CENTER> <P> <jsp:useBean id="mibean" class="hall.SimpleBean" /> <jsp:setProperty name="test" property="message" value="Hello WWW" /> <H1>Message: <I> <jsp:getProperty name="mibean" property="message" /> </I></H1> </BODY> </HTML> SimpleBean.java Aqu est la pgina fuente usada para el Bean usado en la pgina. package hall; public class SimpleBean { private String message = "Mensaje no especificado"; public String getMessage() { return(message); } public void setMessage(String message) { this.message = message; } }

id : Representa el nombre del objeto que se ha creado con la instanciacin scope : mbito donde puede ser utilizado ese objeto. Indica el contexto en el que el bean estar disponible: page, request, session y application. El valor por defecto es page, que quiere decir que el bean solo estar disponible para la pgina JSP actual. Si es request quiere decir que estar disponible para la peticin actual del cliente almacenada en el objeto Servletrequest. El valor session significa que el bean estar disponible para todas las pginas mientras dure la sesion actual. El valor application significa que el bean estar disponible para las pginas que compartan el ServletContext. class : Nombre de la clase de la que se instancia el objeto. beanName : Da el nombre del bean, como lo suministraramos en el mtodo instantiate de Beans. Esta permitido suministrar un type y un beanName, y omitir el atributo class. type : Define el tipo del objeto instanciado. Si no se especifica, coincide con el nombre de la clase o una de las superclase. - jsp:setProperty - Sirve para asignar una propiedad a un bean. Esto se puede hacer en dos contextos: Podemos usar jsp:setProperty fuera de un jsp:useBean , de esta FORMa se ejecuta el mtodo sin que el bean haya sido instanciado. Ejem: <jsp:useBean id="Nombre" ... /> ... <jsp:setProperty name="Nombre" property="AlgunaPropiedad" ... /> La segunda FORMa es dentro del cuerpo de jsp:useBean de esta FORMa: <jsp:useBean id="Nombre" ... > ... <jsp:setProperty </jsp:useBean> En este caso el jsp:setProperty solo se ejecutara en caso de que el bean sea instanciado, no si exista ya. jsp:setProperty tiene 4 atributos posibles: name="Nombre" property=" AlgunaPropiedad" ... />

name: designa el bean cuya propiedad va a ser usada. Un jsp:useBean debe aparecer antes del elemento jsp:setProperty. property: Indica la propiedad (campo) que vamos a usar. Hay un caso especial, un "*" significa que los parmetros que sean pasados con un nombre igual que una propiedad, sern asignados a dicha propiedad. value: Especifica el valor para la propiedad. Los string se convierten a tipos numricos, boolean, byte o char. No se puede usar param y value juntos. param: Designa el parmetro de la peticin que le pasamos a la propiedad del bean. Si no existe el parmetro no pasa nada, el sistema no hace nada y continua la ejecucin. Ejemplo: <jsp:setProperty name="orderBean" property="numberOfItems" param="numItems" /> Para el bean orderBean, se le pasa a la propiedad numberOfItems el valor que tenga la variable numItems. En caso de que se ponga a la propiedad ni value ni param, entonces habra que pasar parametros que correspondan con nombres de propiedad. Entonces si se pone un setProperty con el "*" el servidor rellenar las propiedades con los parmetros y asociara los que tienen el nombre igual. Aqu tenemos un ejemplo que usa un bean para crear una tabla de nmeros primos. Si hay un parmetro llamado numDigits en los datos de la peticin, se pasa dentro del bean a la propiedad numDigits. Al igual que en numPrimes. <HTML> <HEAD> <TITLE>Uso de JavaBeans en JSP</TITLE> <LINK REL=STYLESHEET HREF="My-Style-Sheet.css" TYPE="text/css"> </HEAD> <BODY> <CENTER> <TABLE BORDER=5> <TR><TH CLASS="TITLE"> Uso de JavaBeans en JSP</TABLE> </CENTER> <P>

<jsp:useBean id="primeTABLE" class="hall.NumberedPrimes" /> <jsp:setProperty name="primeTABLE" property="numDigits" /> <jsp:setProperty name="primeTABLE" property="numPrimes" /> Some <jsp:getProperty name="primeTABLE" property="numDigits" /> digit primes: <jsp:getProperty name="primeTABLE" property="numberedList" /> </BODY> </HTML> En el ejemplo anterior, al no haber ni param ni value, se supone que existen variables en el cdigo con los nombre de numDigits y numPrimes. jsp:getProperty:Este elemento recupera el valor de una propiedad del bean, lo convierte a un String, e inserta el valor en la salida. Los dos atributos requeridos son name, el nombre de un bean referenciado anteriormente mediante jsp:useBean, y property, la propiedad cuyo valor debera ser insertado. Aqu tenemos un ejemplo: <jsp:useBean id="itemBean" ... /> ... <UL> <LI> Numero de Items: <jsp:getProperty name="itemBean" property="numItems" /> <LI>El coste de cada uno: <jsp:getProperty name="itemBean" property="unitCost" /> </UL> EJEMPLOS Primera pgina en JSP Aunque parezca absurda, todos los lenguajes tienen este primer ejemplo y no vamos a ser menos. <HTML> <BODY> <% out.println("Hola Mundo"); %> </BODY> </HTML>
Ejemplo de un JSP que carga un bean y establece/lee una cadena.

BeanTest.jsp <HTML> <HEAD>

<TITLE>Usando JavaBeans en JSP</TITLE> </HEAD> <BODY> <CENTER> <TABLE BORDER=5> <TR><TH> Usando JavaBeans en JSP</TABLE> </CENTER> <P> <jsp:useBean id="test" class="hall.SimpleBean" /> <jsp:setProperty name="test" property="message" value="Hola Mundo /> <H1>Mensaje: <I> <jsp:getProperty name="test" property="message" /> </I></H1> </BODY> </HTML> SimpleBean.java Cdigo para el bean usado package hall; public class SimpleBean { private String message = "No se especific ningun mensaje"; public String getMessage() { return(message); } public void setMessage(String message) { this.message = message; } } Lanzar un error para ver como la pgina errorpage lo captura <HTML> <BODY> <%@page errorPage="errorpage.jsp" %> <% out.println("Hola Mundo"); %>

<% if (true) { throw new Exception("Error de JSP"); } %>

</BODY> </HTML> Utilizacin del mbito de session Este ejemplo solo tiene dos pginas, session.jsp y counter.java . Muestra como utilizar las variables de session para almacenar valores temporales. Pgina session.jsp <%@ page errorPage="errorpage.jsp" %> <HTML> <BODY> <% Integer contador = (Integer)session.getAttribute("Contador"); if (contador == null){ contador = new Integer(1); session.setAttribute("Contador",contador);} else { contador = new Integer(contador.intValue()+1); session.setAttribute("Contador",contador); } out.println("has visitado este sitio "+contador+" veces"); %> </BODY> </HTML> Pgina Counter.java public class Counter { int count = 0; public Counter() {} public int getCount() { count ++; return this.count; } public void setCount(int count) { this.count = count; } } </BODY> </HTML> Mostrar valores a partir de un JavaBean

La pgina FORMulario.jsp llama a Recupera.jsp, y sta introduce los valores en el Bean para recuperarlos ms tarde. La pgina de error a la que hace referencia est al final de todos los ejemplos . Formulario.jsp <HTML> <BODY> <FORM ACTION= "recupera.jsp" METHOD = "post"> <TABLE align= "CENTER" cellspacing = "2" cellpadding = "2" border = "1"> <TR> <TD colspan= "3"> <B>Compaia:</b> <% String Compania = request.getParameter("Compania"); if (Compania != null) {%> <INPUT type = "text" NAME = "Compania" VALUE = "<%=Compania%>" size = "40"> <%} else { %> <INPUT type = "text" NAME = "Compania" size = "40"> <%} %> </TD> <TR> <TD colspan= "3"> <B>Calle :</b> <INPUT type = "text" NAME = "Calle" size = "40"> </TD> </TR> <TR> <TD> <B>Ciudad : </b> <INPUT type = "text" NAME = "Ciudad" size = "20"> </TD> <TD> <B>Provincia</b> <INPUT type = "text" NAME = "Provincia" size = 20> </TD> </TR> <TR> <TD> <INPUT type = "submit" VALUE = "Pulsar"> </TD> </TR> </TABLE> </FORM> </BODY> </HTML>

Cdigo de la pgina Recupera.jsp <%@ page errorPage = "errorpage.jsp" %> <jsp:useBean id = "Comp" scope = "request" class = "Compania.Compania" /> <jsp:setProperty NAME = "Comp" property= "*" /> <HTML> <BODY> <B>Compania:</b><%= Comp.getCompania() %><br> <B>Calle:</b><%= Comp.getCalle() %><br> <B>Ciudad:</b><%= Comp.getCiudad() %><br> <B>Provincia:</b><%= Comp.getProvincia() %><br> </BODY> </HTML> Cdigo del Bean Compania.java package Compania; public class Compania { private String Compa = null; private String Calle = null; private String Ciudad = null; private String Provincia = null; // Constructor public Compania() {} public String getCompania() { return Compa; } public void setCompania(String valor) { Compa = valor; } public String getCalle() { return Calle; } public void setCalle(String valor) { Calle = valor; } public String getCiudad() { return Ciudad; } public void setCiudad(String valor) { Ciudad = valor; }

public String getProvincia() { return Provincia; } public void setProvincia(String valor) { Provincia = valor; } } Carrito de la Compra Ejemplo de Carrito de la compra para JSP. Este ejemplo tiene dos pgina jsp, una pgina de error y un cdigo java. Pgina Carrito.JSP <%@ page errorPage="errorpage.jsp" %> <%@ page import = "java.util.*" %> <jsp:useBean id = "cart" scope = "session" class = "Carrito.Carrito" /> <HTML> <HEAD><title>Contenido del carrito</title></HEAD> <BODY> <CENTER> <TABLE width = "300" border = 1 cellspacing = "0" cellpadding = "2" border = "0"> <CAPTION><B>Contenido del carrito</b></CAPTION> <TR> <TH>Descripcion</th> <TH>Precio</th> <TH>Cantidad</th> </TR> <% Enumeration enum = cart.getEnumeration(); String[] tmpItem; while (enum.hasMoreElements()){ tmpItem = (String[])enum.nextElement(); %> <TR> <TD><%=tmpItem[1] %></TD> <TD align = "CENTER"><%=tmpItem[2] %></TD> </TR> <% } %> </TABLE> </CENTER> <A HREF = "/jsp/LlamaCarrito.jsp">Volver al catalogo</a> </BODY> </HTML>

} Cdigo de la pgina JSP LlamaCarrito.jsp <%@ page errorPage="errorpage.jsp" %> <jsp:useBean id = "cart" scope = "session" class = "Carrito.Carrito" /> <HTML> <HEAD><title>Catalogos de DVD</title></HEAD> <BODY> <% String id = request.getParameter("id"); System.out.println("Entra" + id); if (id != null) { String desc = request.getParameter("desc"); Float precio = new Float(request.getParameter("Precio")); cart.anadirItem(id,desc, precio.floatValue(),1); } System.out.println("Sale"); %> <A HREF = "Carrito.jsp">Cantidad del carrito</a> <%= cart.getNumeroItems() %> <HR> <CENTER><H3>Descripcin</TH><TH>Precio</TH></TR> <FORM ACTION ="LlamaCar.jsp" METHOD = POST> <TD>Feliz Navidad</TD> <TD>1950 pts</TD> <TD><INPUT type = "submit" NAME = "Submit" VALUE = "Aadir"></TD> <INPUT TYPE="hidden" NAME = "id" VALUE = "1"> <INPUT TYPE="hidden" NAME = "desc" VALUE ="Feliz Navidad"> <INPUT TYPE="hidden" NAME = "precio" VALUE ="1950"> </FORM> </TR> <TR> <FORM action ="LlamaCar.jsp" method = "post"> <TD>Feliz Navidad2</TD> <TD>1950 pts</TD> <TD><INPUT type = "submit" NAME = "Submit" VALUE = "Aadir"></TD> <INPUT TYPE="hidden" NAME = "id" VALUE = "2"> <INPUT TYPE="hidden" NAME = "desc" VALUE ="Feliz Navidad2"> <INPUT TYPE="hidden" NAME = "precio" VALUE ="1950"> </FORM> </TR> <TR> <FORM action ="LlamaCarrito.jsp" method = "post">

<TD>Feliz Navidad3</TD> <TD>1950 pts</TD> <TD><INPUT type = "submit" NAME = "Submit" VALUE = "Aadir"></TD> <INPUT TYPE="hidden" NAME = "id" VALUE = "3"> <INPUT TYPE="hidden" NAME = "desc" VALUE ="Feliz Navidad3"> <INPUT TYPE="hidden" NAME = "precio" VALUE ="1950"> </FORM> </TR> <TR> <FORM action ="LlamaCarrito.jsp" method = "post"> <TD>Feliz Navidad4</TD> <TD>1950 pts</TD> <TD><INPUT type = "submit" NAME = "Submit" VALUE = "Aadir"></TD> <INPUT TYPE="hidden" NAME = "id" VALUE = "4"> <INPUT TYPE="hidden" NAME = "desc" VALUE ="Feliz Navidad"> <INPUT TYPE="hidden" NAME = "precio" VALUE ="1950"> </FORM> </TR> <TR> <FORM action ="LlamaCarrito.jsp" method = "post"> <TD>Feliz Navidad5</TD> <TD>1950 pts</TD> <TD><INPUT type = "submit" NAME = "Submit" VALUE = "Aadir"></TD> <INPUT TYPE="hidden" NAME = "id" VALUE = "5"> <INPUT TYPE="hidden" NAME = "desc" VALUE ="Feliz Navidad5"> <INPUT TYPE="hidden" NAME = "precio" VALUE ="1950"> </FORM> </TR> </TABLE> </BODY> </HTML> Cdigo para Carrito.java package Carrito; import java.lang.String; import java.lang.Integer; import java.lang.Float; import java.util.HashTABLE; import java.util.Enumeration; public class Carrito { protected HashTABLE items = new HashTABLE(); // Constructor public Carrito() {} // Mtodo para aadir un item al carrito

public void anadirItem( String itemId, String desc, float precio, int cantidad ) { String[] item = {itemId, desc, Float.toString(precio), Integer.toString(cantidad) }; // Si el articulo existe se suma uno a la cantidad if (items.containsKey(itemId)) { String[] tmpItem = (String[])items.get(itemId); int tmpCant = Integer.parseInt(tmpItem[3]); cantidad += tmpCant; tmpItem[3] = Integer.toString(cantidad); } else { items.put(itemId, item); } }// Fin metodo anadirItem // Metodo para borra un articulo del carrito public void borrarItem(String itemId){ if (items.containsKey(itemId)) { items.remove(itemId); } }// Fin de borrarItem // Metodo para actualizar la cantidad public void actCantidad(String itemId, int cantidad) { if(items.contains(itemId)) { String[] tmpItem =(String[])items.get(itemId); tmpItem[3] = Integer.toString(cantidad); } }// Fin Metodo actCantidad public Enumeration getEnumeration(){ return items.elements(); } // fin getEnumeration //Metodo para calculo del coste public float Coste(){ Enumeration enum = items.elements(); String[] tmpItem; float costeTotal = 0.00f;

while (enum.hasMoreElements()) { tmpItem = (String[])enum.nextElement(); costeTotal += (Integer.parseInt(tmpItem[3])*Float.parseFloat(tmpItem[2])); } return costeTotal; } // Fin del mtodo coste // Recupera el nmero total de elementos en el carrito de la compra public int getNumeroItems(){ Enumeration enum = items.elements(); String[] tmpItem; int numDeItems = 0; while (enum.hasMoreElements()){ tmpItem = (String[])enum.nextElement(); numDeItems += Integer.parseInt(tmpItem[3]); } return numDeItems; }// Fin de getNumeroItems }// Fin clase ShoppingCart

Pgina de error Comn para todos los ejemplos Errorpage.jsp <HTML> <BODY TEXT = RED> <%@ page isErrorPage = "true" %> Error : <%= exception.getMessage() %> </BODY> </HTML>

S-ar putea să vă placă și