Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 Introducción: servidores y
contenedores de servlets/JSPs
Los servlets y Java Server Pages (JSPs) son dos
métodos de creación de páginas web dinámicas en
servidor usando el lenguaje Java. En ese sentido son
similares a otros métodos o lenguajes tales como el
PHP, los CGIs (common gateway interface), programas
que generan páginas web en el servidor, o los ASP
(Active Server Pages), un método específico de
Microsoft. Sin embargo, se diferencian de ellos en otras
cosas.
ACA
de servlets
Vamos a ver cómo se instala un contenedor
de servlets. Nos fijaremos especialmente en la
versión 4.0 de Tomcat, aunque lo que se cuente
valdrá para casi todos los otros contenedores
Open Source. Los de pago, probablemente
tendrán un interfaz pijo para instalarlos, a base
de botoncitos, o si son los muy caros, vendrá un
señor con corbata y maletín de cuero para
hacerlo, así que de esos no nos preocuparemos
demasiado.
o bien
<Connector
className="org.apache.catalina.connector.h
ttp.HttpConnector"
port="10001"minProcessors="2"
maxProcessors=" 5"
enableLookups="true"
redirectPort="8543"
acceptCount="10" debug="0"
connectionTimeout="60000"/>
Ejercicios 1
1. Seguir los pasos anteriores e instalar un
contenedor de servlets en el ordenador.
Probar con el Tomcat, y si todo va bien,
probar también con el Caucho Resin. El
proceso es bastante similar. Cambiar la
configuración de Tomcat de forma que
cada conector use sólo 2 hebras mínimo, y
5 máximo. Cambiar al puerto al 10001;
rearrancar el servidor. Definir un nuevo
contexto para los ficheros propios.
2. Darse de alta en algún servidor gratuito,
y subir alguno de los ejemplos de Resin o
de Tomcat para probarlo.
<% if (count == 2)
System.out.println('vez')
} else {
System.out.println('veces')
} %>
org.apache.jasper.JasperException: No se
puede compilar la clase para JSP
/var/tomcat4/work/localhost/jmerelo/hola$j
sp.java:90: 'catch' without 'try'.
} catch (Throwable t) {
^
/var/tomcat4/work/localhost/jmerelo/hola$j
sp.java:98: 'try' without 'catch' or
'finally'.
}
^
/var/tomcat4/work/localhost/jmerelo/hola$j
sp.java:98: '}' expected.
}
^
3 errors
Ejercicios 2
1. Usando la clase java.util.Date, hacer un
JSP que imprima la hora y los minutos, y
probarlo en algún servidor gratuito o en un
servidor propio
A partir de este
momento, vamos a intentar montar paso a paso
una quiniela en Internet, que la gente pueda
rellenar, votar los resultados, y, finalmente, sacar
un resumen de todos para que en la oficina se
rellene la quiniela común de acuerdo con ello
(aunque siempre hay un asaúra que está en
desacuerdo, y que quiere ponerle un 2 al Depor-
Recre).
estePartido.setJuegaFuera("Barcelona"
);
boolean[] pronostico = new
boolean[3];
for ( int i = 0; i < 3; i ++ ) {
pronostico[i] = true;
}
estePartido.setPronostico(
pronostico ); %>
<td><%= estePartido.getJuegaEnCasa() %>
</td><td> <%= estePartido.getJuegaFuera()
%>
<%! boolean[] estePronostico =
estePartido.getPronostico(); %>
<td><% if (estePronostico[0] ){ %>1 <% }
%><% if (estePronostico[1] ){ %>X <% } %>
<% if (estePronostico[2] ){ %>2 <% } %>
</table>
<%@ include file='pie.jsp' %>
package quiniela;
String juegaEnCasa;
String juegaFuera;
boolean[] pronostico = new boolean[3];
String unoequisdos="1X2";
<jsp:useBean id="estePartido"
class="quiniela.Partido" />
<jsp:setProperty name="estePartido"
property="juegaEnCasa" value="Madrid" />
<jsp:setProperty name="estePartido"
property="juegaFuera" value="Barça" />
<jsp:setProperty name="estePartido"
property="pronosticoAsString" value="1X2"
/>
<html>
<head><title>Resultado de un
partido</title></head>
<%@ include file ="cabecera.jsp" %>
<h1>Resultados de la quiniela</h1>
<table border borderwidth='1'>
<tr><th colspan="2">Partido</th><th
colspan="3">Pronostico</th></tr>
<jsp:getProperty name="estePartido"
property="formatted" />
</table>
<%@ include file ="pie.jsp" %>
Ejercicios 3
1. Crear un bean para una pregunta a una
encuesta y su respuesta correspondiente, y
un JSP que lo presente en pantalla.
2. Modificar el JSP anterior para que
presente los 14
resultados de la
quiniela.
Contenido de esta sección
Acceso a
5 Páginas objetos
implícitos
dinámicas. Contenido
dinámico
Como para Excepciones
hacer páginas
estáticas, ya
tenemos el HTML propiamente dicho, vamos a
meter un poco de dinamismo en las páginas,
permitiendo que se modifique la página según
cómo se la llame. Más adelante veremos cómo
hacer que el usuario introduzca esos datos
directamente. Para empezar, haremos que la
página varíe dependiendo de la forma cómo se la
invoque, en la pagina siguiente (resultadoDyn.jsp)
En
este
caso,
<tr><td colspan='5'><em>Comentario</em><%
if
(request.getParameter("pronosticoAsString"
) == "X" ) { %>
Empate
<% } else if
(request.getParameter("pronosticoAsString"
) == "1" ) { %>
Gana el de casa
<% } else { %>
Gana visitante
<% } %> </td></tr>
java.lang.reflect.InvocationTargetExceptio
n: java.lang.RuntimeException: Pronóstico
más largo de la cuenta
at
quiniela.PartidoValidado.setPronosticoAsString(P
artidoValidado.java:31)
<%@ page
errorPage="paginaError.jsp?debug=log" %>
<% request.setAttribute("paginaOrigen",
request.getRequestURI()); %>
Con esto se declara una página de error, y se
asigna un atributo a la petición, que almacenará
el URI de la peticición, es decir, el camino con el
que se la ha llamado. El código de la página de
error es el siguiente ( paginaError.jsp):
Ejercicios 4
1. Cambiar la encuesta para que tome los
resultados de los parámetros que se le
pasen al JSP .
2. Cambiar la EncuestaBean para que
detecte errores (tales como una respuesta
incorrecta), y levante una excepción; crear
una página de error que capture esa
excepción y la
muestre.
Contenido de esta sección
6 Formularios
Combinación
Procesamient de elementos
JSP
o de Ámbitos
Taglibs
formularios
Ya está bien de tanto objeto implícito y tanta
gaita, vamos a ir directamente al turrón de
procesar formularios como Dios manda. Vamos a
tratar de hacer una página JSP que cree y a la vez
procese el formulario; de esta forma es más fácil
de mantener. El formulario nos permitirá rellenar
la quiniela sin hacer nada en concreto con ella,
sólo presentarla. En la práctica, habría
probablemente que almacenar los resultados en
una base de datos, o por lo menos un fichero,
pero por lo pronto, lo dejaremos así. El formulario
se implementa en el código siguiente:(quiniela.jsp,
que usa la clase Quiniela:)
<tr><th> </th><th>Partido</th><th>Pronósti
co</th><th>Pronóstico Anterior</th>
</tr>
<% for ( int i = 0; i <
estaQuiniela.getNumPartidos(); i ++ ) {
String proStr = "pronostico"+i;
%>
<tr><td><%= i %></td>
<jsp:setProperty name='estaQuiniela'
property='numPartido' value="<%= i %>" />
<td><jsp:getProperty name='estaQuiniela'
property='juegaEnCasa' />-
<jsp:getProperty name='estaQuiniela'
property='juegaFuera' /></td>
<td><input
type='text' name='pronostico<%= i %>'
value='<jsp:getProperty
name='estaQuiniela' property='pronostico'
/>' ></td>
<td><jsp:getProperty
name='estaQuiniela' property='pronostico'
/> </td>
</tr>
<% } %>
<tr><td colspan="4" align="center"><input
type='submit' ></td>
</tr>
</table>
</form>
<%@ include file ="pie.jsp"
%> Para quien no haya trabajado
Para empezar, hemos con formularios (ver por
creado un nuevo bean que ejemplo este tutorial de
contiene un vector de formularios o bien este
partidos, llamado Quiniela; tutorial de HTML, que
incluye también formularios)
este bean será el que
usemos en la página; en general, es una buena
idea reflejar la estructura de una página en un
bean, o viceversa. En el caso anterior usábamos
los beans Partido y PartidoValidado, y en este caso
usamos esta. La única peculiaridad de esta clase
es que, debido a su estructura como Bean, no se
puede llamar a ningún método con dos
argumentos, por lo que tenemos que establecer
un cursor de partido que indique sobre qué
partido van a actuar los métodos que ponen o
extraen valores de la clase
El objeto que va a contener la quiniela se
declara en las primeras líneas, mediante el tag
<jsp:useBean>. A continuación se le pasa el fichero
quiniela.dat, que contiene los datos de una quiniela
(de primera división universal especial, como se
puede comprobar). A continuación, después de
abrir el formulario, se detecta si se ha usado uno
de los datos del mismo (pronostico0), en cuyo caso
se empieza a procesarlo: se crea una cadena con
el nombre del parámetro (pronostico + el índice),
se usa esa cadena para colocar el cursor
(%lt;jsp:setProperty name='estaQuiniela'
property='numPartido' value="<%= i %>" />) y se asigna
el pronóstico al partido correspondiente de la
quiniela. Como se ve, este formulario sirve para
las dos cosas: para recibir las entradas, y para
procesarlas.
<tr><td>1</td><td>X</td><td>2</td>
</tr>
<% for ( int i = 0; i <
estaQuiniela.getNumPartidos(); i ++ ) {
String proStr = "pronostico"+i;
%>
<tr><td><%= i %></td>
<jsp:setProperty name='estaQuiniela'
property='numPartido' value="<%= i %>" />
<td><jsp:getProperty name='estaQuiniela'
property='juegaEnCasa' />-
<jsp:getProperty name='estaQuiniela'
property='juegaFuera' /></td>
<% boolean[] pronosticos
= estaQuiniela.getPronostico();
for ( int j = 0; j < 3; j
++ ) { %>
<td><input type='checkbox'
name='pronostico<%= i %>' value='<%=
quiniela.PartidoValidado.get1X2( j ) %>'
<%= pronosticos[j]==true?"checked":"" %>'
></td>
<% } %>
<td><jsp:getProperty
name='estaQuiniela'
property='pronosticoAsString' /> </td>
</tr>
<% } %>
<tr><td colspan="4" align="center"><input
type='submit' name='submit'
value='Enviar'></td>
</tr>
</table>
</form>
<jsp:useBean id='stats'
class='quiniela.Stats' scope='application'
/>
<jsp:useBean id='estePartido'
class="quiniela.PartidoValidado"
scope='request' />
<jsp:setProperty name='estePartido'
property='juegaEnCasa' value= "Valencia"
/>
<jsp:setProperty name='estePartido'
property='juegaFuera' value= "Inter" />
L
a
s
n
o
v
e
d
a
d
e
s
Ejercicios 5
1. Hacer un formulario con una
encuesta que guarde estadísticas
sobre las respuestas contestadas
2. Usar una librería de etiquetas que
incluya bucles, y convertir algún
JSP anterior que use bucles java a
uno que use los bucles de la taglib.
3. Hacer un JSP que contenga un
carrito de la compra usando beans
con ámbito de sesión.
7 Bibliografía y enlaces
relacionados con JSP
Enlaces en Internet
Para empezar, hay que mencionar el
debate generado por la publicación de este
debate en Barrapunto, donde puedes
participar si quieres:
http://barrapunto.com/article.pl?sid=02/03/
18/0837221. En la discusión sugieren otras
alternativas, enlaces interesantes, y discuten
las ventajas e inconvenientes de los JSPs
frente a otras alternativas.