You are on page 1of 14

JSP

2014
CTEDRA DE PROGRAMACIN AVANZADA
Ing. Mario Bressano & Luciano Diamand

ENVO
02

PROGRAMACIN AVANZADA

2014

JavaServer Pages (JSP), en el campo de la Informtica, es una tecnologa para crear


aplicaciones web. Es un desarrollo de la compaa Sun Microsystems, y su funcionamiento se
basa en scripts, que utilizan una variante del lenguaje java.
La JSP, es una tecnologa Java que permite a los programadores generar contenido dinmico
para web, en forma de documentos HTML, XML, o de otro tipo. Las JSP's permite al cdigo
Java y a algunas acciones predefinidas ser incrustadas en el contenido esttico del
documento web.
En las JSP, se escribe el texto que va a ser devuelto en la salida (normalmente cdigo HTML)
incluyendo cdigo java dentro de l para poder modificar o generar contenido
dinmicamente. El cdigo java se incluye dentro de las marcas de etiqueta <% y %>, a esto se
le denomina scriplet.

En una posterior especificacin, se incluyeron taglib; esto es, la posibilidad de definir


etiquetas nuevas que ejecuten cdigo de clases java. La asociacin de las etiquetas con las
clases java se declaran en archivos de configuracin en XML.
La principal ventaja de JSP frente a otros lenguajes es que permite integrarse con clases Java
(.class) lo que permite separar en niveles las aplicaciones web, almacenando en clases java
las partes que consumen ms recursos as como las que requieren ms seguridad, y dejando
la parte encargada de formatear el documento html en el archivo jsp.

Pgina 2 de 14

PROGRAMACIN AVANZADA

2014

Independientemente de la certeza de la aseveracin, Java es conocido por ser un lenguaje


muy portable (su lema publicitario reza: escrbelo una vez, crrelo donde sea), y sumado a las
capacidades de JSP se hace una combinacin muy atractiva.
Sin embargo JSP no se puede considerar un script al 100% ya que antes de ejecutarse el
servidor web compila el script y genera un servlet, por lo tanto, se puede decir que aunque
este proceso sea transparente para el programador no deja de ser una aplicacin compilada.
La ventaja de esto es algo ms de rapidez y disponer del API de Java en su totalidad.
Debido a esto la tecnologa JSP, as como Java est teniendo mucho peso en el desarrollo
web profesional (sobre todo en intranets).
Microsoft, la ms directa competencia de Sun, ha visto en esta estrategia de Sun una
amenaza lo que le ha llevado a que su plataforma .NET incluya su lenguaje de scripts ASP.NET
que permite ser integrado con clases .NET (ya estn hechas en C++, VisualBasic o C#) del
mismo modo que jsp se integra con clases Java.

Cmo Funcionan las Pginas JSP?

Una pgina JSP es bsicamente una pgina Web con HTML tradicional y cdigo Java.
La extensin de fichero de una pgina JSP es ".jsp" en vez de ".html" o ".htm", y eso le
dice al servidor que esta pgina requiere un manejo especial que se conseguir con una
extensin del servidor o un plug-in. Aqu hay un sencillo ejemplo:

Ejemplo 1: jsp_01.jsp

<%@page import="java.util.*" %>


<HTML>
<HEAD>
<TITLE>Ejemplo 1 de JSP</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffcc">
<CENTER>
<H2>Fecha y hora</H2>
Hoy es: <%= new Date() %>

Pgina 3 de 14

PROGRAMACIN AVANZADA

2014

</CENTER>
</BODY>
</HTML>

Este ejemplo contiene HTML tradicional y algn cdigo Java. La etiqueta <% identifica
el inicio de un scriptlet, y la etiqueta %> identifica el final de un scriptlet. Cuando se
llame a sta pgina (jsp_1.jsp), ser compilada (por el motor JSP) en un Servlet Java.
En este momento el Servlet es manejado por el motor Servelt como cualquier otro
Servlet. El motor Servlet carga la clase Servlet (usando un cargador de clases) y lo
ejecuta para crear HTML dinmico para enviarlo al navegador. La siguiente vez que se
solicite la pgina, el motor JSP ejecuta el Servlet ya cargado a menos que la pgina JSP
haya cambiado, en cuyo caso es automticamente recompilada en un Servlet y
ejecutada.

Hay varios elementos de script JSP. Hay algunas reglas convencionales que nos
ayudarn a usar ms efectivamente los elementos de Script JSP.
Usamos <% ... %> para manejar declaraciones, expresiones, o cualquier otro tipo de
cdigo vlido.
Usamos la directiva page como en <%@page ... %> para definir el lenguaje de escript.
Tambin puede usarse para especificar sentencias import. Por ejemplo:
%@page language="java" import="java.util.*" %
Usamos <%! .... %> para declarar variables o mtodos. Por ejemplo:
<%! int x = 10; double y = 2.0; %>
Usamos <%= ... %> para definir una expresin y forzar el resultado a un String. Por
ejemplo:
<%= a+b %> o <%= new java.util.Date() %>.
Usamos la directiva include como en <%@ include ... %> para insertar el contenido de
otro fichero en el fichero JSP principal. Por ejemplo:

Pgina 4 de 14

PROGRAMACIN AVANZADA

2014

<%@include file="copyright.html" %>


Ejemplo 2: jsp_02.jsp
<html>
<head>
<title>Saludo</title>
</head>
<body bgcolor="white">
<% java.util.Date clock = new java.util.Date( ); %>
<% if (clock.getHours( ) < 12) { %>
<h1>Buenos das !</h1>
<% } else if (clock.getHours( ) < 18) { %>
<h1>Buenas tardes !</h1>
<% } else { %>
<h1>Buenas noches !</h1>
<% } %>
</body>
</html>

Uso de Directiva:
Necesitamos dos archivos, un html y un jsp.
Ejemplo 3: prueba.htm
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
La directiva de inclusin permite incluir a dentro de la pgina JSP uno o varios archivos
de texto o HTML. Eso permite de incluir un mismo archivo en varias pginas JSP, sin
tener que copiarlo.
Los nombres de archivos incluidos pueden tener cualquiera extensin (txt, html, inc,
jsp...), pero existe una extensin especfica 'jspf' (JSP Fragment) que permite la
validacin del cdigo incluido en varios entornos (Eclipse,...). El archivo incluido tiene
que ser presente y accesible en el sistema de archivos del servidor JSP.
</body>
</html>

Pgina 5 de 14

PROGRAMACIN AVANZADA

2014

Archivo: jsp_03.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<title>Test directiva de pgina</title>
</head>
<body bgcolor="white">
Aqu mi texto incluido:<br>
<%@ include file="prueba.html" %>
</body>
</html>

Manejar Formularios
Una de las partes ms comunes en aplicaciones de comercio electrnico es un
formulario HTML donde el usuario introduce alguna informacin como su nombre y
direccin. Usando JSP, los datos del formulario (la informacin que el usuario introduce
en l) se almacenan en un objeto request que es enviado desde el navegador hasta el
contenedor JSP. La peticin es procesada y el resultado se enva a travs de un objeto
response de vuelta al navegador. Estos dos objetos est
disponibles implcitamente para nosotros.
Para demostrar como manejar formularios HTML usando JSP, aqu tenemos un
formulario de ejemplo con dos campos: uno para el nombre y otro para el email. Como
podemos ver, el formulario HTML est definido en un fichero fuente JSP. Se utiliza el
mtodo request.getParameter para recuperar los datos desde el formulario en variables
creadas usando etiquetas JSP.
La pgina process.jsp imprime un formulario o la informacin proporcionada por el
usuario dependiendo de los valores de los campo del formulario. Si los valores del
formulario son null se muestra el formulario, si no es as, se mostrar la informacin
proporcionada por el usuario. Observa que el formulario es creado y manejado por el
cdigo del mismo fichero JSP.

Pgina 6 de 14

PROGRAMACIN AVANZADA

Ejemplo 2: jsp_02.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<HTML>
<HEAD>
<TITLE>Ejemplo Formulario JSP</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffcc">
<% if (request.getParameter("name")== null && request.getParameter("email")==
null) { %>
<CENTER>
<H2>Formulario de Ingreso de Datos</H2>
<FORM METHOD="GET" ACTION="jsp_02.jsp">
<P>
Su Nombre y Apellido: <input type="text" name="nombre" size=26>
<P>
Su email: <input type="text" name="email" size=26>
<P>
<input type="submit" value="Enviar">
</FORM>
</CENTER>
<% } else { %>
<%! String nombre, email; %>
<%
nombre = request.getParameter("nombre");
email = request.getParameter("email");
%>
<P>
<B>Usted ha provisto la siguiente informacin:</B>:
<P>
<B>Nombre</B>: <%= nombre %><P>
<B>Email</B>: <%= email %>
<% } %>

Pgina 7 de 14

2014

PROGRAMACIN AVANZADA

2014

</BODY>
</HTML>
Archivo. Index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%!
String titulo="Pgina de Inicio";
int nrPagina=1;
%>
<title><%=titulo%></title>
</head>
<body bgcolor="#FFFFFF">
<h1><%=titulo%></h1>
<hr>
<p>
Pgina de Inicio
<a href="formulario_jsp.jsp">Formulario</a>
</body>
</html>
Archivo: formulario_jsp.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Test formulario</title>
</head>
<body bgcolor="#CCDDAA">
<h1>Formulario de prueba</h1>
<hr>
<p>
<form name="formulario" action="formulario.jsp" method=POST>
<table border=0>
<tr>
<th>Su nombre:</th><td><input type=text name="nombre" size=30></td>
<th>Su apellido:</th><td><input type=text name="apellido"
size=30></td>
</tr>
<tr>
<th>Su direccin:</th><td colspan=3><input type=text name="domicilio"
size=100></td>
</tr>
<tr>
<th>Su Provincia:</th><td><select name="provincia">
<option selected>Santa Fe
<option>Buenos Aires
<option>Otra
</select></td>
</tr>
<tr>
<th>Su N de tel:</th><td><input type=text name="tel" size=30></td>

Pgina 8 de 14

PROGRAMACIN AVANZADA

2014

<th>Su N celular:</th><td><input type=text name="cel" size=30></td>


</tr>
<tr>
<th>Su nota:</th><td colspan=3><textarea name="nota" cols=75
rows=5></textarea></td>
</tr>
<tr>
<th></th><td><button type=reset>Limpiar</td>
<th></th><td><button type=submit>Enviar</td>
</tr>
</table>
</form>
</body>
</html>
Archivo: formulario.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%
String nombre=request.getParameter("nombre");
String apellido=request.getParameter("apellido");
String domicilio=request.getParameter("domicilio");
String provincia=request.getParameter("provincia");
if (provincia==null) provincia="Otra";
String tel=request.getParameter("tel");
String cel=request.getParameter("cel");
String nota=request.getParameter("nota");
%>
<title>Resultado de formulario</title>
</head>
<body bgcolor="#CCDDAA">
<h1>Resultado de su formulario</h1>
<p>
<p>
Estimado/a seor(a) <big><%=apellido%></big>,<br>
<br>
Le/a informamos que su formulario fue transmitido con xito.
<p>
<%
if (!provincia.equals("Otra"))
{
%>
Notamos que Usted vive en <big><%=provincia%></big>, por favor elija
su cuidad:<br>
<form name="formulario" action="resultadoFormulario2.jsp" method=POST>
<select name="cuidad">
<%
if (provincia.equals("Santa Fe"))
{
%>
<option>Rosario
<option>San Lorenzo
<option>Casilda
<option>Otra

Pgina 9 de 14

PROGRAMACIN AVANZADA

<%
} // Santa Fe
if (provincia.equals("Buenos Aires"))
{
%>
<option>San Nicols
<option>Mar del Plata
<option>Pergamino
<option>Otra
<%
} // Buenos Aires
%>
</select>
<input type=hidden name="nombre" value="<%=nombre%>">
<input type=hidden name="apellido" value="<%=apellido%>">
<input type=hidden name="domicilio" value="<%=domicilio%>">
<input type=hidden name="provincia" value="<%=provincia%>">
<input type=hidden name="cel" value="<%=cel%>">
<input type=hidden name="tel" value="<%=tel%>">
<input type=hidden name="nota" value="<%=nota%>">
<button type=submit>Enviar</button>
</form>
<%
} // otro provincia
%>
<hr>
<h3>Enlaces</h3>
<a href="index.jsp">Regresar al indice</a><br>
<a href="formulario.jsp">Regresar al formulario</a>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"


pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%
String nombre=request.getParameter("nombre");
String apellido=request.getParameter("apellido");
String domicilio=request.getParameter("domicilio");
String provincia=request.getParameter("provincia");
String tel=request.getParameter("tel");
String cel=request.getParameter("cel");
String nota=request.getParameter("nota");
String cuidad=request.getParameter("cuidad");
%>
<title>Resultado de formulario</title>
</head>
<body bgcolor="#CCDDAA">
<h1>Resultado final de su formulario</h1>
Su nombre : <%=nombre%><br>
Su apellido : <%=apellido%><br>
Su domicilio : <%=domicilio%><br>
Su cuidad : <%=cuidad%><br>
Su provincia : <%=provincia%><br>
Su celular : <%=cel%><br>
Su telefono : <%=tel%><br>

Pgina 10 de 14

2014

PROGRAMACIN AVANZADA

2014

Su nota : <%=nota%><br>
<p>
El nombre de su PC : <%=request.getRemoteHost()%><br>
El IP de su PC : <%=request.getRemoteAddr()%><br>
<hr>
<h3>Enlaces</h3>
<a href="index.jsp">Regresar al indice</a><br>
<a href="formulario.jsp">Regresar al formulario</a>
</body>
</html>

Componentes Reutilizables
El ejemplo del formulario anterior es simple en el sentido de que no hay mucho cdigo
implicado. Cuanto ms cdigo est implicado, ms importante es no mezclar la lgica
del negocio con la presentacin final en el mismo fichero. La separacin de la lgica de
negocio de la presentacin permite cambios en cualquier sitio sin afectar al otro. Sin
embargo, el cdigo de produccin JSP se debe limitar a la presentacin final. As pues,
cmo implementamos la parte de la lgica de negocio? Aqu es donde los JavaBeans
entran en juego. Esta tecnologa es un modelo de componente portable, independiente
de la plataforma que permite a los desarrolladores escribir componentes y reutilizarlos
en cualquier lugar. En el contexto de JSP, los JavaBeans contienen la lgica de negocio
que devuelve datos a un script en una pgina JSP, que a su vez formatea los datos
devueltos por el componente JavaBean para su visualizacin en el navegador. Una
pgina JSP utiliza un componente JavaBean fijando y obteniendo las propiedades que
proporciona.

Cules son los beneficios?

Hay muchos beneficios en la utilizacin de JavaBeans para mejorar las pginas JSP:
Componentes Reutilizables: diferentes aplicaciones pueden reutilizar los mismos
componentes.
Separacin de la lgica de negocio de la lgica de presentacin: podemos modificar la
forma de mostrar los datos sin que afecte a la lgica del negocio.
Protegemos nuestra propiedad intelectual manteniendo secreto nuestro cdigo fuente.

Pgina 11 de 14

PROGRAMACIN AVANZADA

2014

Usar JavaBeans con JSP

Ahora, veamos como modificar el ejemplo anterior, process.jsp para usar JavaBeans. En
el formulario anterior haba dos campos: name y email. En JavaBeans, son llamados
propiedades. Por eso, primero escribimos un componente JavaBean con mtodos setX
getX, donde X es el nombre de la propiedad. Por ejemplo, si tenemos unos mtodos
llamados setName y getName entonces
tenemos una propiedad llamada name. El ejemplo 5 muestra un componente FormBean.
Los buenos componentes deben poder interoperar con otros componentes de diferentes
vendedores. Por lo tanto, para conseguir la reutilizacin del componente, debemos
seguir dos reglas importantes (que son impuestas por la arquitectura JavaBeans):
1. Nuestra clase bean debe proporcionar un constructor sin argumentos para que pueda
ser creado usando Beans.instantiate.
2. Nuestra clase bean debe soportar persistencia implementando el interface Serializable
o Externalizable.

Archivo: FormBean.java
package userinfo;
import java.io.*;
public class FormBean implements Serializable {
private String name;
private String email;
public FormBean() {
name = null;
email = null;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setEmail(String email) {
this.email = email;
}

Pgina 12 de 14

PROGRAMACIN AVANZADA

2014

public String getEmail() {


return email;
}
}

Para poder usar el componente FormBean en el fichero JSP, necesitamos ejemplarizar el


componente.

Esto

se

hace

usando

la

etiqueta

<jsp:useBean>.

La

siguiente

lnea

<jsp:setProperty> se ejecuta cuando se ha ejemplarizado el bean, y se usa para inicializar sus


propiedades. En este caso, ambas propiedades (name y email) se configuran usando una sla
sentencia. Otra posible forma de configurar las propiedades es hacerlo una a una, pero primero
necesitamos recuperar los
datos desde el formulario. Aqu tenemos un ejemplo de como configurar la propiedad name:
<%! String yourname, youremail; %>
<% yourname = request.getParameter("name"); %>
<jsp:setProperty name="formbean" property="name"
value="<%=yourname%>"/>
Una vez que se han inicializado las propiedades con los datos recuperados del formulario, se
recuperan los valores de las propiedades usando <jsp:getProperty> en la parte else, como se
ve en el ejemplo

Archivo: porcess2.jsp
<jsp:useBean id="formbean" class="userinfo.FormBean"/>
<jsp:setProperty name="formbean" property="*"/>
<HTML>
<HEAD>
<TITLE>Form Example</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffcc">
<% if (request.getParameter("name")==null
&& request.getParameter("email") == null) { %>
<CENTER>
<H2>User Info Request Form </H2>
<form method="GET" action="process2.jsp">
<P>
Your name: <input type="text" name="name" size=27>
<p>

Pgina 13 de 14

PROGRAMACIN AVANZADA

2014

Your email: <input type="text" name="email" size=27>


<P>
<input type="submit" value="Process">
</FORM>
</CENTER>
<% } else { %>
<P>
<B>You have provided the following info</B>:
<P>
<B>Name</B>: <jsp:getProperty name="formbean" property="name"/>
<P>
<B>Email</B>: <jsp:getProperty name="formbean" property="email"/>
<% } %>
</BODY>
</HTML>

Bibliografa:
Ttulo: Java. Cmo programar. Quinta Edicin
Autor: Deitel.
Editorial: Pearson. Pretince Hall
Ttulo: Programacin en Java 2
Autor: Luis Aguilar e Ignacio Zahonero Martnez
Editorial: Mc. Graw Hill
Ttulo: Programacin con Java
Autor: Decaer - Hirshfield
Editorial: Thompson Learning
Web: Java en castellano http://www.programacion.com
http://www.programacion.com/articulo/servlets_y_jsp_82
___________________________________________________________Mario O. Bressano___

Pgina 14 de 14