JavaWeb 3 3 Servlet
JavaWeb 3 3 Servlet
JAVA WEB
Servlet
Servlet
26/10/2012
Ing. Froyln Ramrez Lpez
2
Componente de software Java que es encargado de generar
contenido dinmico en respuesta a pedidos HTTP.
Reside dentro de un servlet container.
El servidor web recibe los pedidos, revisa su sintaxis y los
deriva al servlet container, que a su vez determina que
servlet debe invocarse, construye los objetos
correspondientes que recibir el servlet, enva el pedido al
servlet y este devuelve la respuesta generada.
Pedidos HTTP
26/10/2012
Ing. Froyln Ramrez Lpez
3
OPTIONS
Se usa para preguntarle al servidor las diferentes formas de comunicacin que soporta.
GET
Pide un recurso al servidor.
HEAD
Solo devuelve el encabezado.
POST
Enva informacin al servidor.
PUT
Enva recursos al servidor.
DELETE
Borra recursos del servidor.
TRACE
Se usa para pedir un rastreo al servidor.
CONNECT
Mtodo reservado.
Clases servlets
26/10/2012
Ing. Froyln Ramrez Lpez
4
Para internet, las comunicaciones se realizan mediante el
protocolo HTTP.
Existen clases especificas para servlets que responden a
pedidos HTTP.
<<Interfaz>>
Servlet
<<abstracta>>
GenericServlet
<<abstracta>>
HttpServlet
HttpServlet
26/10/2012
Ing. Froyln Ramrez Lpez
5
Define los siguientes mtodos:
Protected void doDelete(HttpServletRequest, HttpServletResponse);
Protected void doGet(HttpServletRequest, HttpServletResponse);
Protected void doHead(HttpServletRequest, HttpServletResponse);
Protected void doOptions(HttpServletRequest, HttpServletResponse);
Protected void doPost(HttpServletRequest, HttpServletResponse);
Protected void doPut(HttpServletRequest, HttpServletResponse);
Protected void doTrace(HttpServletRequest, HttpServletResponse);
Protected void service(HttpServletRequest, HttpServletResponse);
void service(ServletRequest req, ServletReponse res);
Protected long getLastModified(HttpServletRequest);
HttpServletRequest
26/10/2012
Ing. Froyln Ramrez Lpez
6
Encapsula la informacin que contiene el pedido del cliente.
Objet getAttribute(String name)
Enumeration getAttributeNames()
Void removeAttribute(String name)
Void setAttribute(String name, Objetct o)
Locale getLocale()
Enumeration getLocales()
Map getPArameterMap()
Enumeration getParameterNames()
String[] getParameterValues(String name)
Cookie[] getCookies()
HttpSession getSession()
HttpSession getSession(boolean create)
String getRequestedSessionId()
HttpServletResponse
26/10/2012
Ing. Froyln Ramrez Lpez
7
Define datos y mtodos para manipular la informacin que
ser devuelta al cliente.
ServletOutputStream getOutputStream()
PrintWriter getWriter()
void addCookie(Cookie cookie)
void addHeader (String name, String value)
void setHeader (String name, String value)
boolean containsHeader(String name)
void sendRedirect(String location)
web.xml
26/10/2012
Ing. Froyln Ramrez Lpez
8
La especificacin define que la carpeta WEB-INF es donde
debe ir toda la informacin relativa a la aplicacin.
Define que dentro de esta carpeta debe existir el archivo
web.xml (deployment descriptor).
Archivo xml que contiene toda la informacin de configuracin
de la aplicacin.
26/10/2012
Ing. Froyln Ramrez Lpez
9
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name> A simple aplication</display-name>
<context-param>
<param-name> WebMaster</param-name>
<param-value> [email protected]</param-value>
</context-param>
<servlet>
<servlet-name>HolaMundo</servlet-name>
<servlet-class>HolaMundo</servlet-class>
<init-param>
<param-name> WebMaster</param-name>
<param-value> [email protected]</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HolaMundo</servlet-name>
<url-pattern>/HolaMundo</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
10
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
11
i mpor t j ava. i o. I OExcept i on;
i mpor t j ava. i o. Pr i nt Wr i t er ;
i mpor t j ava. ut i l . Random;
i mpor t j avax. ser vl et . Ser vl et Except i on;
i mpor t j avax. ser vl et . ht t p. Ht t pSer vl et ;
i mpor t j avax. ser vl et . ht t p. Ht t pSer vl et Request ;
i mpor t j avax. ser vl et . ht t p. Ht t pSer vl et Response;
i mpor t j avax. ser vl et . ht t p. Ht t pSessi on;
publ i c cl ass Ahor cadoSer vl et ext ends Ht t pSer vl et {
pr i vat e st at i c f i nal St r i ng[ ] PALABRAS = {"GATO", "CAPI LLA", "BABOR", "MUCI ELAGO", "VENTANAL", "FROYLAN"};
@Over r i de
pr ot ect ed voi d doGet ( Ht t pSer vl et Request r equest , Ht t pSer vl et Response r esponse)
t hr ows Ser vl et Except i on, I OExcept i on {
doPost ( r equest , r esponse) ;
}
@Over r i de
pr ot ect ed voi d doPost ( Ht t pSer vl et Request r equest , Ht t pSer vl et Response r esponse)
t hr ows Ser vl et Except i on, I OExcept i on {
Ht t pSessi on sessi on = r equest . get Sessi on( ) ;
i nt maxI nt ent os = I nt eger . par seI nt ( get I ni t Par amet er ( "maxI nt ent os") ) ;
St r i ng pal abr a = ( St r i ng) sessi on. get At t r i but e( " pal abr a") ;
St r i ng aci er t os;
St r i ng er r ados;
i f ( pal abr a == nul l ) {
Randomr and = new Random( ) ;
pal abr a = PALABRAS[ r and. next I nt ( PALABRAS. l engt h) ] ;
aci er t os = "";
er r ados = "";
sessi on. set At t r i but e( "pal abr a", pal abr a) ;
sessi on. set At t r i but e( "aci er t os", aci er t os) ;
sessi on. set At t r i but e( "er r ados", er r ados) ;
}
26/10/2012
Ing. Froyln Ramrez Lpez
12
el se{
aci er t os = ( St r i ng) sessi on. get At t r i but e( " aci er t os" ) ;
er r ados = ( St r i ng) sessi on. get At t r i but e( " er r ados" ) ;
St r i ng l et r a = r equest . get Par amet er ( " l et r a" ) ;
i f ( pal abr a. i ndexOf ( l et r a) >=0) {
aci er t os += l et r a;
}
el se{
er r ados += l et r a;
}
sessi on. set At t r i but e( " aci er t os" , aci er t os) ;
sessi on. set At t r i but e( " er r ados" , er r ados) ;
}
Pr i nt Wr i t er out = r esponse. get Wr i t er ( ) ;
out . pr i nt l n( " <ht ml >" ) ;
out . pr i nt l n( " <head>" ) ;
out . pr i nt l n( " <t i t l e>AHORCADO</ t i t l e>" ) ;
out . pr i nt l n( " </ head>" ) ;
out . pr i nt l n( " <body>" ) ;
out . pr i nt l n( " <h1>" ) ;
/ *i t er amos*/
f or ( i nt i = 0; i < pal abr a. l engt h( ) ; i ++) {
St r i ng l et r a = pal abr a. subst r i ng( i , i +1) ;
i f ( aci er t os. i ndexOf ( l et r a) >=0) {
out . pr i nt l n( " " +l et r a) ;
}
el se{
out . pr i nt l n( " _" ) ;
}
}
out . pr i nt l n( " </ h1>" ) ;
out . pr i nt l n( " <br / >" ) ;
26/10/2012
Ing. Froyln Ramrez Lpez
13
i f ( maxI nt ent os > er r ados. l engt h( ) ) {
out . pr i nt l n( " I nt ent os: " +( maxI nt ent os- er r ados. l engt h( ) ) ) ;
out . pr i nt l n( " <br / >" ) ;
f or ( char c = ' A' ; c <= ' Z' ; c++) {
i f ( aci er t os. i ndexOf ( Char act er . t oSt r i ng( c) ) ==- 1 &&
er r ados. i ndexOf ( Char act er . t oSt r i ng( c) ) ==- 1) {
out . pr i nt l n( " <a hr ef =\ " ahor cado?l et r a=" + c + " \ " >" +c + " </ a>" ) ;
}
}
}
el se{
sessi on. i nval i dat e( ) ;
out . pr i nt l n( " <h2>J uego t er mi nado! <h2>" ) ;
out . pr i nt l n( " <br / >" ) ;
out . pr i nt l n( " <a hr ef =\ " ahor cado\ " >J uegar de nuevo</ a>" ) ;
}
out . pr i nt l n( " </ body>" ) ;
out . pr i nt l n( " </ ht ml >" ) ;
}
}
Ejercicio
26/10/2012
Ing. Froyln Ramrez Lpez
14
Crear una pagina que contenga un formulario con los campos
Nombre
Numero1
Numero2
Al presionar el botn submit, el servidor debe regresar el
nombre y la suma de los nmeros.
26/10/2012
Ing. Froyln Ramrez Lpez
15
JavaServer Pages
JSP
JAVA WEB
Introduccin
26/10/2012
Ing. Froyln Ramrez Lpez
17
JSP es una especificacin de Sun Microsystems.
Sirve para crear y gestionar pginas web dinmicas.
Se utiliza para crear paginas con contenido esttico y
dinmico.
Su objetivo final es separar la interfaz (presentacin visual) de
la implementacin (lgica de ejecucin)
El contenido esttico es simplemente cdigo HTML, y el
contenido dinmico se diferencia mediante ciertos tags.
Las pginas JSP definen ciertos tags especficos para
determinar sentencias propias, marcadores de contenido
dinmico, etc..
Introduccin
26/10/2012
Ing. Froyln Ramrez Lpez
18
Pgina JSP -> Servlet
La pgina JSP se convierte en un servlet
La conversin la realiza en la mquina servidora el motor o
contenedor JSP, la primera vez que se solicita la pgina JSP
Este servlet generado procesa cualquier peticin para esa
pgina JSP
Si se modifica el cdigo de la pgina JSP, entonces se regenera
y recompila automticamente el servlet y se recarga la
prxima vez que sea solicitada
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
19
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Fecha en JSP</title>
</head>
<body>
<h1>Hello World!</h1>
<b><%= new java.util.Date()%></b>
</body>
</html>
Sintaxis
Comentarios
26/10/2012
Ing. Froyln Ramrez Lpez
20
JSP acepta dos tipos de comentarios.
Comentarios a nivel HTML.
<! Inicia seccion tablas datos -->
Comentarios JSP
<%-- Guarda resultados --%>
Los comentarios HTML son enviados junto con el resto de
la respuesta al cliente.
Los comentarios JSP no son incluidos en la respuesta.
Fragmentos de cdigo (Scriptlets)
26/10/2012
Ing. Froyln Ramrez Lpez
21
Para introducir cdigo Java en un JSP, se utilizan los tags:
<% cdigo %>
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
22
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Pgina de ejemplo de scriptlet</title>
</head>
<body>
<h1>Pgina de ejemplo de scriptlet</h1>
<%
for (int i = 0; i < 10; i++) {
out.println("<b>HOLA<b/><br/> ");
System.out.println("Consola " + i);
}
%>
</body>
</html>
Declaraciones
26/10/2012
Ing. Froyln Ramrez Lpez
23
Se pueden declarar mtodos y variables para utilizarlas
despus en la pgina:
<% declaraciones %>.
Se insertaran al comienzo de la clase, por lo que sern
variables y mtodos de clase.
Usadas para definir variables y mtodos con mbito de clase
para el servlet generado
Estas variables o mtodos declarados pasarn a ser variables
de instancia de la clase servlet generada
Esto significa que sern globales a todo el servlet generado
para la pgina
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
24
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Pgina de control de declaraciones</title>
</head>
<body>
<h1>Pgina de control de declaraciones</h1>
<%! int i = 0; %>
<% i++; %>
<p>HOLA MUNDO</p>
<p><%= "Este JSP ha sido accedido " + i + " veces"
%></p>
</body>
</html>
Expresiones
26/10/2012
Ing. Froyln Ramrez Lpez
25
Es una porcin de cdigo que se evala y su resultado se
imprime (no debe finalizarse con ;).
<%= expresin %>
<%@page import="java.util.Date"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Pgina de ejemplo de expresiones</title>
</head>
<body>
<h1>Pgina de ejemplo de expresiones</h1>
<p>Hola, son las: <%= new Date().toString() %></p>
</body>
</html>
Ejercicio
26/10/2012
Ing. Froyln Ramrez Lpez
26
Crea una pgina que muestre la tabla de multiplicar del
nmero de veces que ha ingresado el usuario a la pgina.
La primera vez que el usuario entre mostrar la tabla del 1.
La segunda vez que entre, la tabla del 2, y as consecutivamente.
Utiliza los elementos vistos en clase.
Objetos implcitos
26/10/2012
Ing. Froyln Ramrez Lpez
27
Variables implcitas en un JSP
request Subclase de ServletRequest
response Subclase de ServletResponse
pageContext PageContext
session HttpSession
aplication ServletContext
out JspWriter
config ServletConfig
page Object
exception Throwable
JSP utiliza los objetos implcitos, basados en la API de servlets.
Estos objetos estn disponibles para su uso en pginas JSP y son los siguientes:
26/10/2012
Ing. Froyln Ramrez Lpez
28
Objeto request
Proporciona entre otras cosas los parmetros recibidos del
cliente, el tipo de peticin (GET/POST)
Objeto response
Instancia de HttpServletResponse que representa la respuesta
del servidor a la peticin.
26/10/2012
Ing. Froyln Ramrez Lpez
29
out:
Es el PrintWriter usado para enviar la salida al cliente. Podemos
ajustar el tamao del buffer, o incluso desactivar el buffer, usando el
atributo buffer de la directiva page. Se usa casi exclusivamente en
scriptlets ya que las expresiones JSP obtienen un lugar en el stream de
salida, y por eso raramente se refieren explcitamente a out.
session:
Este es el objeto HttpSession asociado con la peticin. Las sesiones se
crean automticamente, salvo que se use el atributo session de la
directiva page para desactivar las sesiones, en cuyo caso los intentos
de referenciar la variable session causarn un error en el momento de
traducir la pgina JSP a un servlet.
26/10/2012
Ing. Froyln Ramrez Lpez
30
application:
El ServletContext obtenido mediante
getServletConfig().getContext().
pageContext:
contiene informacin sobre el contexto donde se ejecuta la
pagina JPS, y provee acceso a variables de contexto.
26/10/2012
Ing. Froyln Ramrez Lpez
31
config:
El objeto ServletConfig.
page:
Esto es slo un sinnimo de this, y no es muy til en Java. Fue
creado como situacin para el da que el los lenguajes de script
puedan incluir otros lenguajes distintos de Java.
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
32
Aplicacin que pide el nombre al usuario y le devuelve
un saludo . Utiliza un fichero HTML como formulario
que pide los datos al cliente y se los pasa a una pgina JSP
que muestra el saludo con estos datos. El paso de los
datos del formulario al JSP se realiza a travs de un
objeto implcito: objeto request
26/10/2012
Ing. Froyln Ramrez Lpez
33
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Formulario de petacn de nombre</title>
</head>
<body>
<h1>Formulario de petacn de nombre</h1>
<form method="post" action="saludo2.jsp" >
<p> Por favor, introduce tu nombre :
<input type="text" name="nombre">
</p>
<p>
<input type="submit" value="enviar informacin">
</p>
</form>
</body>
</html>
26/10/2012
Ing. Froyln Ramrez Lpez
34
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<title>Saludo al cliente</title>
</head>
<body>
<h1>Saludo al cliente</h1>
<%
String nombre = request.getParameter("nombre");
out.println("Encantado de conocerte, " +
nombre);
%>
</body>
</html>
Ejercicio
26/10/2012
Ing. Froyln Ramrez Lpez
35
Crea una calculadora bsica en JSP
(+,-,*,/).
Puedes tener 2 campos de texto para recibir los nmeros.
Las operaciones pueden ser botones.
El formulario debe ser enviado al mismo jsp que lo contiene
para mostrar el resultado.
Directivas
26/10/2012
Ing. Froyln Ramrez Lpez
36
Tag especial que se aplica a las pginas JSP
Ejemplo: <%@ page %>
Define dentro de una serie de atributos, configuraciones de
las paginas.
Las directivas existentes son las siguientes:
Page
Include
Taglib
<%@ page %>
26/10/2012
Ing. Froyln Ramrez Lpez
37
Esta directiva se usa para establecer las propiedades generales
de una pgina JSP. Podemos usar esta directiva varias veces a
lo largo de la pagina JSP, pero slo podemos asignar el valor
de un atributo una vez por cada una, excepto para el atributo
import. Los valores de la directiva se aplicarn a toda la
pagina.
<%@ page %>
26/10/2012
Ing. Froyln Ramrez Lpez
38
Sintaxis
<%@ page ATRIBUTOS %>
Donde ATRIBUTOS son parejas:
nombre=valor
Ejemplo:
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@page autoFlush="true" %>
<%@page buffer="256kb" %>
<%@page errorPage="false" %>
<%@page extends="java.applet.Applet" %>
<%@page import="java.util.ArrayList" %>
<%@page info="Esta es una pgina de ejemplo" %>
<%@page language="java" %>
<%@page session="true" %>
<%@ page %>
26/10/2012
Ing. Froyln Ramrez Lpez
39
Algunos de los atributos ms usados:
import ="package.class".
Lista de paquetes o clases, separados por comas, que sern
importados para utilizarse dentro del cdigo java.
session =true|false
Especifica si la pgina participa en una sesin HTTP. Si se inicializa a
true, est disponible el objeto implcito sesin.
buffer =tamaokb
La variable implcita out (de tipo JspWriter) contiene un buffer
interno para manejar el contenido que se va devolviendo al navegador.
Con este atributo definimos el tamao del buffer (en kilobytes) o
none si no queremos buffer de salida. Valor por defecto: 8Kb.
<%@ page %>
26/10/2012
Ing. Froyln Ramrez Lpez
40
autoflush ="true|false".
Un valor de true (por defecto) indica que el buffer debera
descargarse cuando est lleno. Un valor de false, raramente utilizado,
indica que se debe lanzar una excepcin cuando el buffe se
sobrecargue. Un valor de false es ilegal cuando usamos
buffer="none".
extends ="package.class".
Esto indica la superclase del servlet que se va a generar. Debemos
usarla con extrema precaucin, ya que el servidor podra utilizar una
superclase personalizada.
info ="message".
Define un string que puede usarse para ser recuperado mediante el
mtodo getServletInfo().
<%@ page %>
26/10/2012
Ing. Froyln Ramrez Lpez
41
errorPage="url".
Especifica una pgina JSP que se debera procesar si se lanzar cualquier
Throwable pero no fuera capturado en la pgina actual.
isErrorPage="true|false".
Indica si la pgina actual acta o no como pgina de error de otra pgina JSP.
El valor por defecto es false.
contentType = "MIME-Type" o contentType = "MIME-Type;
charset = Character-Set"
Esto especifica el tipo MIME de la salida. El valor por defecto es text/html.
Tiene el mismo valor que el scriptlet usando response.setContentType.
<%@ page %>
26/10/2012
Ing. Froyln Ramrez Lpez
42
isThreadSafe="true|false"
Mediante este atributo estamos declarando si esta pgina es
segura para el acceso multi-threaded. Si especificamos este
atributo como true, entonces el container puede mandar varios
pedidos concurrentes a esta pgina; caso contrario, serializar
los pedidos mandando de uno por vez. Valor por defecto: true.
language="java"
En algunos momentos, esto est pensado para especificar el
lenguaje a utilizar. Por ahora, no debemos precuparnos por l ya
que java es tanto el valor por defecto como la nica opcin
legal.
<%@ include %>
26/10/2012
Ing. Froyln Ramrez Lpez
43
Indica al motor JSP que incluya el contenido del fichero
correspondiente en el JSP, insertndolo en el lugar de la directiva
del JSP.
El contenido del fichero incluido es analizado en el momento de la
traduccin del fichero JSP y se incluye una copia del mismo
dentro del servlet generado.
Una vez incluido, si se modifica el fichero incluido no se ver
reflejado en el servlet
El tipo de fichero a incluir puede ser un
fichero HTML (esttico)
fichero jsp (dinmico)
Sintaxis: <%@ include file=Nombre del fichero %>
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
44
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>Pgina de prueba de directivas de
compilacin</title>
</head>
<body>
<h1>Pgina de prueba de directivas de compilacin</h1>
<%@include file="fichero.html" %>
<%@include file="fichero.jsp" %>
</body>
</html>
26/10/2012
Ing. Froyln Ramrez Lpez
45
Siendo, por ejemplo el fichero HTML el siguiente:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Hola mundo</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>Hola mundo</h1>
</body>
</html>
y el fichero JSP el siguiente:
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@page info="Un ejemplo Hola Mundo" import="java.util.Date" %>
La fecha de hoy es: <%= new Date().toString() %>
<%@ taglib %>
26/10/2012
Ing. Froyln Ramrez Lpez
46
Permite extender los marcadores de JSP con etiquetas o marcas
generadas por el propio usuario (etiquetas personalizadas).
Se hace referencia a una biblioteca de etiquetas que contiene
cdigo Java compilado definiendo las etiquetas que van a ser
usadas, y que han sido definidas por el usuario
Sintaxis
<%@ taglib uri=taglibraryURI prefix=tagPrefix %>
scopes
26/10/2012
Ing. Froyln Ramrez Lpez
47
Define dnde y durante cuanto tiempo estn accesibles los
objetos (Objetos implcitos, JavaBeans, etc.)
Tipos de mbitos:
de pgina. El objeto es accesible por el servlet que representa
la pgina
de peticin objetos compartidos entre las diferentes pginas
que manejan una peticin, por ejemplo, una pgina y la que
maneje errores de la primera, o una pgina y otra a la que se
pasa control con la orden jsp:forward
de sesin. El objeto es accesible durante toda la sesin, desde
los servlets a los que se accede
de aplicacin. El objeto es accesible por toda la aplicacin
Acciones (Tags) estndar
26/10/2012
Ing. Froyln Ramrez Lpez
48
Son marcas estndar, con formato XML, que afectan al
comportamiento en tiempo de ejecucin del JSP y la respuesta se
devuelve al cliente.
En la traduccin de JSP al servlet, la marca se reemplaza por
cierto cdigo Java que define a dicha marca. Una marca por tanto
define un cierto cdigo Java (es como una macro)
Constan de un prefijo y un sufijo adems de una serie de atributos.
El prefijo es siempre jsp en las acciones estndar
Sintaxis
<jsp:sufijo atributos/>
Ejemplo
<jsp:include page=mijsp.jsp flush=true />
Acciones estndar existentes
26/10/2012
Ing. Froyln Ramrez Lpez
49
<jsp:include>
<jsp:forward>
<jsp:param>
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
<jsp:plugin>
Accin jsp:include
26/10/2012
Ing. Froyln Ramrez Lpez
50
Permite incluir un recurso especificado por la URL, en la
peticin JSP en tiempo de ejecucin.
El elemento incluido puede acceder al objeto request de la
pgina padre, y adems de los parmetros normales, a los que
se aadan con <jsp:param>
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
51
JSP que incluye scriplets.jsp
<body>
<h1>Hello World!</h1>
<jsp:include page="scriplets2.jsp" flush="true">
<jsp:param name="parametro" value="valor"></jsp:param>
</jsp:include>
</body>
scriplets.jsp ejecuta el siguiente cdigo:
<%
out.print("El parametro que me enviaron fue: "
+ request.getParameter("parametro"));
for (int i = 0; i < 10; i++) {
out.println("<b> Hola a todos. Esto es un ejemplo de scriptlet "
+ i + "</b><br/>");
System.out.println("Esto va al stream System.out" + 1);
}
%>
Accin include vs Directiva include
26/10/2012
Ing. Froyln Ramrez Lpez
52
Es importante distinguir entre directiva include y accin
include
Directiva <%@ include file=Nombre fichero /> se aade
el cdigo al servlet que se genera para la pgina en tiempo de
compilacin y se incluye el contenido EXISTENTE EN EL
MOMENTO INICIAL.
Accin <jsp:include> no se aade cdigo al servlet, sino que
se invoca al objeto en tiempo de ejecucin y se ejecuta el
contenido EXISTENTE EN EL MOMENTO DE LA PETICIN
Accin jsp:param
26/10/2012
Ing. Froyln Ramrez Lpez
53
Se usa como submarca dentro de cualquier otra marca
Sirve para pasar parmetros a un objeto
Sintaxis
<jsp:.... >
<jsp:param name=nombre clave value=valor /> (no
obligatorios)
....
</jsp:.... >
Accin jsp:forward
26/10/2012
Ing. Froyln Ramrez Lpez
54
Esta marca permite que la peticin sea redirigida a otra pgina JSP,
a otro servlet o a otro recurso esttico
Muy til cuando se quiere separar la aplicacin en diferentes
vistas, dependiendo de la peticin interceptada.
Cuando se ejecuta el servlet se redirige hacia otro servlet y no se
vuelve al servlet original
Sintaxis
<jsp:forward page=URL >
<jsp:param name=nombre clave value=valor /> (no
obligatorios)
....
</jsp:forward>
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
55
26/10/2012
Ing. Froyln Ramrez Lpez
56
El programa saludoforward.jsp podra ser el siguiente:
Ejercicio
26/10/2012
Ing. Froyln Ramrez Lpez
57
Crea una pgina que adivine el horscopo.
La pgina debe recibir la fecha de nacimiento del usuario.
Posteriormente debe mostrar el horscopo de la persona
eligiendo de 36 posibles predicciones.
La prediccin es aleatoria.
Accin jsp:useBean
26/10/2012
Ing. Froyln Ramrez Lpez
58
Esta marca sirve para instanciar un JavaBean si no existe, o
localizar una instancia ya existente, para su uso desde la pgina.
Los JavaBeans son objetos Java que cumplen ciertas
caractersticas en cuanto a su diseo: son serializables y
tienen un constructor implcito.
Se utilizan para reducir al mximo el cdigo Java insertado en una
pgina JSP. En lugar de meterlo directamente en el fichero JSP se
mete en una clase y una instancia de sta se llama desde el JSP
Permite separar la lgica de ejecucin (en el JavaBean) de la
presentacin (en el servlet generado)
Se encapsula el cdigo Java en un objeto (JavaBean) y se instancia y
usa con el JSP.
26/10/2012
Ing. Froyln Ramrez Lpez
59
Los JavaBeans se caracterizan porque a sus atributos (llamados
propiedades) se acceden (por convenio) a travs de los mtodos
setNombreAtributo y getNombreAtributo
Ojo, si el nombre va en minsculas el mtodo lleva la inicial del
nombre en maysculas para nombre se pone getNombre.
Si se usa un JavaBean en una pgina habr que definir la clase
correspondiente, creando los mtodos set y get para los
atributos definidos. Normalmente se suele definir dentro de un
paquete.
Dentro del servlet generado se puede llamar a mtodos de un
JavaBean que se encarguen de realizar ciertas operaciones y el
servlet muestra el resultado de las mismas
Ventaja del traslado de la lgica a un JavaBean
Separacin de interfaz de la implementacin
26/10/2012
Ing. Froyln Ramrez Lpez
60
Sintaxis
<jsp:useBean id=nombre scope=nombrembito
detalles />
Caractersticas de los atributos de esta accin:
En id se define el nombre asignado al JavaBean (identificador
asociado)
El mbito se refiere a dnde puede referenciarse el JavaBean.
Permite compartir objetos en una sesin
page,request,session y application
26/10/2012
Ing. Froyln Ramrez Lpez
61
Los detalles pueden ser:
class=Nombre de la clase del JavaBean (es lo que ms se usa)
id: Da un nombre a la variable que referencia al bean. Se usar un objeto
bean anterior en lugar de instanciar uno nuevo si se puede encontrar uno con
el mismo id y scope.
scope: Indica el contexto en el que el bean debera estar disponible. Hay
cuatro posibles valores: page, request, session, y application.
type: Especifica el tipo de la variable a la que se referir el objeto.
beanName: Da el nombre del bean, como lo suministraramos en el
mtodo instantiate de Beans. Esta permitido suministrar un type y un
beanName, y omitir el atributo class.
Accin jsp:setProperty
26/10/2012
Ing. Froyln Ramrez Lpez
62
Esta marca se utiliza junto con la marca useBean para asignar valor
a las propiedades del Bean
Dentro de un useBean
<jsp:useBean id="myName ... >
...
<jsp:setProperty name="myName"
property="someProperty" ... />
</jsp:useBean>
Slo se ejecuta cuando haya que instanciar un bean.
Accin jsp:setProperty
26/10/2012
Ing. Froyln Ramrez Lpez
63
Sintaxis
<jsp:setProperty name=identificador del Bean
detalles de la propiedad />
Donde los detalles pueden ser
property: Este atributo requerido indica la propiedad que queremos seleccionar.
Sin embargo, hay un caso especial: un valor de "*" significa que todos los
parmetros de la peticin cuyos nombres correspondan con nombres de
propiedades del Bean sern pasados a los mtodos de seleccin apropiados.
value: Este atributo opcional especifica el valor para la propiedad. Los valores
string son convertidos automticamente a lo que corresponda mediante el
mtodo estndard valueOf. No se pueden usar value y param juntos, pero si est
permitido no usar ninguna.
param: Este parmetro opcional designa el parmetro de la peticin del que se debera
derivar la propiedad. Si la peticin actual no tiene dicho parmetro, no se hace nada: el
sistema no pasa null al mtodo seleccionador de la propiedad.
26/10/2012
Ing. Froyln Ramrez Lpez
64
property=* (se cogen como propiedades y valores todos los
parmetros del objeto request)
property=Nombre (se coge un parmetro con el mismo
nombre del objeto request)
property=Nombre param=NombreParmetro (si se desean
nombres distintos)
property=Nombre value=valor parmetro (se asignan
propiedades arbitrarias con valores concretos)
Ejemplo
26/10/2012
Ing. Froyln Ramrez Lpez
65
<HTML>
<head>
<title> Pgina de prueba del uso de beans </title>
</head>
<body>
<h1> Pgina de prueba del uso de beans </h1>
<form method="post" action="beans.jsp" >
<p> Por favor, introduce tu nombre:
<input type="text" name="nombre">
<br> Cul es tu lenguaje de programacin favorito?
26/10/2012
Ing. Froyln Ramrez Lpez
66
<select name="lenguaje">
<option value="Java"> Java
<option value="C++"> C++
<option value="Perl"> Perl
</select>
</p>
<p>
<input type="submit" value="enviar informacin">
</p>
</form>
</body>
</HTML>
26/10/2012
Ing. Froyln Ramrez Lpez
67
<jsp:useBean id="lenguajeBean" scope="page"
class="es.uniovi.di.servinfo.lenguaje.Lengu
ajeBean">
Usa un Bean generado a partir de la clase denominada
LenguajeBean que est en el paquete
es.uniovi.di.servinfo.lenguaje con mbito de pgina
<jsp:setProperty name="lenguajeBean"
property="*"/>
Las propiedades del Bean las toma del objeto peticin
</jsp:useBean>
<HTML>
<head><title> Resultado de prueba del uso de
beans </title> </head>
26/10/2012
Ing. Froyln Ramrez Lpez
68
<body> <h1> Resultado de prueba del uso de
beans </h1>
<p> Hola
<jsp:getProperty name="lenguajeBean"
property="nombre" />. </p>
coge el valor de la propiedad indicada y lo imprime para lo cual se
ejecuta un mtodo del Bean con el nombre de la propiedad
<p> Tu lenguaje favorito es
<jsp:getProperty name="lenguajeBean"
property="lenguaje" />. </p>
<p> Mis comentarios acerca del lenguaje
<p> <jsp:getProperty name="lenguajeBean"
property="comentariosLenguaje" />. </p>
</body> </HTML>
26/10/2012
Ing. Froyln Ramrez Lpez
69
package es.uniovi.di.servinfo.lenguaje;
public class LenguajeBean {
// propiedades
private String nombre;
private String lenguaje;
// constructor implicito, no hace falta declararlo
public LenguajeBean() {}
public void setNombre(String nombre) {
this.nombre=nombre;
}
// Recupera el valor de la propiedad nombre
public String getNombre() {
return nombre;
}
// Coloca el valor a la propiedad lenguaje
public void setLenguaje(String lenguaje) {
this.lenguaje=lenguaje;
}
// Consigue el valor de la propiedad Lenguaje
public String getLenguaje() {
return lenguaje; }
26/10/2012
Ing. Froyln Ramrez Lpez
70
/*Consigue el valor de la propiedad comentariosLenguaje */
public String getcomentariosLenguaje () {
if (lenguaje.equals("Java")) {
return "El rey de los lenguajes Orientados a objetos";
}
else if (lenguaje.equals("C++")) {
return "Demasiado complejo";
}
else if (lenguaje.equals("Perl")) {
return "OK si te gusta el cdigo incomprensible"; }
else {
return "Lo siento, no conozco el lenguaje " + lenguaje
;
}
}
}