Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Aplicación web:
9 Aplicación que se ejecuta en al menos un servidor y a la que
el usuario accede desde un cliente de propósito general
Curso de Java
(navegador en un PC, teléfono WAP, etcétera).
La comunicación en la Web gira entorno al protocolo HTTP.
9 Protocolo de nivel de aplicación.
9 Funciona sobre TCP (puerto 80 por defecto).
9 Modelo petición/respuesta.
Java Server Pages (JSP) 9 No tiene estado.
HTTP HTTP
Antes: CGI
9 Crea un proceso por cada petición. Los servlets son las respuesta de la tecnología Java a
la programación CGI. Son programas que se ejecutan en
9 Ineficiente.
un servidor web y construyen páginas web.
9 Se implementaron algunas variantes más eficientes.
La página web está basada en datos enviados por el usuario.
Ahora Por ejemplo, las páginas de resultados de los motores de
búsqueda se generan de esta forma y los programas que procesan
9 J2EE Æ Servlets + JSP (Java Server Pages)
pedidos desde sitios de comercio electrónico también.
9 .NET Æ ASP.NET
Los datos cambian frecuentemente.
9 PHP Por ejemplo, un informe sobre el tiempo o páginas de cabeceras
de noticias podrían construir la página dinámicamente.
Otros ejemplos: páginas de una tienda on-line que liste
los precios actuales y el número de artículos en stock.
Tras la recepción de una petición de página JSP: Un servlet es una subclase de un servlet genérico.
El servlet es un archivo .class del lado del servidor que
1. El motor JSP analiza la página solicitada y crea un archivo normalmente procesa peticiones GET y POST, y genera HTML
de código fuente correspondiente al servlet. dinámicamente, que se devuelve al cliente que realizó la petición.
2. El servlet se compila y se genera el .class, que se ejecuta
como cualquier servlet.
<FORM METHOD="POST" ACTION="EjeServlet">
3. Se crea la instancia del servlet y se ejecutan sus métodos
init() y service().
4. El motor de servlets carga la clase del servlet generado para
ejecutarlo.
Indicamos el
5. El servlet se ejecuta y devuelve su respuesta al cliente que servlet que va a
hizo la solicitud (un archivo HTML).
procesar los
datos del
formulario
Separando el formato del contenido podemos poner diferentes JSP debe verse como la norma habitual.
personas en diferentes tareas: nuestros expertos en diseño de Los servlets serán casos excepcionales.
páginas web pueden construir el código HTML, dejando espacio
para que los programadores de servlets inserten el contenido
generado dinámicamente.
Lógica de negocio:
La incorporación dinámica de contenido en una página web Creación de contenidos y control de la relación entre
siempre implica programación. la entrada, los algoritmos y la salida.
Se trata de minimizar la parte de programación y separar Lógica de presentación:
la programación de la presentación del contenido.
Diseño gráfico que determina la forma como se presenta
JSP mezcla HTML y Java.
la información al usuario.
La generación dinámica de contenido se debe separar en dos
partes, para facilitar la programación y reducir costes:
La lógica de negocio se puede controlar desde JavaBeans.
9 Lógica de negocio.
La lógica de presentación se puede controlar desde JSP.
9 Lógica de presentación.
El control de HTTP se puede realizar mediante servlets.
Directivas:
Proporcionan información global sobre la página.
<HTML>
<BODY>
<%
// Esto es un scriptlet. Obsérvese que la variable
// date declarada aquí está disponible para un
// guión posterior.
System.out.println( "Evaluamos la fecha" );
java.util.Date date = new java.util.Date();
%>
La fecha actual es <%= date %>
</BODY> Aparece en la
</HTML> ventana del
servidor (para
El código se ejecuta cada vez que ¡El scriplet no depurar)
se llama a la página JSP genera HTML
directamente!
<HTML> <HTML>
<BODY> <BODY>
<TABLE BORDER=2> <%
<% boolean hola = false;
for(int i = 0; i < 9; i++) { if(hola) {
%> %>
<TR> <H1>Hola</H1>
<TD>Numero </TD> <%
<TD> </TD> }
<TD><%= i + 1 %></TD> else {
</TR> %>
<% <H1>Adiós</H1>
} <%
%> }
%>
</TABLE> Se puede salir del scriptlet,
</BODY>
</BODY> escribir HTML y volver a entrar
</HTML>
</HTML> en el scriptlet sin problemas.
La hora actual es
Contiene la información proporcionada por el navegador <%
al servidor.
out.println( fecha );
<HTML> out.println("<BR>La dirección de su máquina es " );
<BODY>
out.println( request.getRemoteHost());
<%
%>
System.out.println("Evaluamos la fecha:");
java.util.Date fecha = new java.util.Date(); HTML que se genera
%>
La hora actual es La hora actual es
<% Sat Jan 26 17:40:53 CET 2002
out.println(fecha); <BR>La dirección de su máquina es
out.println("<BR>La dirección de su máquina es " ); localhost
out.println(request.getRemoteHost()); Lo que se ve en el explorador
%>
</BODY>
</HTML> La hora actual es Sat Jan 26 17:40:53 CET 2002
La dirección de su máquina es localhost
<UL> <HTML>
<LI><B>Expresión.</B><BR> <BODY>
Tu máquina host es: <%= request.getRemoteHost() %>.<br> <%!
Tu id. de sesión: <%= session.getId() %> String sitio="izar.com";
<LI><B>Scriptlet.</B><BR> int contador = 0;
<% out.println("datos de la cadena de GET: " +
request.getQueryString(); %> void incrementa(){
<LI><B>Declaración (más expresión).</B><BR> contador++;
<%! private int cuentaAccesos = 0; %> }
Accesos desde que se reinició el servidor: %>
<%= ++cuentaAccesos %> <%
<LI><B>Directiva (más expresión).</B><BR> incrementa();
<%@ page import = "java.util.*" %> Directiva para %>
Momento actual: <%= new Date() %> incluir un paquete <br>
</UL> El sitio web del día es <%= sitio %> <br>
número de accesos <%= contador %>
</BODY>
</HTML>
Permiten especificar caracterísitcas globales de página, de etiquetas, Permite incluir en tiempo de compilación una página HTML, archivo
de importación de clases, archivos, etc...... java, fichero de texto u otra página JSP (normalmente para
Sintaxis: encabezados, pies, tablas, etc...)
<%@ directiva {atributo = “valor”}%> <%@ include file=“URL relativa” %>
<%@ page atributo= "valor" %> <%@ page atributo= "valor" %>
pidenombre0.htm
Objeto request guardarnombre0.jsp Otros métodos de request:
request : javax.servlet.http.HttpServletRequest
Proporciona métodos para recuperar información de la cabecera http o Info de la máquina cliente: quiz.jsp
de cookies. <%= request.getRemoteHost() %> quizhandler.jsp
Con cada nueva petición de la página se crea un nuevo objeto request
Obtener el valor de un parámetro:
<%= request.getParameter("edad") %> <br>
session : javax.servlet.http.HttpSession
Se usa para mantener información sobre el cliente o visitante que ha
1.
2.“Guardarnombre1.jsp”
procesa los datos enviados.
En la página
3 “siguiente.jsp” obtengo el
atributo “elnom bre” de la
session
1 Clave -objeto
2
1.click
Luis Hernández Yáñez Luis Hernández Yáñez
Curso de Java Tema 11 – JSP - 58 Curso de Java Tema 11 – JSP - 59
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Session Session
Todas las páginas JSP participan en una sesión http. No es obligatorio que las páginas JSP participen en una sesión. Se
Los objetos de la sesión se identifican mediante un ID y se almacenan puede modificar la directiva:
en el explorador como un cookie.
Se pueden almacenar en la sesión cualquier objeto java identificándolo <%@ page session="false" %>
mediante una clave. Por ejemplo:
El objeto a identificado por
ident pertenece a la sesión No hay límite en el número de objetos que se pueden almacenar en
<% Algo a = new Algo();
una sesión. Sin embargo, objetos grandes pueden degradar el
session.setAttribute(“ident",a); %> rendimiento.
Hace que la instancia a esté disponible en todas las páginas JSP y Por defecto, la mayoría de los servidores establecen un tiempo de vida
servlets pertenecientes a la misma sesión. de objetos de sesión de 30 minutos, aunque se puede modificar dicho
La instancia se puede recuperar en otra página : valor.
Veamos el ejemplo de un contador utilizando el objeto session.
<% Algo otro =(Algo)session.getAttribute(“ident"); %>
Contador3.jsp
Objeto response
<HTML>
<BODY> Proporciona acceso a los parámetros asociados con las respuestas
<% HTML generadas por la página (página de respuesta):
Integer numvisitas = (Integer)session.getValue("elcontador");
if (numvisitas==null) { //lo pongo a 0
numvisitas= new Integer(0);
Métodos:
session.putValue("elcontador",numvisitas); Establecer el tipo del mensaje de respuesta:
out.println("Bienvenido");
} response.setContentType(String)
else { Redirigir a otra página:
numvisitas= new Integer(numvisitas.intValue()+1); response.sendRedirect(String)
session.putValue("elcontador",numvisitas); Colocar una cookie en el cliente:
out.println("Has visitado " + numvisitas + " veces");
}
response.addCookie(Cookie)
%> Creación del cookie: new Cookie(nombre,valor)
</BODY>
showSession.jsp
</HTML>
showApplication.jsp Caducidad del cookie: setMaxAge(valor)
<html>
<html>
<head><title>JSP Page</title></head>
<body> <body>
<h1>el nombre de usuario lo saco del cookie almacenado en el cliente.</h1> <% int i=10; int j=0; i = i/j ; %>
<p> El valor de i <%= i %> </p>
<%
</body>
Cookie[] listacookies = request.getCookies(); </html> Sin capturarexcepción !
for(int I = 0; I< listacookies.length;I++) { ____________________________________________
<%
Cookie miCookie = listacookies[I]; int i = 10;
if (miCookie.getName().equals("nombre")) { int j = 0;
Capturam os la excepción !
try {
out.println("el nombre es: " + miCookie.getValue());
i = i / j ;
} } catch (Exception e) {
out.print(“Se produjo el siguiente error:<br>");
}
out.print(e.toString());
%> }
</body> %>
<p> El valor de i es <%= i%> </p>
</html>
</body>
</html>
catch( SQLException ex ) {
System.out.println(ex.toString());
}
%>
Luis Hernández Yáñez Luis Hernández Yáñez
Curso de Java Tema 11 – JSP - 70 Curso de Java Tema 11 – JSP - 71
Carlos Cervigón Rückauer Carlos Cervigón Rückauer
Etiquetas JSP Etiquetas JSP predefinidas
Sintaxis:
<algo:etiqueta> <jsp:accion atributo=“valor” />
Cuerpo <algo:etiqueta/>
# Sample authentication
# Remove these lines to take out the authentication sample
# Change the authType to "Basic" to see basic authentication example
# and uncomment the "authRealm" line.
Página de login
application.default.authType: Form
#application.default.authRealm: Sample
application.default.authLoginForm: /login.html
application.default.authErrorPage: /loginFailed.html Página cuando login
role.name: user incorrecto
role.user.url: /AuthenticationTest.html
Password y login
a cotejar
# Sample authentication
# Remove these lines to take out the authentication sample
<%@ page atributo= "valor" %>
# Change the authType to "Basic" to see basic authentication example Vamos a generar una hoja de cálculo Excel con los datos de la página
# and uncomment the "authRealm" line. JSP:
<jsp:plugin Un JavaBean es una clase java que se puede relacionar con una
type="applet" página JSP y que suele tener :
jreversion="1.4"
public class Empleado {
align="center"
public String nombre = "sin nombre";
height="25"
public String getNombre(){
width="300" > return nombre;
. . . }
public void setNombre(String nombre){
</jsp:plugin> this.nombre = nombre;
}
}
<HTML>
<BODY> El modo usual de trabajar con formularios es mediante la definición
<jsp:useBean id="mibean" class="Empleado" /> de un “bean”. El “bean” contiene código Java que se puede llamar
desde la página JSP.
<jsp:setProperty name="mibean"
property="nombre" Se trata de definir una clase con un atributo por cada campo del
formulario.
value="kiko" />
La clase debe tener métodos modificadores y consultores de cada
Bienvenido a nuestra empresa, uno de los atributos (campos).
<jsp:getProperty name="mibean"
Consideramos un formulario que pide el nombre, el e-mail y la edad
property="nombre" /> del cliente.
<br><br> Se trata de enlazar el bean con el servlet o la página JSP para que
<%= mibean.getNombre() %>, por favor visita nuestra web más trabaje con los datos del formulario.
a menudo . . .
</BODY>
</HTML>
Compilamos la clase y verificamos el classpath del servidor web (En Utiliza la instancia de la clase
Blazix podemos colocarla en la carpeta “classes”). Usuario en esta sesión
El programa que procesa el formulario usa las etiquetas useBean y <jsp:useBean id="beanusuario" class="Usuario"
setProperty scope="session"/>
<tr>
<td width="157">Galletas</td>
<td width="128">3.99</td>
<td width="148">
<input type="checkbox" name="productid" value="2" />
</td>
</tr>
<tr>
<td width="157">Pan</td>
<td width="128">1.99</td>
<td width="148">
<input type="checkbox" name="productid" value="3" />
</td>
</tr>
</table>
<p>
<input type="submit"
value="Añadir al carrito" name="AddToShoppingCartBtn" />
</p>
</form>
</body>
</html>
<html> <body>
<b>(Respuesta) </b><br /><br />
Las primeras especificaciones JSP definían dos arquitecturas conocidas como
<jsp:useBean id="pm" class="ProductManager" scope="session">
Modelo 1 y Modelo 2.
</jsp:useBean>
<% La diferencia fundamental radica en donde se encuentra el núcleo del proceso
String[] selProducts = request.getParameterValues("productid"); de las peticiones
int selProductsCount = 0; En el modelo 1, la petición desde el explorador se envía directamente a la
if (selProducts == null) { página JSP, que es responsable de procesarla y de devolver la respuesta al
out.println("No seleccionó nada"); cliente.
} else {
Hay una separación entre el contenido y la presentación, puesto que se suele
selProductsCount = selProducts.length;
acceder a los datos a través de beans.
out.println("El carrito tiene lo siguiente :" +"<BR>");
for(int i=0;i<selProductsCount;i++) { Adecuado en aplicaciones pequeñas
int ProductId = Integer.parseInt(selProducts[i]); Mucho código Java dentro de la página JSP
Product prod = pm.getProductDetails(ProductId);
out.println(prod.getProductName());out.println(prod.getProductPrice());
out.println("<BR>");
} }
%> </body></html>
Aplicación que solicita al lector datos sobre el coche o moto que le gustaría tener.
Página del formulario: encuesta.html
urldelfichero .jar
que contiene la
definición de librería
de etiquetas