Professional Documents
Culture Documents
Guillermo Escobar B.
Las JSP
Son pginas HTML a las que se le inserta cdigo que produce servlets Se usan cuando la parte esttica de la pgina que se debe generar es relativamente importante (la parte que no cambia) Al cargarse una pgina JSP esta se compila, se genera el servlet y se ejecuta Por esto, la primera invocacin a una JSP demora ms que las siguientes
Elementos de scripting
1. Expresiones de la forma <%= expresin %>, son evaluadas e insertadas en el output del servlet 2. Scriptlets de la forma <% code %>, que son insertadas en el mtodo _jspService el cual es el mtodo llamado cuando se contacta a la pgina jsp 3. Declaraciones de la forma <%! code %>, que son insertadas en el cuerpo de la clase del servlet, fuera de todo mtodo, definiendo as variables de instancia
Variables predefinidas
Para simplificar las expresiones, existen variables predefinidas que se pueden usar. Las ms importantes son:
request, el HttpServletRequest response, el HttpServletResponse session, el HttpSession asociada al request out, el PrintWriter usado para mandar output al cliente
Un Ejemplo (extencion.jsp)
<HTML> <HEAD> <TITLE>JSP Expressions</TITLE> </HEAD> <BODY> <H2>JSP Expressions</H2> <UL> <LI>Current time: <%= new java.util.Date() %> <LI>Your hostname: <%= request.getRemoteHost() %> <LI>Your session ID: <%= session.getId() %> <LI>The <CODE>testParam</CODE> form parameter: <%= request.getParameter("testParam") %> </UL> </BODY> </HTML>
Explicaciones
El servidor crea un servlet, lo compila y llama al
mtodo _jspService que contiene todas las sentencias escritas entre <% y %> El texto HTML es mandado al cliente por va out.print(....) Las expresiones se evalan y se insertan en el texto que se manda, por lo cual la expresin
Scriptlets
Si se quiere hacer algo ms complicado que insertar una
simple expresin en el output del servlet se pueden incluir sentencias JAVA en scriptlets que tienen la siguiente estructura:
<%String queryData = request.getQueryString(); out.println("Attached GET data: " + queryData); %>
Los Scriptlets tienene acceso a a las mismas variables definidas automticamente a las que tienen acceso las expresiones En particular, esto tambin se pudo haber logrado con
Attached GET data: <%= request.getQueryString() %>
se traduce en
if (Math.random() < 0.5) { out.println(Have a <B>nice</B> day!); } else { out.println(Have a <B>lousy</B> day! ); }
El equivalente en XML
El cdigo equivalente para declarar scriptles pero siguiendo las reglas XML de <% Code %> es <jsp:scriptlet> Code </jsp:scriptlet> Esta forma de incluir sentencias jsp en la pgina HTML es muy recurrente, ms adelante veremos otros
jsp:setProperty: para definir propiedades a un bean jsp:include: para incluir otros archivos jsp:forward: para redirigir el request jsp:param: para definir parmetros a applets
Declaraciones
No generan output, se usan para eclarar variables que ms tarde sern usadas en expresiones o scriptlets Una declaracin tiene la siguiente forma: <%! Java Code %> Un ejemplo (Ejemplo3.jsp) que cuenta cuantas veces ha sido accesada una pgina desde que se carg:
<%! private int accessCount = 0; %> Accesses to page since server reboot: <%= ++accessCount %>
El equivalente en XML
El cdigo equivalente para declaraciones pero siguiendo las reglas XML de <%! Code %> es <jsp:declaration> Code </jsp:declaration>
Directivas
Afectan la estructura general del servlet generado Existen 3 tipos de directivas: page, include y taglib <%@ directiva atributo="valor" %> <%@ directiva atributo1="valor1" atributo2="valor2" ... atributoN="valorN" %>
Directiva page
Permite controlar la estructura del servlet importando clases, afinando la superclase, definiendo el tipo de contenido a enviar, etc. Esto se hace definiendo uno o ms de los siguientes atributos:
import, contentType, isThreadSafe, session, buffer, autoflush, extends, info, errorPage, isErrorPage y language.
El atributo import
Permite importar clases que no se incluyen automticamente Por ejemplo, se pueden importar las usuales para java (java.util.*) Para las clases definidas por el programador, estas deben estar en un lugar visible. Este lugar depende del servidor En tomcat es el mismo directorio en donde estn los servlets (Ejemplo4.jsp con ServletUtilities.java y LongLivedCookie.java)
<%@ page import=java.util.*" %> <%@ page import="package.class1,..., package.classN" %>
Se puede usar para determinar cualquier tipo de salida que no sea text/html Puede ir en cualquier parte del archivo, a pesar de que en un servlet esto debe ir antes de mandar cualquier cosa. Esto es porque primero la pgina se compila, traduce y luego se ejecuta en el orden adecuado de las directivas
<HTML> <BODY> <H2>The contentType Attribute</H2> <%@ page contentType="text/plain" %> Esto debe verse como texto plano <B>no</B> como HTML. </BODY> </HTML>
Tambien se puede lograr lo mismo escribiendo cdigo HTML para generar una tabla pero poner en la directiva que el contentType es ms-excel (ejemplo6.jsp)
<TABLE BORDER=1> <TR><TH></TH><TH>Apples<TH>Oranges <TR><TH>First Quarter<TD>2307<TD>4706 <TR><TH>Second Quarter<TD>2982<TD>5104 <TR><TH>Third Quarter<TD>3011<TD>5220 <TR><TH>Fourth Quarter<TD>3055<TD>5287 </TABLE>
Incluyendo Applets
Con JSP es posible poner applets en una pagina web pero que son interpretadas por un plugin y no por el browser Esto soluciona muchos problemas de versionamiento, ya que no todos los prowsers son capaces de interpretar applets compilados con una version de Java maor que 1.1.x El elemento jsp:plugin instruye al server para que construya un plugin apropiado para interpretar el objeto.
<jsp:plugin type="applet" code="Clock2.class" codebase="/directorio_relativo" jreversion="1.2" width="160" height="150" > <jsp:fallback> Plugin tag OBJECT or EMBED not supported by browser. </jsp:fallback> </jsp:plugin> Ver ejemplo plugin de tomcat
Java Beans
Usar Beans es una buena manera de complementar JSP cuando se requiere de estructuras de datos (clases) que hagan cosas ms complejas, y separar el cdigo de programacin de estas clases de la JSP Un Bean es una clase con las siguientes caractersticas:
Tiene un constructor que no tiene parmetros No tiene variables pblicas Para cierto subconjunto de variables privadas llamadas propiedades, si la variable es de tipo tipo1 y se llama variable1entonces existe un mtodo programado tipo1 getVariable1() que retorna el valor actual de la propiedad y otro void setVariable1(tipo1 x) que modifica el valor de la variable con el que est dado como parmetro
Obtencin de valores
<jsp:getProperty name=bean1" property=variable1" /> <%= book1.getVariable1() %>
Modificacin valores
<jsp:setProperty name=bean1 property=variable1 value=valor1" /> <% book1.setVariable1(valor1"); %>