Está en la página 1de 37

Java Server Pages (JSP)

Contenido
1.

Primer vistazo a la tecnologa JSP Qu es y para qu sirve JSP Primer ejemplo Hola Mundo y la fecha Uso de objetos implcitos y ejemplo
Elementos bsicos de una pgina JSP Directivas <%@ (page | include | taglib) Cdigo Java <% (declaraciones | java | expresiones)

-> Ejercicio: instalacin y ejecucin de la primera aplicacin web con tecnologa JSP
1.

-> Ejercicios de manejo de ejemplos simples


Acciones estndar <jsp:accin (include |forward | usebean| getproperty | setproperty)

-> Ejercicios de manejo de JavaBeans


1.

Elementos Avanzados de una pgina JSP Acciones personalizadas (etiquetas)


Definicin de la estructura (biblioteca.tld y sta en web.xml) Nombre, clase controladora, atributos, cuerpo, etc. Definicin de la funcionalidad (JavaBean que deriva de taglib) Declaracin en pgina con <%@taglib y uso posterior

-> Ejercicios de manejo de Etiquetas personalizadas


2

Introduccin a JSP

JSP es una especificacin de Sun Microsystems Sirve para crear y gestionar pginas web dinmicas Permite mezclar en una pgina cdigo HTML para generar la parte esttica, con contenido dinmico generado a partir de marcas especiales <% .... %> El contenido dinmico se obtiene, en esencia, gracias a la posibilidad de incrustar dentro de la pgina cdigo Java de diferentes formas Hay 3 formas de aadir contenido dinmico Su objetivo final es separar la interfaz (presentacin visual) de la implementacin (lgica de ejecucin)
3

Introduccin a JSP
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
Traduce Compila

Fichero.jsp

Motor JSP

ServletJsp.java

Compila dor java

ServletJsp.class

Funcionamiento
Peticin fichero.jsp

Cliente
Respuesta

Servidor Web

peticin respuesta

Extensiones del servidor


respuesta respuesta

1 vez

Motor JSP
1 vez

Motor Servlet Compilador Java

peticin 1 vez

Analizador JSP Fichero.JSP

Cargador Clases ServletJSP.class


5

ServletJSP.java

Primer ejemplo de JSP


Ejemplo de pgina que dice Hola y escribe la fecha actual (fichero ej1_hola.jsp)
<%@ page info="Un Hola Mundo import="java.util.Date" %> <HTML> <head> <title> Hola, Mundo </title> </head> <body> <h1> Hola, Mundo! </h1> La fecha de hoy es: <%= new Date().toString() %> </body> </HTML>

En esta pgina se mezcla cdigo HTML con cdigo Java incrustado con unas marcas especiales En este caso es una expresin, que se sustituye en la pgina por el resultado de evaluarla En otros casos es un trozo de cdigo Java que simplemente se ejecuta
6

Ciclo de vida del servlet generado


Cuando se llama por primera vez al fichero JSP, se genera un servlet con las siguientes operaciones jspInit() Inicializa el servlet generado Slo se llama en la primera peticin jspService(peticin,respuesta) Maneja las peticiones. Se invoca en cada peticin, incluso en la primera jspDestroy() Invocada por el motor para eliminar el servlet
7

Servlet generado por un JSP


En el mtodo _jspService se introduce automticamente el contenido dinmico de la pgina JSP. El cdigo html se transforma en una llamada al objeto out donde se vuelca el contenido En el ejemplo:
out.write("\r\n\r\n<HTML>\r\n<head> <title> Hola, Mundo </title> </head>\r\n\r\n<body> <h1> Hola, Mundo! </h1> \r\nLa fecha de hoy es: ");

El cdigo dinmico se traduce en funcin del contenido Ej: El cdigo jsp <%= new Date().toString() %> se traduce por out.print( new Date().toString() );

Servlet generado por un JSP


En la primera invocacin de esta pgina se genera automticamente el siguiente servlet:
public class ej1_0005fhola$jsp extends HttpJspBase { ..... public final void _jspx_init() throws JasperException { ... public void _jspService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { .... JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; String _value = null;

Servlet generado por un JSP


try { if (_jspx_inited == false) { _jspx_init(); _jspx_inited = true; } _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/HTML;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response,"", true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut();

10

Servlet generado por un JSP


// HTML // begin [file="C:\\web\\jakartatomcat3.2.2\\webapps\\marian\\hola.jsp";from=(0,40);to=( 6,20)] out.write("\r\n\r\n<HTML>\r\n<head> <title> Hola, Mundo </title> </head>\r\n\r\n<body> <h1> Hola, Mundo! </h1> \r\nLa fecha de hoy es: "); // end // begin [file="C:\\web\\jakartatomcat3.2.2\\webapps\\marian\\hola.jsp";from=(6,23);to=( 6,46)] out.print( new Date().toString() ); // end // HTML // begin [file="C:\\web\\jakartatomcat3.2.2\\webapps\\marian\\hola.jsp";from=(6,48);to=( 11,0)] out.write("\r\n\r\n</body>\r\n</HTML>\r\n\r\n"); // end
11

Objetos implcitos

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: Objeto request Representa la peticin lanzada en la invocacin de service(). 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. mbito de pgina

12

Objetos implcitos

out: Es el PrintWriter usado para enviar la salida al cliente. Es una versin con buffer de PrintWriter llamada JspWriter. 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.
13

Objetos implcitos

application: El ServletContext obtenido mediante getServletConfig().getContext(). config: El objeto ServletConfig. pageContext: JSP presenta una nueva clase llamada PageContext para encapsular caractersticas de uso especficas del servidor como JspWriters de alto rendimiento. La idea es que, si tenemos acceso a ellas a travs de esta clase en vez directamente, nuestro cdigo seguir funcionando en motores servlet/JSP "normales". 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.
14

mbitos
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 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 el servlet que representa la pgina

15

Ejemplo de objetos implcitos


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
Objeto request (contiene los parmetros de la peticin)

Formulario HTML (pide datos al cliente)

Pgina JSP (muestra saludo personalizado al cliente)

16

Ejemplo de objetos implcitos


Fichero HTML que pide los datos al cliente (ej2_saludo.html)
<HTML> <head> <title> Formulario de peticin de nombre </title> </head> <body> <h1> Formulario de peticin de nombre </h1> <!-- Se enva el formulario al JSP saludo.jsp --> <form method="post" action="saludo.jsp" > <p> Por favor, introduce tu nombre: <input type="text" name="nombre"> </p> <p> <input type="submit" value="enviar informacin"> </p> </form> </body> </HTML>
17

Ejemplo de objetos implcitos


Fichero JSP que opera dinmicamente con los datos del cliente y muestra los resultados (ej2_saludo.jsp)
<HTML> <head><title> Saludo al cliente </title></head> <body> <h1> Saludo al cliente</h1> <!-- Los parmetros que le pasa el cliente en la peticin se obtienen del objeto implcito request --> <% String nombre = request.getParameter(nombre"); out.println(Encantado de conocerle, + nombre); %> <!-- Al evaluarse el cdigo, hay que escribir explcitamente en la salida (obj. implcito out) --> </body> </HTML>
18

Elementos de una pgina JSP


Cdigo HTML Adems de cdigo HTML la pgina JSP puede incluir marcadores que se agrupan en tres categoras:

Directivas. Afectan a toda la estructura del servlet generado Elementos de Scripting (guiones) Permiten insertar cdigo Java en la pgina JSP Acciones Afectan al comportamiento en tiempo de ejecucin del JSP

19

Directivas JSP

Utilizadas para definir y manipular una serie de atributos dependientes de la pgina que afectan a todo el JSP. Las directivas existentes son las siguientes:

Page Include Taglib

20

Directivas de JSP - Directiva Page


Sintaxis <%@ page ATRIBUTOS %>

Donde ATRIBUTOS son parejas: nombre=valor Ejemplo:

<%@ page language=Java import=java.rmi.*,java.util.* session=true buffer=12kb %>

Existe una lista de atributos que pueden ser usados


21

Directivas de JSP - Directiva Page


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 Especifica el tamao de un buffer de salida de tipo stream, para el cliente.

22

Directivas de JSP - Directiva Page

autoflush ="true|false".

Un valor de true (por defecto) indica que el buffer debera desacargase 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".
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. Define un string que puede usarse para ser recuperado mediante el mtodo getServletInfo.

extends ="package.class".

info ="message".

23

Directivas de JSP - Directiva Page

errorPage="url".

Especifica una pgina JSP que se debera procesar si se lanzar cualquier Throwable pero no fuera capturado en la pgina actual.
Indica si la pgina actual acta o no como pgina de error de otra pgina JSP. El valor por defecto es false.

isErrorPage="true|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.

24

Directivas de JSP - Directiva Page

isThreadSafe="true|false"

Un valor de true (por defecto) indica un procesamiento del servlet normal, donde mltiples peticiones pueden procesarse simultneamente con un slo ejemplar del servlet, bajo la suposicin que el autor sincroniza los recursos compartidos. Un valor de false indica que el servlet debera implementar SingleThreadModel.
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.

language="java"

25

Directivas de JSP - Directiva Include

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 %>


26

Ejemplo de la Directiva Include


Ejemplo:Pgina JSP que incluye el contenido de dos ficheros (una pgina HTML y una pgina JSP)
<HTML> <head> <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>

27

Ejemplo de la Directiva Include

Siendo, por ejemplo el fichero HTML el siguiente:

<HTML> <head> <title> Hola, Mundo </title> </head> <body> <h1> Hola, Mundo! </h1> </body> </HTML>

y el fichero JSP el siguiente:

<%@ page info="Un ejemplo Hola Mundo" import="java.util.Date" %> La fecha de hoy es: <%= new Date().toString() %>

28

Directivas de JSP - Directiva Taglib

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 %>

29

Elementos de una pgina JSP

Cdigo HTML Directivas page include taglib Elementos de Scripting (guiones) Acciones (marcas estandar)

30

Elementos Scripting

Permiten la insercin de Declaraciones, Cdigo Java (scriptlets) y Expresiones dentro de una pgina JSP Hay 3 categoras: Declaraciones Cdigo Java arbitrario Expresiones

31

Elementos Scripting - Declaraciones

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 Sintaxis
<%! Declaracin %>

Ejemplo:
<%! int contador >
32

Ejemplo de uso de Declaraciones


Uso de un contador que indica el nmero de veces que se accede a una pgina (ej5_declaraciones.jsp)
<HTML> <head><title> Pgina de control de declaraciones </title></head> <body> <h1> Pgina de control de declaraciones </h1> <%! int i=0 ; %> <!-- Esto es una declaracin --> <% i++; %> <!-- scriptlet (cdigo Java) que se ejecuta-> HOLA MUNDO <%= "Este JSP ha sido accedido " + i + veces" %> <!-- Esto es una expresin que se evala y se sustituye en la pgina por su resultado --> </body> </HTML>
33

Elementos Scripting - Scriptlets

Un scriptlet es un bloque de cdigo Java insertado en la pgina y

ejecutado durante el procesamiento de la respuesta


El cdigo introducido se inserta directamente en el mtodo _jspService() del servlet generado para la pgina Sintaxis

<% cdigo Java

%>

Ejemplo
<% int i,j; for (i=0;i<3;i++) { j=j+1; } %>
34

Ejemplo de uso de Scriptlets

Pgina JSP que usa cdigo Java para repetir 10 veces un saludo

<HTML> <head><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 a todos. Esto es un ejemplo de scriptlet " + i + "</b><br>"); System.out.println("Esto va al stream System.out" + i ); //Esto ltimo va a la consola del Java, no al cliente, //out a secas es para la respuesta al cliente. } %> </body> </HTML>
35

Elementos Scripting - Expresiones


Notacin abreviada que enva el valor de una expresin Java al cliente. La expresin se traduce por la llamada al mtodo println del objeto out dentro del mtodo _jspService(), con lo que en cada peticin, la expresin es evaluada y el resultado se convierte a un String y se visualiza Sintaxis <%= Expresin Java a evaluar %> Ejemplo

<%= Esta expresin muestra el valor de un contador + contador %>

Nota: ser necesario que previamente contador haya tomado un valor a travs de un scriptlet
36

Ejemplo de uso de Expresiones


En esta pgina JSP la expresin consiste en crear un objeto y llamar a uno de sus mtodos. El resultado es un string que se muestra al cliente
<HTML> <head> <title> Pgina de ejemplo de expresiones </title> </head> <body> <h1> Pgina de ejemplo de expresiones </h1> Hola a todos, son las <%= new Date().toString() %> </body> </HTML>

37

También podría gustarte