You are on page 1of 30

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R.

CU RSO 2 00 3 /20 04 4

13. APNDICE 7. JAVA SER VER PAGES (JSP)


(de http://www.coreservlets.com/, Elements.pdf) documentos 09-JSP-Intro.pdf y 10-JSP-Scripting-

Pgina 296

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.1. INTRODUCCIN
Con servlets es fcil ...
q q q q q q

Leer datos de un formulario Leer las cabeceras de las peticiones HTTP Establecer cdigos de estado y cabeceras de las respuestas HTTP Usar cookies para el seguimiento de sesiones Compartir datos entre servlets Recordar datos entre peticiones Emplear sentencias println para generar HTML Mantener ese cdigo HTML Usar cdigo HTML para la mayor parte de la pgina Sealar el cdigo del servlets con marcas especiales Toda la pgina JSP se traduce a un servlet (una vez), y se invoca a dicho servlet en cada peticin
Pgina 297

Pero es un engorro ...


q q

Consistencia
q q q

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

Ejemplo
<!DOCTYPE > <HTML> <HEAD> <TITLE>Confirmacion de la orden</TITLE> </HEAD> <BODY> <H2>Confirmacion de la orden</H2> Gracias por solicitarnos <I><%= request.getParameter("titulo") %></I> </BODY> </HTML>

Pgina 298

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.1.1.

VENT AJA S D E JSP

Los servlets son ms generales, y tienen ventajas tcnicas con respecto a las pginas JSP; sin embargo es preferible el uso de JSPs para:
q q q

Escribir, leer y mantener pginas HTML Emplear herrmientas estndar de desarrollo para HTML Dedicar especficamente algunas personas al trabajo con el diseo HTML mientras otras se dedican a la programacin en Java JSP facilita la separacin entre la parte que genera el contenido (Java) y la que lo muestra (HTML)

De todas maneras, los programadores en JSP siguen necesitando conocer cmo funciona la programacin con servlets Tambin presenta otras ventajas en cuanto a la configuracin 23:
q q q

No hace falta modificar el CLASSPATH No es necesario compilar el cdigo No hace falta el uso de paquetes para evitar los conflictos entre nombres

23

no es palicable a las clases Java ordinarias usadas por las pginas JSP Pgina 299

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4


q

No se necesita un directorio especial para las pginas JSP


? En Tomcat se depositan tanto los documentos HTML como las pginas JSP en el directorio instalacion /webapps/ROOT

No se necesitan URLs especiales (slo extensiones de ficheros) para invocar pginas JSP

Pgina 300

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.1.2.

EJEMPLO

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">


<HTML> <HEAD> <TITLE>Expresiones JSP</TITLE> </HEAD> <BODY> <H2>Expresiones JSP</H2> <UL> <LI>Fecha y hora: <%= new java.util.Date() %></LI> <LI>Servidor: <%= application.getServerInfo() %></LI> <LI>ID de sesion: <%= session.getId() %></LI> <LI>El parametro <CODE>testParam</CODE> de un formulario: <%= request.getParameter("testParam") %></LI> </UL> </BODY> </HTML>

Pgina 301

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.2. ESTRATEGIA JS P
Dos opciones:
q q

DE DISEO: LIM ITAR LA APAR ICIN DE CDIGO J AVA EN LAS PGINAS

Colocar 25 lneas de cdigo Java directamente en la pgina JSP Colocar esas mismas 25 lneas en una clase Java separada, y 1 lnea en la pgina JSP que la invoca Desarrollo: se escribe la clase separada en un entorno Java (editor o IDE), no en un entorno HTML Depuracin: si existen errores sintcticos, se localizan rpidamente en el momento de la compilacin. Pueden usarse sentencias print Testing: podemos escribir una rutina de prueba con un bucle que testee 10.000 veces y volver a aplicarlo tras cada cambio Reutilizacin: puede emplearse la misma clase para diferentes pginas

Por qu la segunda opcin es mucho mejor?


q

Pgina 302

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.3. SINTAXIS BSICA


Texto HTML
q q

<H1>Lo que sea</H1>

Se pasa al cliente, aunque relamente se convierte en cdigo para servlet similar a


out.print(<H1>Lo que sea</H1>);

Comentarios HTML
q q

<!Comentario -->

Idntico que el resto de HTML: se pasa al cliente


<%-- Comentario --%>

Comentarios JSP
q q q

No se enva al cliente Para colocar la combinacin de smbolos <% como salida, usar <\%

Pgina 303

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.4. TIPOS DE ELEMENTOS DE SCRIPTING


Los veremos en detalle ms adelante 1) Expresiones Formato: <%= expresion %> Se evala e inserta en la salida del servlet, obteniendo algo similara a out.print(expresion ) 2) Scriptlets Formato: <% codigo %> Se inserta sin modificaciones en el mtodo _jspService (llamado por service) del servlet 3) Declaraciones Formato: <%! codigo %> Se inserta sin modificaciones en el cuerpo de la clase servlet, fuera de los mtodos existentes

Pgina 304

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.5. EXPRESIONES JSP


Formato
<%= expresin Java %>

Resultado
q

La expresin se evala, se convierte en String y se coloca el resultado en el lugar en el que apareca la expresin dentro de la pgina JSP Es decir, la expresin se coloca dentro de out.print en _jspService Hora y fecha actuales Direccin del ordenador cliente

Ejemplos
q

<%= new java.util.Date() %>


q

<%= request.getRemoteHost() %>

Sintaxis compatible con XML


<jsp:expression>expresin Java</jsp:expression>
q

No se pueden mezclar versiones en la misma pgina. Debe emplearse XML para toda la pgna si se usa jsp:expression

Pgina 305

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.5.1. JSP original

COR R ESPO ND EN CIA EN TR E JSP Y SERV LET

<H1>Un numero aleatorio</H1> <%= Math.random() %>

Cdigo resultante del servlet (parte representativa)


public void _jspService( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(text/html); HttpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println(<H1>Un numero aleatorio</H1>); out.println(Math.random()); ... }

Pgina 306

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.5.2.

EJEMPLO D E EX PR ESION ES JSP

... <BODY> <H2>Expresiones JSP</H2> <UL> <LI>Hora y fecha actuales: <%= new java.util.Date() %></LI> <LI>Servidor: <%= application.getServerInfo() %></LI> <LI>Identificador de sesion: <%= session.getId() %></LI> <LI>El parametro <CODE>test</CODE> del formulario: <%= request.getParameter(test) %></LI> </UL> </BODY></HTML>

Colocar foto del resultado en el navegador

Pgina 307

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.5.3.
request
q

VA RIAB LES PREDEFINID AS

HttpServletRequest (primer argumento de doGet/ doPost) response


q

HttpServletResponse (segundo argumento de doGet/doPost)

out
q

El Writer (de tipo JspWriter pero con buffer) empleado para enviar la salida al cliente
HttpSession asociado con la peticin (salvo que se haya desactivado ediante el atributo

session
q

de sesin en la directiva de la pgina)


application
q

El ServletContext (para compartir datos) tal y como se ha obtenido mediante


getServletContext()

Pgina 308

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.5.4.

COM PA RA CIN ENT R E SERV LETS Y JSP S ( LEER 3 PAR M ET RO S)

public class TresParametros extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { out.println(docType + "<HTML>\n" + "<HEAD><TITLE>Leer 3 parametros</TITLE>\n+ </HEAD>\n<BODY>\n" + "<H1 ALIGN=\"CENTER\">Leer 3 parametros</H1>\n" + "<UL>\n" + " <LI><B>param1</B>: " + request.getParameter("param1") + "</LI>\n" + " <LI><B>param2</B>: " + request.getParameter("param2") + "</LI>\n" + " <LI><B>param3</B>: " + request.getParameter("param3") + "</LI>\n" + "</UL>\n" + "</BODY></HTML>"); } }

Colocar foto del resultado en el navegador

Pgina 309

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

<!DOCTYPE > <HTML> <HEAD> <TITLE>Leer 3 parametros</TITLE> </HEAD> <BODY> <H1>Leer 3 parametros</H1> <UL> <LI><B>param1</B>: <%= request.getParameter("param1") %></LI> <LI><B>param2</B>: <%= request.getParameter("param2") %></LI> <LI><B>param3</B>: <%= request.getParameter("param3") %></LI> </UL> </BODY> </HTML>

Colocar foto del resultado en el navegador

Pgina 310

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.6. SCRIPTLETS JSP


Formato
<% Cdigo Java %>

Resultado
q

El cdigo se inserta sin modificacin en el _jspService del servlet

Ejemplo
<% String queryData = request.getQueryString(); out.println(Datos incorporados en GET: + queryData); %> <% response.setContentType(text/plain); %>

Sintaxis compatible con XML


<jsp:scriptlet>Cdigo Java</jsp:scriptlet>

Pgina 311

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.6.1. JSP original


<H2>foo</H2> <%= bar() %> <%baz(); %>

COR R ESPO ND EN CIA EN TR E JSP Y SERV LET

Cdigo resultante del servlet (parte representativa)


public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); HttpSession session = request.getSession(); JspWriter out = response.getWriter(); out.println("<H2>foo</H2>"); out.println(bar()); baz(); ... }

Pgina 312

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.6.2.

EJEMPLO D E SC RIPTLET

Supngase que se pretende que los usuarios personalicen el color de fondo de una pgina. Qu hay mal en el fragmento de cdigo siguiente?
<BODY BGCOLOR= "<%= request.getParameter("bgColor") %>">

El equivalente sera (aproximadamente):


<!DOCTYPE > <HTML> <HEAD> <TITLE>Prueba de colores</TITLE> </HEAD> <% String bgColor = request.getParameter("bgColor"); if ((bgColor == null) || (bgColor.trim().equals(""))) { bgColor = "WHITE"; } %> <BODY BGCOLOR="<%= bgColor %>"> <H2 ALIGN="CENTER">Prueba de colores con "<%= bgColor %>"</H2> </BODY> </HTML> Colocar fotos de los resultado en el navegador con los valores WHITE, C0C0C0 y papayawhip

Pgina 313

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.6.3.

USO D E SC RIPTLETS PAR A CR EA R PA RT ES C ON DICION A LES EN UN FI CH ER O JSP

Los scriptlets se insertan en el servlet tal y como han sido escritos No precisan ser expresiones Java completas, pero es mucho ms complejo de mantener Ejemplo
<% if (Math.random() < 0.5) { %> Te deseo un dia <B>agradable</B>! <% } else { %> Te deseo un dia <B>para olvidar</B>! <% } %>

Cdigo resultante del servlet (parte representativa)


if (Math.random() < 0.5) { out.println("Te deseo un dia <B>agradable</B>!"); } else { out.println("Te deseo un dia <B>para olvidar</B>!"); }

Pgina 314

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.7. DECLARACIONES JSP


Formato
<%! Cdigo Java %>

Resultado
q

El cdigo se inserta sin modificacin en la definicin de clases del servlet, fuera de los mtodos

Ejemplos
<%! private int loqueSea = 5; %> <%! private void unMetodo(...) {...} %>

Consideraciones de diseo
q q

til para las variables de instancia En el caso de los mtodos suele ser mejor definirlos en una clase Java separada

Sintaxis compatible con XML


<jsp:declaration> Cdigo Java</jsp:declaration>

Pgina 315

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.7.1. JSP original

COR R ESPO ND EN CIA EN TR E JSP Y SERV LET

<H1>Cabeceras</H1> <%! private String cabeceraAleatoria() { return("<H2>" + Math.random() + "</H2>"); } %> <%= cabeceraAleatoria() %> Alternativa: definir cabeceraAleatoria como un mtodo esttico en una clase Java separada

Cdigo resultante del servlet (parte representativa)


public class xxxx implements HttpJspPage { private String cabeceraAleatoria() { return("<H2>" + Math.random() + "</H2> "); } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); HttpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println("<H1>Una Cabecera</H1>");
Pgina 316

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

out.println(cabeceraAleatoria ()); ... } ...

Pgina 317

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.7.2.

EJEMPLO D E DECLAR ACI N JSP

<!DOCTYPE > <HTML> <HEAD> <TITLE>Declaraciones JSP</TITLE> </HEAD> <BODY> <H1>Declaraciones JSP</H1> <%! private int numeroAccesos = 0; %> <H2>Numero de accessos a esta pagina desde el reinicio del servidor: <%= ++numeroAccesos %></H2> </BODY> </HTML>

Pgina 318

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.7.3.
destroy

LOS MTO DO S J SPI NIT Y J SPD ESTR OY

De la misma forma que los servlets, las pginas JSP pueden necesitar usar los mtodos init y Problema: puede que el servlet procedente de la pgina JSP ya use ambos mtodos
q

Para evitar problemas con su sobreescritura, es ilegal usar declaraciones JSP para declarar init o destroy Se garantiza que el servlet obtenido desde la JSP llame a estos mtodos desde init y destroy, pero las versiones estndar de ambas se encuentran vacas, listas para ser sobreescritas

Solucin: usar jspInit y jspDestroy


q

Pgina 319

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.7.4. Problema
q

VA RIAB LES PREDEFINID AS

Las variables predefinidas (request, response, out, session, ...) son locales al mtodo
_jspService

No son accesibles a los mtodos definidos por las declaraciones JSP ni a los de las clases auxiliares

Solucin: pasarlas como argumentos


<%! private void unMetodo(HttpSession s) { hacerAlgo(s); } %> <% unMetodo(session); %>

Pgina 320

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

13.8. EJERCICIOS
Introducimos primero una clase auxiliar que ser aprovechada en los 3 ejercicios
package coreservlets; // Always use packages!! /** Utilidad para generar enteros aleatorios */ public class RanUtilities { /** Un entero aleatorio entre 1 y el rango (inclusives) */ public static int randomInt(int range) { return(1 + ((int)(Math.random() * range))); } public static void main(String[] args) { int range = 10; try { range = Integer.parseInt(args[0]); } catch(Exception e) { // Indice del vector o formato de numero // No hacer nada: el rango ya tiene un valor por defecto } for(int i=0; i<100; i++) { System.out.println(randomInt(range));

}}}

Pgina 321

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

1) Escribir una lista no ordenada de cinco enteros aleatorios entre 1 y 10 Como la estructura de esta pgina viene determinada y usamos una clase auxiliar separada para el mtodo randomInt, slo necesitamos expresiones JSP
<!DOCTYPE > <HTML> <HEAD> <TITLE>Numeros Aleatorios</TITLE> </HEAD> <BODY> <H1>Numeros Aleatorios</H1> <UL> <LI><%= coreservlets.RanUtilities.randomInt(10) <LI><%= coreservlets.RanUtilities.randomInt(10) <LI><%= coreservlets.RanUtilities.randomInt(10) <LI><%= coreservlets.RanUtilities.randomInt(10) <LI><%= coreservlets.RanUtilities.randomInt(10) </UL> </BODY> </HTML>

%></LI> %></LI> %></LI> %></LI> %></LI>

Pgina 322

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

2) Generar una lista conteniendo, al azar, entre 1 y 10 entradas cada una deellas con un entero entre 1 y 10 Como el nmero de entradas en la lista y, por tanto, la estructura de la pgina es dinmica, necesitamos scriptlets JSP
<!DOCTYPE > <HTML> <HEAD> <TITLE>Lista Aleatoria</TITLE> </HEAD> <BODY> <H1>Lista Aleatoria</H1> <UL> <% int numEntradas = coreservlets.RanUtilities.randomInt(10); for(int i=0; i<numEntradas; i++) { out.println("<LI>" + coreservlets.RanUtilities.randomInt(10) + "</LI>"); } %> </UL> </BODY> </HTML>

Pgina 323

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

Segunda versin: evitamos los out.println


<!DOCTYPE > <HTML> <HEAD> <TITLE>Lista Aleatoria (Version 2)</TITLE> </HEAD> <BODY> <H1>Lista Aleatoria (Version 2)</H1> <UL> <% int numEntradas = coreservlets.RanUtilities.randomInt(10); for(int i=0; i<numEntradas; i++) { %> <LI><%= coreservlets.RanUtilities.randomInt(10) %></LI> <% } %> </UL> </BODY> </HTML>

Pgina 324

J R A R V J.. R RA AM M N NG GA A RC C AE ES SC C RI I V ( (D DS SI IC C -- U UP PV V)) P R O G R A M A C I N B S I C A E N E L S E R V I D O R . C U R S O 2 0 0 3 / 2 0 0 PROG RAM AC IN BSIC A EN EL SER VIDO R. CU RSO 2 00 3 /20 04 4

3) Generar un nmero aleatorio en la primera peticin, y a partir de ese momento mostrar el mismo nmero en todas las peticiones hasta el reinicio del servidor La forma natural de conseguir esta persistencia consiste en emplear variables de instancia. Debe usarse declaraciones JSP
<!DOCTYPE > <HTML> <HEAD> <TITLE>Numero Semialeatorio</TITLE> </HEAD> <BODY> <%! private int aleatorio = coreservlets.RanUtilities.randomInt(10); %> <H1> Numero Semialeatorio:<BR><%= aleatorio %></H1> </BODY> </HTML>

Pgina 325

You might also like