2014
CTEDRA DE PROGRAMACIN AVANZADA
Ing. Mario Bressano & Luciano Diamand
ENVO
02
PROGRAMACIN AVANZADA
2014
Pgina 2 de 14
PROGRAMACIN AVANZADA
2014
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
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
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
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>
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.
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
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
Esto
se
hace
usando
la
etiqueta
<jsp:useBean>.
La
siguiente
lnea
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
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