Está en la página 1de 29

Java Server Pages (JSP)

Dr. Vctor J. Sosa S.

Java Server Pages (JSP)


Caractersticas El Servidor Java de Pginas (Java Server Pages, JSP) ofrece no slo la independencia de operar en diferentes plataformas y servidores de pginas Web, sino que adems combina el poder de la tecnologa Java en el servidor con la facilidad de visualizar el contenido de las pginas HTML. JSP es una tecnologa que generalmente incluye: Componentes estticos HTML/XML Elementos JSP especiales Fragmentos especiales de cdigo escritos en lenguaje Java llamados scriptlets.

Java Server Pages (JSP)


Caractersticas La especificacin JSP extiende la tecnologa de servlets para reducir la programacin requerida en el desarrollo de pginas Web dinmicas. JSP permite apreciar mejor la distincin entre el contenido de la informacin y su presentacin.

Java Server Pages (JSP)


Ventajas Independencia del servidor Web. Substitucin del API de los servlets por conjuntos de elementos de marcado (tags) y fragmentos de programacin (scriptlets). Altamente recomendable para conseguir el acceso al servidor Web en arquitecturas de partes mltiples (multi-tier). Separacin del contenido esttico del dinmico. Separacin del contenido dinmico del formato de la presentacin.

Java Server Pages (JSP)


Comparacin entre JSP y ASP ASP (Active Server Pages) es una tecnologa similar a JSP pero que difiere tambin en varios aspectos como se indica en la siguiente tabla.

JSP vs. ASP


Propiedad Servidor Java Server Pages La mayora de los servidores ms Conocidos (Apache, Netscape, MS IIS) Cualquiera que corra una mquina virtual Java Java Beans, Enterprise Java Beans y libreras de elementos Java Modelo de seguridad de Java Java Data Base Connectivity Abierto a libreras de elementos Active Server Pages Los servidores de Microsoft (IIS y Personal Web Server) Windows

Plataforma

Modelo de componentes Programacin (scripting) Seguridad Bases de datos Extensibilidad

COM , DCOM , COM +, .NET JavaScript o Visual Basic Script, c# Modelo de seguridad de Windows NT Active Data Objects Ninguna

Java Server Pages (JSP)


Arquitectura de JSP El propsito de JSP es ofrecer una forma ms declarativa y ms guiada por la presentacin que aquella conseguida con los servlets. Las pginas JSP se utilizan en un proceso que involucra dos fases:
1. Una fase de traduccin dinmica a servlets que se realiza nicamente cuando la pgina JSP se crea o modifica. 2. Una fase de contestacin a peticiones que se consigue cuando las clases de los servlets generados se cargan en el contenedor de servlets.

Java Server Pages (JSP)


Arquitectura de JSP En la segunda fase, para atender concurrentemente al procesamiento de peticiones, el servidor lanza un proceso ligero (thread) por cada uno de los clientes el cual corre el mtodo _jspService(). El mtodo _jspService() no puede reemplazarse por otros mtodos definidos por el programador, pero en cambio puede adecuarse su inicializacin y terminacin con los mtodos jspInit() y jspDestroy().

Java Server Pages (JSP)


Arquitectura de JSP

Evento de iniciacin

Servlet

_jspInit() Peticin Respuesta _jspService()

Evento de terminacin

_jspDestroy()

Contenedor de Servlets

Java Server Pages (JSP)


Ejemplo de una Pgina JSP: La siguiente pgina JSP presenta un saludo.
<%-- Esta pgina da un saludo y despedida --%> <HTML> <BODY> <H1>Bienvenido a JSP!</H1> <% out.println("Regrese pronto); %> </BODY> </HTML> N
bienvenido helloworld hellouser response NameHandler

Java Server Pages (JSP)


mbito y Visibilidad de los Objetos JSP Los objetos JSP pueden crearse: implcitamente por directivas JSP explcitamente a travs de acciones excepcionalmente usando fragmentos de cdigo El mbito del objeto establece su duracin desde su creacin hasta su destruccin; su visibilidad indica los lugares de la pgina donde puede usarse el objeto.

Java Server Pages (JSP)


mbito y Visibilidad de Objetos
La siguiente tabla muestra los mbitos que pueden asociarse a los objetos recin creados.

mbito
4 (mayor) 3 2

Categora
Aplicacin Sesin Peticin

Descripcin
Pertenecen a la misma aplicacin Pertenecen a la misma sesin Provienen de la peticin que es Atendida Pertenecen a la pgina en que fueron creados

1 (menor)

Pgina

Java Server Pages (JSP)


Objetos Implcitos Debido a que la tecnologa JSP se basa en aquella de los servlets, existe un conjunto de objetos predefinidos cuyos nombres pueden usarse inmediatamente en JSP.

Java Server Pages (JSP)


Objetos Implcitos
Objeto
request response

Contexto
HttpServletRequest HttpServletResponse

Descripcin
Invocacin del servicio

mbito
Peticin Pgina Pgina

Respuesta a la Peticin Caractersticas de la pgina Dependientes de la implementacin, espacios de nombres y otras facilidades Conserva el estado de la session Contexto del servlet de configuracin Flujo de salida Configuracin del servlet del JSP Pgina que procesa la peticin en curso

pageContext jsp.PageContext

session application out config page

http.HttpSession ServletContext jsp.JspWriter ServletConfig Object

Sesin Aplicacin Pgina Pgina Pgina

Java Server Pages (JSP)


Ejemplo Este ejemplo muestra los cuatro mbitos de los objetos JSP.
<%@page import=java.util.*%> <HTML> <BODY> Servlet <%= config.getServletName() %><br> <% for (int scope = 1; scope <= 4; scope++) { out.println("<H2>Ambito "+scope+"</H2>"); Enumeration e = pageContext.getAttributeNamesInScope(scope); while (e.hasMoreElements()) { out.println(e.nextElement()+<br>); } } %> </BODY> </HTML>

ambitos

Java Server Pages (JSP)


Elementos Bsicos de JSP
La sintaxis de JSP consiste de un conjunto de elementos que se intercalan entre aquellos de HTML o XML.

Elemento
Directiva Declaraciones Expresiones Scriptlets Comentarios

Sintaxis <%@ . . . . . . . . %> <%! . . . . . . . . . . %> <%= . . . . . . . . .. %> <% .. . . . . . . . . .. %> <%-- .. . . . .. . . -- %>

Descripcin
Importar clases o incluir archivos HTML Declarar variables o mtodos Java Evaluacin de expresiones Java Ejecucin de instrucciones Java Texto no procesado

Java Server Pages (JSP)


Directivas Las directivas son instrucciones dirigidas al contenedor de servlets JSP, no al flujo de salida. Las directivas determinan los atributos de la pgina y las dependencias con el contenedor. La directiva de pgina tiene la forma: <%@ page atributos %> donde los atributos pueden ser: language que indica el lenguaje usado en la pgina JSP, import que establece las clases que se van usar extends que indica las clases que sern extendidas include que inserta un archivo HTML session que cuando toma el valor true, permite usar la variable predefinida session en la pgina JSP buffer que establece el tamao del rea temporal de la pgina autoflush que indica si el envo al flujo de salida es inmediato isThreadSafe que establece que a lo ms un proceso est activo a la vez (por omisin, se tienen mltiples procesos concurrentes) errorPage que permite indicar si la pgina se usa para anunciar un error

Java Server Pages (JSP)


Ejemplos de Directivas Las directivas: <%@ page import=java.sql.*,java.util.* %> importa los paquetes java.sql y java.util <%@ page include=sty.css %> inserta los estilos para el documento que estn guardados en el archivo sty.css <%@ page buffer=16k %> establece el tamao del buffer a 16k <%@ page isThreadSafe=true %> establece que hay slo un proceso activo a la vez

Java Server Pages (JSP)


Declaraciones La sintaxis de una declaracin es <%! declaracin %> o, alternativamente, usando los espacios de nombres de XML <jsp:declaration> declaracin </jsp:declaration> Las declaraciones permiten introducir variables y mtodos a nivel de pgina y deben seguir la sintaxis de Java. Las variables declaradas pueden inicializarse y deben estar terminadas por punto y coma. Las declaraciones de mtodos, adems de aquellos usados en la aplicacin, pueden tambin incluir a jspInit() y jspDestroy().

Java Server Pages (JSP)


Ejemplo de Declaracin Cdigo de iniciacin para un contador en una pgina JSP que declara una variable y los mtodos jspInit() y jspDestroy():
<%! int counter;%> <%! public void jspInit() { counter = 0; } public void jspDestroy() { } %>

10

Java Server Pages (JSP)


Expresiones

La sintaxis de una expresin es <%= expresin %> o, alternativamente, usando los espacios de nombres de XML <jsp:expression> expresin </jsp:expression> Las expresiones en JSP permiten que el resultado de la evaluacin de una expresin Java se convierta a una cadena de caracteres que ser incluida en la pgina generada. Las expresiones pueden incluirse en gran variedad de contextos y no deben terminarse por puntos y comas. Ejemplo de Expresiones La siguiente expresin produce un elemento H1 usado para escribir el texto de un encabezado:
<%! int i = 1; %> <H<%=i%>>Java Server Pages</H<%=i>>

Java Server Pages (JSP)


Scriptlets La sintaxis de un scriptlet es <% scriptlet %> o, alternativamente, usando los espacios de nombres de XML <jsp:scriptlet> scriptlet </jsp:scriptlet> Se puede escribir cualquier fragmento de cdigo Java, extendido por elementos HTML y no limitado a una lnea. Ejemplo de Scriptlets: El siguiente scriptlet produce una secuencia de encabezados con tamao decreciente:
<% for (int i=1; i<5; i++) { %> <H<%=i%>>Java Server Pages</H<%=i>> <% } %>

11

Java Server Pages (JSP)


Comentarios Los comentarios JSP usan elementos especiales, distintos de los comentarios de HTML, para que no puedan verse en los documentos enviados al cliente. Los comentarios pueden usarse tambin para bloquear la ejecucin de ciertos fragmentos de la pgina JSP. Ejemplo: La siguiente instruccin no ser ejecutada (ni siquiera ser visible en la pgina enviada al cliente)
<%-- int i = 1; --%>

Java Server Pages (JSP)


Ejemplo de Contador de Accesos: La siguiente pgina JSP muestra un contador de accesos a una pgina.
<%-- Esta pgina da la fecha y hora cuando fue soliciatada as como el nmero de accesos --%> <%@ page import="java.util.*"%> <%! Date loadDate = new Date(); int loadCounter = 1; %> <HTML> <BODY> <H1>Bienvenido!</H1> <H2>Desde <%=loadDate%>, sta pgina ha sido accesada <%=loadCounter%> <% if (loadCounter++ == 1) out.println("vez.<BR>"); else out.println("veces.<BR>"); %> <% out.println("Regrese pronto"); %> </H2> </BODY> </HTML>

contadoryfecha

12

Java Server Pages (JSP)


Ejemplo con Formas: El siguiente ejemplo demuestra como obtener los valores de un formulario.
<%@page import="java.util.*"%> <HTML> <BODY> <%Enumeration fields = request.getParameterNames();%> <TABLE border="1" > <TR><TH>Nombre</TH><TH>Valor</TH></TR> <% while (fields.hasMoreElements()) { %> <TR> <%String field = (String)fields.nextElement();%> <TD align=center><%=field%></TD> <TD align=center> <%=request.getParameter(field)%></TD> </TR> <%}%> </TABLE> </BODY> </HTML>

formulario

programa

Java Server Pages (JSP)


Concurrencia
La directiva page con el atributo isThreadSafe ofrece una forma de evitar los problemas que ocasiona la concurrencia. El problema con este enfoque es que no es escalable, reduciendo considerablemente el desempeo de sistemas con muchos procesos. Una alternativa es usar regiones crticas en scriptlets para sincronizar el acceso a objetos compartidos.
<%@page import=java.util.*%> <% synchronized (application) { Properties list = application.getAttribute(users); list.add(ana,new User(ana)) list.setAttribute(users,list); } %>

13

Java Server Pages (JSP)


Manejo de Excepciones JSP posee un mecanismo apropiado para el manejo de errores que ocurren a tiempo de ejecucin. El atributo errorPage de la directiva page se usa para indicar que la pgina recibe las excepciones lanzadas por algn scriptlet. Adems, el atributo errorPage de la misma directiva indica la pgina JSP a la cual se redirigir el objeto implcito exception (de tipo Throwable) que describe el problema.

Java Server Pages (JSP)


Ejemplo de manejo de excepciones Para manejar errores a tiempo de ejecucin, se puede usar una pgina que indique la naturaleza del error. Dicha pgina debe incluir entre sus directivas la siguiente:
<%@page isErrorPage=false errorPage=Error.jsp%>

la pgina redirige a su vez el objeto exception a la pgina Error.jsp . La pgina Error.jsp debe contener a su vez, la directiva:
<%@page isErrorPage=true %>

Esta indicacin permite acceder al objeto exception en la pgina Error.jsp .

14

Java Server Pages (JSP)


Manejo de Sesiones Por omisin todas las pginas JSP participan en una sesin HTTP. El objeto session (de tipo HttpSession) est disponible para almacenar objetos que persistan a lo largo de la vida de la aplicacin. El atributo session de la directiva page se usa para permitir o negar el acceso al objeto session en la pgina; por omisin, el objeto session es accesible. La directiva <%page session=false%> indica que en la pgina no se usarn sesiones. Una sesin se identifica por un nombre nico de sesin y se almacena en el browser del cliente en forma de cookie; si el browser no maneja cookies, la sesin se mantiene por reescritura del URL. La sesin mantiene referencias a todos los objetos almacenados pero tan pronto como la sesin es invalidada o el plazo de los objetos expira, los objetos se marcan para su recoleccin como basura.

Java Server Pages (JSP)


Manejo de Sesiones No se pueden guardar tipos simples en una sesin, pero se puede guardar cualquier tipo de objeto identificado por una cadena nica de caracteres. El siguiente scriptlet hace al objeto Book pblicamente disponible para todas las pginas y servlets JSP que compartan la misma sesin: <% Book book = new Book(); session.putValue(book,book); %> El objeto book puede recuperarse realizando una coercin para convertirlo al tipo apropiado: <% Book book = (Book)session.getValue(book); %> No hay lmite en el nmero de objetos que se pueden manejar en una sesin, aunque un gran nmero de ellos reducir el rendimiento del sistema. Generalmente, la duracin de una sesin est limitada a 30 minutos, aunque la duracin puede ampliarse regularmente usando el mtodo setMaxIntactiveInterval(int secs).

15

JSP: Ejemplo de Sesiones


<%--session.jsp: Ejemplo de una sesion--%> <HTML> <BODY> <H1>Sesion <%=session.getId()%></H1> <P>La session fue creada el <%=session.getCreationTime()%> <P>Duracion usual de la session:<%=session.getMaxInactiveInterval()%> <P>Reduccin de la duracion de la session a 5 segundos <%session.setMaxInactiveInterval(5);%> <P>Nueva duracion de la session:<%=session.getMaxInactiveInterval()%> <P>Depositar un objeto nuevo <%session.setAttribute("bible",new String("Sacred Bible"));%> <P>Mostrar el objeto depositado:<%=session.getAttribute("bible")%> </BODY> <HTML>

session

JSP: Ejemplo de Sesiones


<%--session1.jsp: Ejemplo de una sesion con invalidacion--%> <HTML> <BODY> Sesion <%= session.getId() %> <% if (session.getAttribute("bible")==null) { session.setAttribute("bible",new String("Sacred Bible")); out.println("<P>Depositar un nuevo libro:" +session.getAttribute("bible")); } else { out.println("<P>Recuperar el libro:" +session.getAttribute("bible")); } %> <FORM TYPE="post" ACTION="session2.jsp"> <INPUT TYPE="submit" NAME="invalidar VALUE="invalidar"> </FORM> <FORM TYPE="post" ACTION="session3.jsp"> <INPUT TYPE="submit" NAME="conservar VALUE="conservar"> </FORM> </BODY> session1 </HTML>

16

JSP: Ejemplo de Sesiones (Cont..)


Los archivos session2.jsp y session3.jsp son llamados por session1.jsp.
<%--session2.jsp: Ejemplo de una sesion con invalidacion--%> <%@page isErrorPage="false errorPage="ErrorPage.jsp"%> <HTML> <BODY> Sesion <%=session.getId()%> <P>Recuperar al libro: <%= session.getValue("bible") %> <P>Invalidar la session <% session.invalidate(); %> <P>Recuperar de nuevo al libro: <%= session.getValue("bible") %> <FORM TYPE="post" ACTION="session1.jsp"> <INPUT TYPE="submit" NAME="submit VALUE="regresar"> </FORM> </BODY> </HTML> <%--session3.jsp--%> <HTML> <BODY> Sesion <%=session.getId()%> <P>Recuperar el libro: <%= session.getValue("bible") %> <FORM TYPE=post ACTION=session1.jsp> <INPUT TYPE=submit NAME=submit VALUE=regresar> </FORM> </BODY> session2 session3 </HTML>

ErrorPage

JSP: Uso de Cookies


Uso de cookies Las cookies ya fueron introducidas en la programacin con servlets; en JSP es igual de simple su programacin. Las cookie se obtienen de la peticin HTTP (objeto request) y se mandan a la respuesta HTTP (objeto response) siempre que el cliente acepte las cookies. Una vez obtenida una cookie de la peticin, sta se puede leer, modificar y alterar su fecha de expiracin (cambiando su edad mxima). Adems, en cualquier momento se puede agregar nuevas cookies a las ya existentes.

17

JSP: Ejemplo de Cookies


<%--Cookies.jsp: Este programa puede comportarse distinto en diferentes browsers--%> <HTML> <BODY> Session <%= session.getId() %> <% Cookie[] cookies = request.getCookies(); for(int i = 0; i < cookies.length; i++) { %> Cookie con nombre: <%= cookies[i].getName() %> <br> Valor: <%= cookies[i].getValue() %><br> Duracin mxima en segundos: <%= cookies[i].getMaxAge() %><br> <% cookies[i].setMaxAge(5); %> Nueva duracin en segundos: <%= cookies[i].getMaxAge() %><br> <% } %> <%! int count = 0; int dcount = 0; %> <% response.addCookie(new Cookie("Bob" + count++,"Dog" + dcount++)); %> </BODY> </HTML>

Cookies

JSP: Acciones comunes


Acciones Comunes Las acciones permiten realizar tareas sofisticadas reduciendo considerablemente la codificacin requerida en Java. Las acciones se manifiestan usando elementos especiales (tags) los cuales promueven la reutilizacin de componentes mejorando el mantenimiento de la aplicacin. Las acciones que se van a analizar son: usar componentes JavaBeans redirigir mensajes encadenar peticiones incluir peticiones

18

JSP: Usar componentes JavaBeans


El modelo de componentes de JSP se basa en la tecnologa JavaBeans que son objetos con un esquema de nombramiento bien definido. Un bean encapsula sus propiedades, como variables privadas, las cuales se pueden leer o modificar usando mtodos pblicos apropiados. Un bean debe identificarse con un nombre con mbito de sesin antes de que pueda usarse; el elemento XML
<jsp:useBean id=bookBean class=com.beans.books scope=session/>

crea una instancia del Bean y lo agrega a la sesin; si se encuentra este elemento en otra pgina, el objeto se recuperar entonces de la sesin.

JSP: Usar componentes JavaBeans


El elemento jsp:useBean tambin puede tener estructura, la cual consiste de un scriptlet que realiza la iniciacin de las propiedades del bean cuando ste se crea.
<jsp:useBean id=bookBean class=com.beans.books scope=session> <% iniciacin de propiedades del bean %> </jsp:useBean>

Una vez declarados los beans, sus propiedades pueden accederse usando el elemento
<jsp:getProperty name=book property=name/>

Para cambiar el valor de una propiedad, se usa el elemento


<jsp:setProperty name=book property=name value=Thinking in Java/>

En el procesamiento de formas es muy conveniente usar las facilidades que brinda JSP para copiar los valores asociados de los campos a los atributos del bean.

19

JSP: Usar componentes JavaBeans


El elemento
<jsp:setProperty name=book property=*/>

copia los valores pero slo cuando los nombres en ambos (los campos de la forma y los atributos del bean) coinciden. Cuando los nombres no coinciden, la correspondencia se debe hacer explcita:
<jsp:setProperty name=book property=propName parameter=parmName/>

JSP: Ejemplo de JavaBeans


El siguiente JSP es un juego para adivinar un nmero.
Copyright (c) 1999 The Apache Software Foundation. All rights reserved. Number Guess Game Written by Jason Hunter, CTO, K&A Software http://www.servlets.com --> <%@ page import = "num.NumberGuessBean" %> <jsp:useBean id="numguess class="num.NumberGuessBean" scope="session"/> <jsp:setProperty name="numguess" property="*"/> <html> <head><title>Number Guess</title></head> <body bgcolor="white"> <font size=4> <% if (numguess.getSuccess()) { %> Congratulations! You got it. And after just <%= numguess.getNumGuesses() %> tries.<p> <% numguess.reset(); %> Care to <a href="numguess.jsp">try again</a>? <% } else if (numguess.getNumGuesses() == 0) { %> Welcome to the Number Guess game.<p>

numguess

20

JSP: Ejemplo de JavaBeans (Cont)


I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="Submit"> </form> <% } else { %> Good guess, but nope. Try <b> <%= numguess.getHint() %></b>. You have made <%= numguess.getNumGuesses() %> guesses.<p> I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="Submit"> </form> <% } %> </font> </body> </html>

JSP: Ejemplo de JavaBeans (Cont)


El siguiente JavaBean se usa en el juego de adivinanza de nmeros.
/* Originally written by Jason Hunter */ package num; import java.util.*; public class NumberGuessBean { int answer; boolean success; String hint; int numGuesses; public NumberGuessBean() { reset(); } public void setGuess(String guess) { numGuesses++; int g; try { g = Integer.parseInt(guess); } catch (NumberFormatException e) { g = -1; } if (g == answer) { success = true; } else if (g == -1) {hint = "a number next time";

NumberGuessBean

21

JSP: Ejemplo de JavaBeans (Cont)


} else if (g < answer) { hint = "higher";} else if (g > answer) { hint = "lower"; } } public boolean getSuccess() { return success; } public String getHint() { return "" + hint; } public int getNumGuesses() { return numGuesses; } public void reset() { answer = Math.abs(new Random().nextInt() % 100) + 1; success = false; numGuesses = 0; } }

JSP: Redirigir mensajes


Una peticin se puede redirigir hacia otra pgina JSP, servlet o pgina HTML esttica pasndole el contexto de la pgina que hace la invocacin. El procesamiento contina hasta el punto en el que ocurre la redireccin para entonces detenerse por completo en esa pgina. El elemento <jsp:forward page=anotherPage.jsp/> redirige el procesamiento a la pgina anotherPage.jsp conservando todo el procesamiento realizado en la pgina actual. Un elemento <jsp:forward> tambin puede tener parmetros para proporcionar valores a la pgina invocada: <jsp:forward page=anotherPage.jsp> <jsp:param name=aName1 value=aValue1/> <jsp:param name=aName2 value=aValue2/> </jsp:forward>

22

JSP: Ejemplo, redirigir mensajes


<html> <!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved. --> <% double freeMem = Runtime.getRuntime().freeMemory(); double totlMem = Runtime.getRuntime().totalMemory(); double percent = freeMem/totlMem; if (percent < 0.5) { %> <jsp:forward page="/jsp/forward/one.jsp"/> <% } else { %> <jsp:forward page="two.html"/> <% } %> </html>

JSP: Ejemplo, redirigir mensajes (Cont.)


<!--one.jsp--> <html> <!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved. --> <body bgcolor="white"> <font color="red"> VM Memory usage < 50%. </html> <!--two.jsp--> <html> <!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved. --> <body bgcolor="white"> <font color="red"> VM Memory usage > 50%. </html>

23

JSP: Incluir pginas


El elemento <jsp:include> puede usarse para redirigir una peticin a cualquier pgina esttica o dinmica que est en el mismo contexto. La llamada tambin puede incluir los beans como parmetros de la peticin. Por ejemplo, el elemento <jsp:include permite tener page=shopingCart.jsp flush=true/> acceso a cualquier bean y al contexto dinmico generado por la pgina invocante; finalmente, el contenido generado se inserta en el lugar del elemento <jsp:include>. La pgina incluida no puede hacer algunas cosas como encabezados HTTP o hacer galletas.

JSP: Ejemplo de incluir pginas


La siguiente pgina inserta la fecha producida por otra.
<html> <!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved. --> <body bgcolor="white"> <font color="red"> <%@ page buffer="5k" autoFlush="false" %> <p>In place evaluation of another JSP which gives you the current time: <%@ include file="foo.jsp" %> <p> <jsp:include page="/jsp/include/foo.html flush="true"/> by including the output of another JSP: <jsp:include page="foo.jsp" flush="true"/> :-) </html> El JSP que produce la hora: <!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved. --> <body bgcolor="white"> <font color="red"> <%= System.currentTimeMillis() %>

24

Ejemplos: JSP y Java Beans


Este ejemplo involucra a dos pginas JSP (alumnos.jsp y verificaalumnos.jsp) , y un Java Bean -clase- (alumnos.java). Lo que hace el ejemplo es mostrar una lista de alumnos que se carga de la base de datos (agendita), y permite registrar nuevos alumnos. Nota: no existe ninguna validacin de que el alumno ya exista, de hecho ni siquiera existe una llave primaria en la tabla. El ejemplo hace uso del JavaBean para manipular la tabla de alumnos, con un scope a nivel de aplicacin. El tipo de base de datos utilizada es MySQL: Tabla Alumnos: nombre: varchar(30) apellido: varchar(30) direccion: varchar(30) telefono: varchar(30)

<html> <head> <title>Alumnos</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <%@ page import="java.sql.*" %>

Ejemplos: JSP y Java Beans


Alumnos.jsp

<jsp:useBean id="alum" class="dcc.alumnos" scope="application" />

</head> <body bgcolor="#FFCCCC"> <div Id="scroll" Style="position:absolute; left:78px; top:50px; width=570; height=420; overflow = auto; border=solid thin #B8D0F0; visibility:visible; z-index:2;; width: 813px; height: 518px"> <p align="center"><strong><font face="Georgia, Times New Roman, Times, serif" color="#000099">Lista de Alumnos</font><font face="Arial" color="#408080" > </font></strong></p> <%

Connection con; String url= "jdbc:mysql://localhost/agendita";


String usuario= "bingo"; String password="holahola"; Statement stmt; ResultSet rs; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); con = DriverManager.getConnection(url,usuario,password); alum.setCn(con); stmt = con.createStatement(); %> <table border="1" cellpadding="0" cellspacing="1" width="100%"> <tr> <td align="center" bgcolor="#0068C0"><font face="Arial" color="#FFFFFF">Nombre</font></td> <td align="center" bgcolor="#0068C0"><font face="Arial" color="#FFFFFF">Apellido</font></td> <td align="center" bgcolor="#0068C0"><font face="Arial" color="#FFFFFF">Direccion</font></td> <td align="center" bgcolor="#0068C0"><font face="Arial" color="#FFFFFF">Telefono</font></td> </tr>

25

<% rs = stmt.executeQuery("Select * from alumnos"); while(rs.next()) {%> <tr> <td bgcolor="#B8D0F0"><small><font face="Arial"><%=rs.getString("nomrbe")%></font></small></td> <td bgcolor="#B8D0F0"><small><font face="Arial"><%=rs.getString("apellido")%></font></small></td> <td bgcolor="#B8D0F0"><small><font face="Arial"><%=rs.getString("direccion")%></font></small></td> <td bgcolor="#B8D0F0"><small><font face="Arial"><%=rs.getString("telefono")%></font></small></td> </tr> <%}%> </table> <% } catch(Exception e) { System.out.println("Error al conectarse: "+e.toString()); }%> <form name="form1" method="post" action="VerificaAlumnos.jsp"> <p align="center"><strong><font face="Georgia, Times New Roman, Times, serif" color="#000099">Registro de Alumnos</font><font face="Arial" color="#408080" > </font></strong></p> <table border="1" cellpadding="0" cellspacing="1" width="100%"> <tr> <td bgcolor="#B8D0F0" width="27%"><small><font face="Arial">Nombre</font></small></td> <td width="73%" align="center" bgcolor="#B8D0F0"><small><font face="Arial"> <input type="text" name="nombre" size="80" maxlength="75"> </font></small> </td> </tr> <tr> <td bgcolor="#B8D0F0" width="27%"><small><font face="Arial">Apellido</font></small></td> <td width="73%" align="center" bgcolor="#B8D0F0"><small><font face="Arial"> <input type="text" name="apellido" size="80" maxlength="75"> </font></small> </td> </tr>

<tr> <td bgcolor="#B8D0F0" width="27%"><small><font face="Arial">Direccion</font></small></td> <td width="73%" align="center" bgcolor="#B8D0F0"><small><font face="Arial"> <input type="text" name="direccion" size="80" maxlength="75"> </font></small> </td> </tr> <tr> <td bgcolor="#B8D0F0" width="27%"><small><font face="Arial">Telefono</font></small></td> <td width="73%" align="center" bgcolor="#B8D0F0"><small><font face="Arial"> <input type="text" name="telefono" size="80" maxlength="75"> </font></small> </td> </tr> </table> <br> <center> <input type="submit" name="btnContinuar" value="Registrar"> </center> </form> </div> </body> </html>

26

VerificaAlumnos.jsp
<html> <head> <title>Alumnos</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <%@ page import="java.sql.*" %> <jsp:useBean id="alum" class="dcc.alumnos" scope="application" />

<body bgcolor="#FFCCCC"> <div Id="scroll" Style="position:absolute; left:259px; top:122px; width=570; height=420; overflow = auto; border=solid thin #B8D0F0; visibility:visible; z-index:2;; width: 509px; height: 183px"> <br> <table border="0" cellpadding="0" cellspacing="1" width="100%"> <tr> <td width="40%" align="center" bgcolor="#0068C0"><font face="Arial" color="#FFFFFF"><b><font face="Georgia, Times New Roman, Times, serif">Resultados</font></b></font></td> <tr> </tr> </table>

<br> <jsp:setProperty <jsp:setProperty <jsp:setProperty <jsp:setProperty name="alum" name="alum" name="alum" name="alum" property="nombre" param="nombre"/> property="apellido" param="apellido"/> property="direccion" param="direccion"/> property="telefono" param="telefono"/>

<% if (alum.NuevoAlumno()) { %> <p align="center"><strong><font face="Georgia, Times New Roman, Times, serif" color="#000099">El alumno</font><font face="Arial" color="#408080" > &nbsp;<jsp:getProperty name="alum" property="nombre" /> &nbsp;<jsp:getProperty name="alum" property="apellido" /> &nbsp; <font face="Georgia, Times New Roman, Times, serif" color="#000099">se registro correctamente!!!</font> </font></strong></p> <% } else { %> <p align="center"><strong><font face="Arial" color="#408080" > <font face="Georgia, Times New Roman, Times, serif" color="#000099">Se ha generado un error y no se grabo el alumno</font> &nbsp;<jsp:getProperty name="alum" property="nombre" /> &nbsp;<jsp:getProperty name="alum" property="apellido" /> &nbsp; <font face="Georgia, Times New Roman, Times, serif" color="#000099">Verifique...! </font> </font></strong></p> <% } %> <form name="form1" method="post" action="Alumnos.jsp"> <center> <input type="submit" name="btnContinuar" value="Continuar"> </center> </form> </div> </body> </html>

27

Bean Alumnos.java
package dcc; import java.sql.*; public class alumnos { private String nombre; private String apellido; private String direccion; private String telefono; private Connection cn; public void setCn(Connection cn) { this.cn=cn; } public Connection getCn() { return(cn); } public void setNombre(String nombre) { this.nombre=nombre; } public String getNombre() { return(nombre); } public void setApellido(String apellido) { this.apellido=apellido; } public String getApellido() { return(apellido); } public void setDireccion(String direccion) { this.direccion=direccion; } public String getDireccion() { return(direccion); } public void setTelefono(String telefono) { this.telefono=telefono; } public String getTelefono() { return(telefono); }

public boolean isAlumno(String nombre) { Statement st; String sqlQuery; if (cn!=null) { try { st= cn.createStatement(); sqlQuery="Select * from alumnos where nomrbe='"+nombre.trim()+"'"; ResultSet rs=st.executeQuery(sqlQuery); if (rs.next()) { this.nombre=nombre; apellido=rs.getString("apellido").trim(); direccion=rs.getString("direccion").trim(); telefono=rs.getString("telefono").trim(); rs.close(); return(true); } else { this.nombre=""; apellido=""; direccion=""; telefono=""; rs.close(); return (false); } }

28

//try catch(SQLException e) { this.nombre=""; apellido=""; direccion=""; telefono=""; return (false); } } else return(false); } public boolean NuevoAlumno() { Statement st; String sqlInsert; if (cn!=null) { try { st= cn.createStatement(); sqlInsert="INSERT INTO alumnos VALUES('"+ nombre.trim() + "','"+ apellido.trim()+"','"+direccion.trim()+"','"+telefono.trim()+"')"; st.executeUpdate(sqlInsert); return(true); } catch(SQLException e) { return(false); } } else return(false); } }

29

También podría gustarte