Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare una empresa de Scribd logo
M. en I.S.C. Leonardo M. Moreno Villalba Programación Web
JSP (JavaServer Pages) M. en I.S.C. Leonardo M. Moreno Villalba
Introducción a JSP (JavaServer Pages) Se puede decir que la tecnología JSP es una extensión de la tecnología ofrecida por los servlets creada para ofrecer soporte a la creación de páginas HTML y XML. Las páginas JSP hacen muchos más fácil combinar plantillas de presentación de la información con contenido dinámico. Las páginas JSP realmente son compiladas dinámica y automáticamente en forma de servlets, de esta forma presentan todos los beneficios de los servlets, así como el completo acceso a todos loa APIs que ofrece el lenguaje Java. JSP es una extensión de los servlets, y las páginas JSP y los servlet se pueden combinar para trabajar conjuntamente, veremos que las páginas se compilan de forma automática en servlets y veremos que desde una página JSP podremos utilizar un servlet y viceversa (incluyendo su contenido, ejecutándolo o redirigiendo el navegador).
Definición de página JSP Una página JSP va a ser un fichero de texto con la extensión JSP, que combina etiquetas HTML con nuevas etiquetas de script pertenecientes a la especificación JavaServer Pages 1.1. Una página JSP va a tener un aspecto muy similar al de una página HTML, pero se transformarán en clases de Java que son servlets para compilarse y generar los ficheros de clase correspondientes, esta operación se dará cuando se ejecute una página JSP por primera vez, o cuando se modifique una página JSP existente. El servlet que resulta de la transformación de la página JSP es una combinación del código HTML contenido en la página JSP y del contenido dinámico indicado por las etiquetas especiales pertenecientes a la especificación JSP.
Definición de página JSP Dentro de una página JSP se puede diferenciar claramente entre dos elementos (o categorías), por un lado encontramos elementos que son procesados por el servidor que contiene el contenedor de páginas JSP, y por otro lado encontramos código que el contenedor de páginas JSP ignora, normalmente este código suele ser código HTML que se devuelve al cliente como tal. Cuando un cliente realiza una petición de una página JSP, se ejecutará dicha página JSP devolviendo como resultado código HTML que se mostrará en el navegador, este código HTML es el resultado de la ejecución de la página JSP y comprende el código HTML contenido en la página y el resultado del contenido dinámico que ha sido ejecutado por el contenedor de páginas JSP. El cliente (navegador Web), nunca va a poder observar el código fuente de la página JSP, lo que recibe es el resultado de la ejecución de la misma.
Beneficios de las páginas JSP Las páginas JSP ofrecen una serie de ventajas sobre los servlets, que hacen su uso más idóneo para la generación de contenidos dinámicos dentro de un sitio Web. Unos de los mayores beneficios que ofrecen las páginas JSP es la separación del contenido estático o presentación del resultado del contenido dinámico o la implementación de la lógica que produce el resultado. En los servlets si deseamos modificar algo relacionado con el interfaz de usuario debemos modificar el código fuente del servlet y volver a compilarlo, lo que supone un problema, ya que por muy pequeño que sea el cambio a realizar siempre afecta al código fuente del servlet.
Beneficios de las páginas JSP Además de los delimitadores de scriptlets (fragmentos de código fuente escritos en lenguaje Java), las páginas JSP ofrecen una serie de etiquetas especiales al estilo de las etiquetas XML, que permiten realizar una serie de acciones determinadas. A través de las etiquetas propias de JSP podemos reutilizar componentes Java que siguen la especificación JavaBeans, con lo que nos permite abstraernos mucho más de la implementación de la aplicación Web. Una modificación en una página JSP la recogerá de forma automática el contendor de páginas JSP, precompilando de forma automática la página para generar la clase del servlet correspondiente.
Beneficios de las páginas JSP Como resumen de las facilidades ofrecidas por las páginas JSP sobre los servlets podemos destacar los siguientes puntos: Con las páginas JSP es más sencillo combinar plantillas estáticas de etiquetas HTML o XML con el código que genera el contenido dinámico. Las páginas JSP se compilan de forma dinámica en un servlet cuando se realiza una petición. La estructura de las páginas JSP hace más fácil el diseño de páginas a manos de los diseñadores Web. Además están apareciendo herramientas que nos asisten en la creación y diseño de páginas JSP, como puede ser JRun Studio de Allaire. Las etiquetas que ofrecen las páginas JSP para invocar a componentes JavaBeans, permiten utilizar a los autores de estas páginas la funcionalidad de estos componentes sin tener que conocer la complejidad de su implementación.
Elementos de las páginas JSP Para clasificar los elementos que podemos encontrar dentro de una página JSP podemos realizar una primera división muy general en la que dividimos los elementos de las páginas JSP en dos grandes categorías: elementos estáticos que no son interpretados por el contenedor de páginas JSP y que son devueltos sin ningún tipo de tratamiento para que los interprete el navegador, y elementos dinámicos que son interpretados por el contenedor de páginas JSP devolviendo al navegador el resultado de la ejecución de los mismos.
Elementos dinámicos que puede presentar una página JSP.
Directivas Directivas: las directivas funcionan como mensajes que se envían desde la página JSP al contenedor de páginas JSP. Se utilizan para establecer valores globales que afectarán a la página JSP actual, estas directivas no presentan ninguna salida al cliente. Su sintaxis general es la que se indica a continuación. <%@nombreDirectiva atributo1=”valor1”...atributon=”valorn”%>
Elementos de scripting Elementos de scripting: estos elementos permiten incluir código Java en la página JSP. Permiten declarar objetos, instanciarlos, ejecutar métodos, definirlos, etc. Los elementos de scripting se pueden separar en cuatro subelementos que son: Declaraciones: son bloques de código Java incluido en la página JSP utilizados para declarar variables y métodos propios dentro de la página JSP. Un bloque de declaración se encuentra entre los delimitadores <%! %>. Scriptlets: un scriptlet es un fragmento de código Java incluido en una página JSP que se ejecutará cuando se realice una petición de la misma. Un scriptlet se encontrará entre los delimitadores <% %>, como curiosidad cabe comentar que estos delimitadores son los mismos que utilizan las páginas ASP (Active Server Pages) para delimitar el script de servidor. En un scriptlet podemos encontrar cualquier código Java válida, no debemos olvidar que las páginas JSP al igual que los servlets pueden utilizar todos los APIs ofrecidos por el lenguaje Java.
Elementos de scripting Expresiones: una expresión es una notación especial para un scriptlet que devuelve un resultado a la respuesta dada al usuario, la expresión se evalúa y se devuelve como una cadena que se envía al cliente. Una expresión se encuentra entre los delimitadores<%= %>, que son también los mismos delimitadores que se utilizan para devolver el valor de expresiones dentro de una página ASP. Comentarios: estos elementos permiten documentar nuestro código fuente, se encuentran entre los delimitadores <%-- --%>. Estos comentarios no serán visibles en el navegador, ya que son comentarios de JSP que serán tratados por el contenedor de páginas JSP, no se deben confundir con los comentarios HTML (<!-- -->), que si serán visibles desde el navegador y enviados como tales al usuario.
Acciones Acciones: las acciones son etiquetas específicas de JSP que afectan al comportamiento de la página JSP y a la respuesta enviada al usuario. La especificación JSP define una serie de acciones estándar que todo contenedor de páginas JSP debe ofrecer. Estas acciones ofrecen al diseñador de páginas JSP una funcionalidad bastante interesante, que veremos en detalle cuando tratemos las acciones en siguientes capítulos. También es posible definir acciones determinadas mediante el mecanismo de librerías de etiquetas. La sintaxis general de una acción JSP es: <jsp: accion>
Objetos implicitos Objetos implícitos o integrados: estos objetos se suelen utilizar dentro de expresiones o scriptlets, y no necesitan ser declarados ni instanciados, se encuentran disponibles dentro de cada página JSP. Casi todos estos objetos implementan interfaces que podíamos encontrar en los servlets, como pueden ser el interfaz HttpServletRequest, HttpServletResponse o HttpSession. Estos objeto son similares a los objetos integrados que ofrece ASP.
Ejemplo <%@ page language=&quot;Java&quot;%> <html> <head> <title>Hola mundo con esto es mi primer JSP</title> </head> <body> <%--Esto es un comentario--%> <div align=&quot;center&quot;> <b><%out.println(&quot;Hola Mundo&quot;);%></b> </div> </body> </html>
Comparación entre el código de un servlet y un JSP Si comparamos el código fuente de la página JSP, con el código fuente del servlet equivalente que devolverá el mismo resultado, vemos que es mucho más sencillo el código fuente de la página JSP, además de ser más claro. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHolaMundo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType(&quot;text/html&quot;); PrintWriter out = response.getWriter(); out.println(&quot;<html>&quot;+ &quot;<head><title>Hola Mundo con un servlet</title></head>&quot;+ &quot;<body><div align='center'><b>Hola Mundo </b></div>&quot;+ &quot;</body></html>&quot; ); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ doGet(request,response); } }
Ejemplo <%@ page language=&quot;Java&quot; import=&quot;java.util.*&quot;%> <html> <head> <title>Hola mundo con JSP</title> </head> <%--Esto es un comentario--%> <body> <div align=&quot;center&quot;> <b> <%!String nombre;%> <%nombre=request.getParameter(&quot;nombre&quot;); if (nombre!=null) out.println(&quot;Hola &quot;+nombre); else out.println(&quot;Hola Mundo&quot;);%> <br>La fecha y hora actuales son:</b><i><%=new Date()%></i> </div> </body> </html>
Ejecución de las páginas JSP A cada página JSP le corresponde un servlet que se genera de forma automática, y al invocar la página JSP es realmente este servlet el que se ejecuta.
Ejecución de las páginas JSP
Estructura de los contenedores del servidor Tomcat
Ejemplo <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Hola Mundo 7 veces</title> </head> <body> <%for (int i=1;i<=7;i++){%> <font size=&quot;<%=i%>&quot;>Hola Mundo</font><br> <%}%> </body> </html>
Páginas JSP: Directivas
Introducción A partir de aquí iremos detallando el uso y sintaxis de estas etiquetas especiales que ofrece la especificación JSP, cada etiqueta tendrá una traducción en el servlet que genere el contenedor de páginas JSP. El primer elemento de las páginas JSP que vamos a tratar son las directivas, que se corresponden con una etiqueta especial de JSP que puede utilizarse utilizando la sintaxis XML, y se comenta en el siguiente apartado.
Directivas Las directivas son un conjunto de etiquetas JSP que ofrecen al contenedor de páginas JSP instrucciones específicas de cómo se debe procesar una página determinada. Las directivas definen propiedades generales que afectan a la página, incluso algunas de estas directivas se pueden utilizar para generar de forma indirecta contenido dinámico que será devuelto como parte de la respuesta enviada al cliente, y por lo tanto tienen una traducción correspondiente dentro del servlet equivalente a la página JSP. Las directivas sirven como mensajes que se envían desde la página JSP al contendor JSP que la ejecuta Un ejemplo de uso de las directivas puede ser para indicar el tipo de lenguaje (lenguaje de script) que se va a utilizar dentro de la página JSP, para incluir contenidos de otra página o recurso del servidor, para indicar que la página usa una librería de etiquetas personalizada determinada, para importar paquetes del lenguaje Java, etc.
Directivas Las directivas no generan directamente una salida que se envíe al cliente de forma directa, sino que generan efectos laterales en la forma en la que el contenedor JSP procesa la página en la que se encuentra definida la directiva. Las directivas se pueden situar en cualquier lugar de la página, pero para una mayor legibilidad del código de la página se recomienda que se sitúen al principio de la misma.
Reglas de sintaxis Las etiquetas tienen una etiqueta de inicio con atributos opcionales, un cuerpo opcional, y una etiqueta de cierre, como se puede ver en la siguiente sintaxis: <etiquetaJSP nombreAtributo=”valor atributo”> cuerpo </etiquetaJSP> También puede aparecer estas etiquetas sólo con una etiqueta de inicio sin cuerpo y con atributos opcionales, como se puede ver en el siguiente esquema: <etiquetaJSP nombreAtributo=”valor atributo”/> Los valores de los atributos de las etiquetas siempre aparecen entre comillas dobles o sencillas. Las cadenas especiales &apos; y &quot; se pueden utilizar (como se hace en HTML) si las comillas son parte del valor del atributo.
Reglas de sintaxis Un espacio en al cuerpo del contenido (texto) de un documento no es significante, pero es preservado, es decir, cualquier espacio en blanco en la página JSP se traduce y mantiene durante el proceso de generación del servlet correspondiente. El carácter se puede utilizar como carácter de escape en una etiqueta, por ejemplo para utilizar el carácter % (que veremos más adelante es una carácter especial que forma parte de la propia etiqueta de las directivas y de varios elementos de scripting) debemos usar la notación .
Directiva page Esta es la directiva más compleja de JSP debido a que permite especificar un gran número de propiedades que afectan a la página actual. Su sintaxis general es la siguiente: <%@ page atributo1=”valor1” ... Atributon=”valorn”%> Y la sintaxis equivalente en XML es: <jsp:directive.page atributo1=”valor1” ... atributon=”valorn”/>
Directiva page La directiva page ofrece hasta once atributos que nos permiten indicar al contenedor de páginas JSP una serie de propiedades que presenta la página JSP actual.  Estos atributos se pueden especificar todos juntos en una sólo línea de la directiva page, o bien en diferentes líneas utilizando distintas directivas page, pero teniendo en cuenta que un mismo atributo no puede aparecer en distintas directivas page, el único atributo que puede aparecer varias veces es el atributo import, que permite importar paquetes de clases del lenguaje Java.
Ejemplo <%@ page info=&quot;Conjunto válido de directivas&quot;%> <%@ page language=&quot;java&quot; import=&quot;java.io.*&quot;%> <%@ page import=&quot;java.net.*, java.util.*&quot; %> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> <%out.println(&quot;Hola Mundo&quot;);%> </body> </html>
Ejemplo 2 <%@ page info=&quot;Conjunto válido de directivas&quot; language=&quot;java&quot; import=&quot;java.net.*, java.util.*, java.io.*&quot;%> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> <%out.println(&quot;Hola Mundo&quot;);%> </body> </html>
Atributo info El atributo info permite al autor de la página JSP añadir una cadena de documentación a la página para indicar que funcionalidad posee la misma. Por lo tanto el valor del atributo info será una cadena de texto. No existen restricciones en la longitud de la cadena de texto a signada al atributo info. Esta cadena es útil a nivel de documentación, normalmente se utiliza también para indicar información acerca del autor y del copyright. Por defecto el valor del atributo info es una cadena vacía.
Ejemplo <%@ page info=&quot;Ejemplo de directivas, Autor: SAMAEL&quot;%> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> Ejemplo de atributo info </body> </html>
Atributo language El atributo language indica el lenguaje de script que se va a utilizar en todos los elementos de la página. Todos los contenedores de páginas JSP deben soportar como lenguaje de script el lenguaje Java, y es el lenguaje por defecto si no es indica otro. En el momento actual no existen más lenguajes de script disponibles para las páginas JSP, por lo tanto actualmente es igual indicar el atributo language u omitirlo.
Ejemplo <%@ page info=&quot;Ejemplo de directivas, Autor: SAMAEL&quot; language=&quot;java&quot;%> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> Ejemplo de atributo info y language </body> </html>
Atributo extends La función de este atributo es similar a la cláusula extends de la definición de una clase, es decir, nos permite indicar la superclase de la que hereda la página JSP actual. No existe un valor por defecto para este atributo. Este atributo no se suele utilizar en las páginas JSP.
Atributo import El atributo import de la directiva page si que se suele utilizar de forma muy común, tiene la misma función que la sentencia import se Java, es decir, nos permite importar clases y paquetes enteros para poder utilizarlos dentro de nuestra página JSP. En el ejemplo del Código Fuente 85 se muestra una página JSP que importa el paqueta java.util para poder utilizar la clase Date y así obtener la fecha y hora actual. Este es el único atributo que se puede repetir en una página JSP. Si queremos importar varios paquetes o clases, es decir, utilizar varios atributos import, podemos hacerlo de dos formas distintas, a través de varias directivas page o bien separando con comas cada valor del atributo import.
Ejemplo <%@ page import=&quot;java.util.*&quot;%> <html> <head> <title>Directivas</title> </head> <body> Fecha y hora actuales: <%=new Date()%> </body> </html>
Ejemplo 2 <%@ page import=&quot;java.util.*, java.net.*&quot;%> <html> <head> <title>Directivas</title> </head> <body> Fecha y hora actuales: <%=new Date()%><br> <%URL url=new URL(&quot;http://mi.servidor.com&quot;);%> Procolo utilizado:<%=url.getProtocol()%> </body> </html>
Atributo session El atributo session, utilizaremos este atributo para indicar si queremos que la página JSP participe o no en la sesión actual del usuario, es decir, decidimos si la página debe utilizar o no el estado de sesión que veíamos en los servlets. Gracias al atributo session y al objeto integrado session, el mantenimiento y utilización de sesiones dentro de las páginas JSP es mucho más sencillo que en los servlets. Este atributo puede tener los valores verdadero o falso (true/false) para indicar si la página va a pertenecer a una sesión o no, por defecto el atributo session tiene el valor true, por lo tanto de forma predeterminada una página JSP va a pertenecer a una sesión.
Ejemplo <%@ page session=&quot;true&quot;%> <html> <head> <title>Directivas</title> </head> <body> El identificador de la sesion es: <%=session.getId()%> </body> </html>
Atributo buffer Este atributo controla si en la respuesta que se envía al cliente se va utilizar un búfer intermedio. Si no queremos utilizar un búfer intermedio y enviar al contenido de forma directa al navegador le asignaremos el valor none a este atributo. En caso contrario si deseamos que antes de enviar la salida al navegador pase por el búfer intermedio, deberemos indicar el tamaño del búfer en kilobytes. Por defecto el valor del atributo buffer es 8kb, es decir, por defecto una página JSP tiene un búfer intermedio de 8 KB. Cuando el búfer se llena se debe enviar su contenido al navegador para dejarlo libre, este mecanismo de liberación del espacio del búfer lo trataremos en el siguiente apartado, ya que se encuentra regulado por el atributo autoFlush de la directiva page.
Atributo autoFlush Este atributo se encuentra relacionado con el atributo búfer, ya que indica el comportamiento que se debe seguir cuando el búfer intermedio se ha llenado. Si al atributo autoFlush se le asigna el valor true (que es su valor por defecto), cuando se llene el búfer de forma automática se liberará su espacio dejándolo vacío y enviando sus contenidos al navegador que realizó la petición de la página JSP, y de esta forma la página se seguirá procesando volviendo a llenar el búfer y volviéndose a vaciar si es necesario. Una vez que se ha vaciado el búfer y ha sido enviado su contenido al navegador que realizó la petición de la página JSP, no es posible redirigir la ejecución de la página JSP a otra página, servlet o recurso.
Atributo isThreadSafe El atributo isThreadSafe se utiliza para indicar si la página JSP (una vez convertida en servlet), va a ser capaz de atender peticiones múltiples de manera simultánea, es decir, si es posible que se ejecute en varios hilos de ejecución.
Atributo errorPage El atributo errorPage es utilizado para especificar la página de error en el caso de que se produzca una excepción no tratada en al página JSP actual. A este atributo se le asigna la URL de la página que va a tratar los errores no atrapados que se produzcan en la página JSP. La URL indicada puede ser absoluta o relativa a la ruta correspondiente a la página actual.
Atributo isErrorPage Este es el último de los atributos pertenecientes a la directiva page, y se encuentra muy relacionado en el anterior. Este atributo permite indicar si la página JSP actual es una página de tratamiento de errores o no. A este atributo le asignaremos lo valores verdadero o falso. Si este atributo tiene el valor true, la página JSP actual será una página de error, por lo que podrá ser referenciada desde el atributo errorPage de otra página JSP distinta. Si este atributo tiene el valor false (su valor por defecto), la página se tratará como una página cualquiera.
Tabla de resumen
Directiva include Esta directiva permite a los autores de páginas incluir el contenido de un recurso dentro del contenido generado por una página JSP. El recurso a incluir dentro de la página JSP se indica mediante una URL relativa o absoluta, pero que debe hacer referencia al servidor en el que se ejecutan las páginas JSP. La sintaxis general de esta directiva será la siguiente. <%@ include file=”URLlocal”%>
Ejemplo <html> <head> <title>Directivas</title> </head> <body> <%@ include file=&quot;cabecera.html&quot;%> <br> Esto es la página JSP <br> <%@ include file=&quot;pie.html&quot;%> </body> </html>
La directiva taglib Este directiva es utilizada para indicar al contenedor de páginas JSP que la página JSP actual utiliza una librería de etiquetas personalizadas. Una librería de etiquetas es una colección de etiquetas personalizadas que extienden la funcionalidad de una página JSP. Una vez que se ha utilizado esta directiva para indicar la librería de etiquetas que se van a utilizar , todas las etiquetas personalizadas definidas en al librería están a nuestra disposición para hacer uso de ellas en nuestra página JSP actual. La sintaxis de esta directiva es la siguiente: <%@ taglib uri=”URLLibreria” prefix=”prefijoEtiquetas”%>
La directiva taglib Este directiva posee dos atributos, el primero de ellos, llamado uri, se utiliza para indicar la localización del descriptor de la librería de etiquetas (TLD, Tag Library Descriptor), y el segundo atributo, llamado prefix indica el prefijo que se va a utilizar para hacer referencia a las etiquetas personalizadas. El descriptor de la librería de etiquetas es un fichero especial que indica las clases que implementan y forman una librería, también indica el nombre de las etiquetas y los atributos que poseen.
Elementos de scripting
Introducción Mientras que las directivas influían en la forma de procesar la página JSP por parte del contenedor de páginas JSP, los elementos de scripting son los que nos permiten incluir código Java en las páginas JSP, los elementos de scripting nos van a permitir declarar objetos, instanciarlos, ejecutar métodos, definirlos, etc., es decir son los que realmente nos permiten realizar la programación de nuestra página JSP.
Declaraciones Las declaraciones se utilizan para definir variables (objetos) y métodos específicos de una página JSP, tanto las variables como los métodos declarados se pueden referenciar por otros elementos de script de la misma página JSP. La sintaxis general de una declaración es: <%! Declaración (es)%> En una única etiqueta se pueden incluir varias declaraciones, pero cada declaración debe ser una sentencia declarativa completa en el lenguaje de script correspondiente, que como sabemos el único disponible para las páginas JSP por el momento es el lenguaje Java.
Scriptlets Un scriptlet es realmente el código fuente de la página JSP, contiene las sentencias correspondientes al lenguaje de script en el que se ha desarrollado la página (actualmente sólo el lenguaje Java). Dentro de un scriplet nos podemos encontrar cualquier sentencia válida del lenguaje Java, podemos agrupar sentencias, utilizar estructuras de iteración y condicionales, nos permite acceder y manipular los objetos integrados dentro de las página JSP, etc. La sintaxis general de un scriptlet es: <%scriplet%>
Expresiones Una expresión es un tipo especial de scriptlet que genera de forma directa una respuesta que se enviará al cliente como parte del contenido generado por la página JSP, es decir, contribuye directamente a la salida de la página JSP. La sintaxis de las expresiones es: <%=expresión%>
Comentarios Dentro de una página JSP podemos distinguir tres tipos de comentarios, los que son propios de la especificación JSP y constituyen un elemento de scripting, los comentarios del lenguaje de scripting, en este caso los comentarios que podemos utilizar en el lenguaje Java, y los comentarios del lenguaje HTML y XML. La sintaxis de los comentarios JSP es la siguiente: <%--Comentario--%>
objetos integrados I
Introducción Los objetos integrados se encuentran disponibles en los scriptlets y en las expresiones, sin embargo no se pueden utilizar en la declaraciones, ya sean de métodos o de variables. Esto es debido a que las declaraciones, se traducen en atributos o métodos del servlet resultante, mientras que los objetos integrados sólo están disponibles dentro del método _jspService() del servlet generado, debemos recordar que todo el código fuente de los scriptlets de la página JSP se traduce en código fuente del método _jspService() del servlet generado.
request Este objeto representa una petición realizada a una página JSP y es una instancia del interfaz javax.servlet.http.HttpServletRequest. El objeto request es generado por el contenedor de páginas JSP y pasado como un parámetro del método _jspService() contenido en el servlet correspondiente a la página JSP. Este objeto cumple con el cometido del interfaz HttpServletRequest, que si recordamos era el de permitir obtener la información que envía el usuario al realizar una petición de un servlet (en este caso a una página JSP), esta información puede ser muy variada, puede ser desde encabezados de petición del protocolo HTTP, cookies enviadas por el usuario o los datos de un formulario.
response El objeto response es una instancia del interfaz javax.servlet.http.HttpServletResponse y encapsula la respuesta que le es enviada al usuario como el resultado de la petición de una página JSP. Al igual que sucedía con el objeto request, este objeto es generado por el contenedor de página JSP y pasado como parámetro de método _jspService() del servlet correspondiente.
pageContext Este objeto no tiene correspondencia con ninguna clase ni interfaz del API de los servlets, sino que es una instancia de una clase perteneciente al API JSP, se trata de la clase javax.servlet.jsp.PageContext. El objeto pageContext encapsula el contexto para una página JSP particular, a través de este objeto tenemos acceso a el resto de los objetos implícitos de JSP. Este objeto es creado de manera automática dentro del método _jspService() del servlet generado a partir de la página JSP correspondiente, y partir del objeto pageContext se obtienen otros objetos integrados dentro del servlet.
session Este objeto representa una sesión de un usuario con nuestra aplicación Web, y es una instancia del interfaz javax.servlet.http.HttpSession. Las sesiones son creadas de forma automática, a no ser que se indique lo contrario dentro de la directiva page de la página JSP. El objeto session ofrece toda la funcionalidad que ofrecía el interfaz HttpSession, que recordamos era: mantener a través de nuestros servlets información a lo largo de una sesión del cliente con nuestra aplicación Web. Cada cliente tendrá su propia sesión, y dentro de la sesión podremos almacenar cualquier tipo de objeto.
application El objeto application representa a la aplicación Web (contexto) en la que se encuentra una aplicación JSP, es una instancia del interfaz javax.servlet.ServletContext, y por lo tanto posee la misma funcionalidad que es la de permitir comunicarlos con el contenedor de páginas JSP, y permitir mantener un estado más general que el de la sesión para que se comparta entre todos lo usuarios de la aplicación Web. Este objeto se creará en el método _jspService() del servlet generado a partir de la página JSP de la que hemos realizado su petición.
Tabla de Objetos integrados
Tabla de Objetos integrados
Ejemplos <%@ page import=&quot;java.util.*&quot; %> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Origen</title> </head> <body> <%request.setAttribute(&quot;fecha&quot;,new Date()); RequestDispatcher rd=application.getRequestDispatcher(&quot;/destino.jsp&quot;); rd.forward(request,response);%> </body> </html>
Ejemplo <%@ page import=&quot;java.util.*&quot; %> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Destino</title> </head> <body> <%Date fecha=(Date)request.getAttribute(&quot;fecha&quot;);%> Atributo de la petición: <%=fecha%><br> </body> </html>
Ejemplo <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Untitled</title> </head> <body> <%if(request.getParameter(&quot;enviar&quot;)==null){%> <%--No se ha pulsado el botón de envío, por lo tanto se muestra el formulario en el navegador--%> <form action=&quot;formulario.jsp&quot; method=&quot;GET&quot;> <b>Datos personales</b><br> Nombre: <input type=&quot;Text&quot; name=&quot;nombre&quot; size=&quot;20&quot;><br> Apellidos: <input type=&quot;Text&quot; name=&quot;apellidos&quot; size=&quot;20&quot;><br> Edad: <input type=&quot;Text&quot; name=&quot;edad&quot; size=&quot;20&quot;><br> Email:<input type=&quot;Text&quot; name=&quot;email&quot; size=&quot;30&quot;><br> <br> <b>Departamentos</b><br> <select name=&quot;departamentos&quot; multiple size=&quot;5&quot;> <option value=&quot;Sistemas&quot;>Sistemas</option> <option value=&quot;Desarrollo&quot;>Desarrollo</option> <option value=&quot;Comercial&quot;>Comercial</option> <option value=&quot;Administración&quot;>Administración</option> <option value=&quot;Formación&quot;>Formación</option> </select><br><br> <b>Lenguajes de programación y entornos de desarrollo</b><br> <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;C++&quot;>C++ <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;Visual Basic&quot;>Visual Basic <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;Java&quot;>Java <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;ASP&quot;>ASP <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;Delphi&quot;>Delphi <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;JSP&quot;>JSP <br> <input type=&quot;Submit&quot; name=&quot;enviar&quot; value=&quot;Enviar&quot;> </form> <%}else{%> <%--Se ha pulsado el botón de envío y se muestran los datos contenidos en el formulario--%> <ul> <li>nombre: <i><%=request.getParameter(&quot;nombre&quot;)%></i> <li>apellidos: <i><%=request.getParameter(&quot;apellidos&quot;)%></i> <li>edad: <i><%=request.getParameter(&quot;edad&quot;)%></i> <li>email: <i><%=request.getParameter(&quot;email&quot;)%></i> <%String[] valores=request.getParameterValues(&quot;departamentos&quot;);%> <li>departamentos: <i> <% int i; if (valores!=null){ for (i=0;i<=valores.length-2;i++){%> <%=valores[i]%>, <%}%> <%=valores[i]%></i> <%} valores=request.getParameterValues(&quot;lenguajes&quot;);%> <li>lenguajes: <i> <%if (valores!=null){ for (i=0;i<=valores.length-2;i++){%> <%=valores[i]%>, <%}%> <%=valores[i]%></i> <%}%> </ul> <a href=&quot;formulario.jsp&quot;>Volver</a> <%}%> </body> </html>

Más contenido relacionado

Programacion Web 2o dept

  • 1. M. en I.S.C. Leonardo M. Moreno Villalba Programación Web
  • 2. JSP (JavaServer Pages) M. en I.S.C. Leonardo M. Moreno Villalba
  • 3. Introducción a JSP (JavaServer Pages) Se puede decir que la tecnología JSP es una extensión de la tecnología ofrecida por los servlets creada para ofrecer soporte a la creación de páginas HTML y XML. Las páginas JSP hacen muchos más fácil combinar plantillas de presentación de la información con contenido dinámico. Las páginas JSP realmente son compiladas dinámica y automáticamente en forma de servlets, de esta forma presentan todos los beneficios de los servlets, así como el completo acceso a todos loa APIs que ofrece el lenguaje Java. JSP es una extensión de los servlets, y las páginas JSP y los servlet se pueden combinar para trabajar conjuntamente, veremos que las páginas se compilan de forma automática en servlets y veremos que desde una página JSP podremos utilizar un servlet y viceversa (incluyendo su contenido, ejecutándolo o redirigiendo el navegador).
  • 4. Definición de página JSP Una página JSP va a ser un fichero de texto con la extensión JSP, que combina etiquetas HTML con nuevas etiquetas de script pertenecientes a la especificación JavaServer Pages 1.1. Una página JSP va a tener un aspecto muy similar al de una página HTML, pero se transformarán en clases de Java que son servlets para compilarse y generar los ficheros de clase correspondientes, esta operación se dará cuando se ejecute una página JSP por primera vez, o cuando se modifique una página JSP existente. El servlet que resulta de la transformación de la página JSP es una combinación del código HTML contenido en la página JSP y del contenido dinámico indicado por las etiquetas especiales pertenecientes a la especificación JSP.
  • 5. Definición de página JSP Dentro de una página JSP se puede diferenciar claramente entre dos elementos (o categorías), por un lado encontramos elementos que son procesados por el servidor que contiene el contenedor de páginas JSP, y por otro lado encontramos código que el contenedor de páginas JSP ignora, normalmente este código suele ser código HTML que se devuelve al cliente como tal. Cuando un cliente realiza una petición de una página JSP, se ejecutará dicha página JSP devolviendo como resultado código HTML que se mostrará en el navegador, este código HTML es el resultado de la ejecución de la página JSP y comprende el código HTML contenido en la página y el resultado del contenido dinámico que ha sido ejecutado por el contenedor de páginas JSP. El cliente (navegador Web), nunca va a poder observar el código fuente de la página JSP, lo que recibe es el resultado de la ejecución de la misma.
  • 6. Beneficios de las páginas JSP Las páginas JSP ofrecen una serie de ventajas sobre los servlets, que hacen su uso más idóneo para la generación de contenidos dinámicos dentro de un sitio Web. Unos de los mayores beneficios que ofrecen las páginas JSP es la separación del contenido estático o presentación del resultado del contenido dinámico o la implementación de la lógica que produce el resultado. En los servlets si deseamos modificar algo relacionado con el interfaz de usuario debemos modificar el código fuente del servlet y volver a compilarlo, lo que supone un problema, ya que por muy pequeño que sea el cambio a realizar siempre afecta al código fuente del servlet.
  • 7. Beneficios de las páginas JSP Además de los delimitadores de scriptlets (fragmentos de código fuente escritos en lenguaje Java), las páginas JSP ofrecen una serie de etiquetas especiales al estilo de las etiquetas XML, que permiten realizar una serie de acciones determinadas. A través de las etiquetas propias de JSP podemos reutilizar componentes Java que siguen la especificación JavaBeans, con lo que nos permite abstraernos mucho más de la implementación de la aplicación Web. Una modificación en una página JSP la recogerá de forma automática el contendor de páginas JSP, precompilando de forma automática la página para generar la clase del servlet correspondiente.
  • 8. Beneficios de las páginas JSP Como resumen de las facilidades ofrecidas por las páginas JSP sobre los servlets podemos destacar los siguientes puntos: Con las páginas JSP es más sencillo combinar plantillas estáticas de etiquetas HTML o XML con el código que genera el contenido dinámico. Las páginas JSP se compilan de forma dinámica en un servlet cuando se realiza una petición. La estructura de las páginas JSP hace más fácil el diseño de páginas a manos de los diseñadores Web. Además están apareciendo herramientas que nos asisten en la creación y diseño de páginas JSP, como puede ser JRun Studio de Allaire. Las etiquetas que ofrecen las páginas JSP para invocar a componentes JavaBeans, permiten utilizar a los autores de estas páginas la funcionalidad de estos componentes sin tener que conocer la complejidad de su implementación.
  • 9. Elementos de las páginas JSP Para clasificar los elementos que podemos encontrar dentro de una página JSP podemos realizar una primera división muy general en la que dividimos los elementos de las páginas JSP en dos grandes categorías: elementos estáticos que no son interpretados por el contenedor de páginas JSP y que son devueltos sin ningún tipo de tratamiento para que los interprete el navegador, y elementos dinámicos que son interpretados por el contenedor de páginas JSP devolviendo al navegador el resultado de la ejecución de los mismos.
  • 10. Elementos dinámicos que puede presentar una página JSP.
  • 11. Directivas Directivas: las directivas funcionan como mensajes que se envían desde la página JSP al contenedor de páginas JSP. Se utilizan para establecer valores globales que afectarán a la página JSP actual, estas directivas no presentan ninguna salida al cliente. Su sintaxis general es la que se indica a continuación. <%@nombreDirectiva atributo1=”valor1”...atributon=”valorn”%>
  • 12. Elementos de scripting Elementos de scripting: estos elementos permiten incluir código Java en la página JSP. Permiten declarar objetos, instanciarlos, ejecutar métodos, definirlos, etc. Los elementos de scripting se pueden separar en cuatro subelementos que son: Declaraciones: son bloques de código Java incluido en la página JSP utilizados para declarar variables y métodos propios dentro de la página JSP. Un bloque de declaración se encuentra entre los delimitadores <%! %>. Scriptlets: un scriptlet es un fragmento de código Java incluido en una página JSP que se ejecutará cuando se realice una petición de la misma. Un scriptlet se encontrará entre los delimitadores <% %>, como curiosidad cabe comentar que estos delimitadores son los mismos que utilizan las páginas ASP (Active Server Pages) para delimitar el script de servidor. En un scriptlet podemos encontrar cualquier código Java válida, no debemos olvidar que las páginas JSP al igual que los servlets pueden utilizar todos los APIs ofrecidos por el lenguaje Java.
  • 13. Elementos de scripting Expresiones: una expresión es una notación especial para un scriptlet que devuelve un resultado a la respuesta dada al usuario, la expresión se evalúa y se devuelve como una cadena que se envía al cliente. Una expresión se encuentra entre los delimitadores<%= %>, que son también los mismos delimitadores que se utilizan para devolver el valor de expresiones dentro de una página ASP. Comentarios: estos elementos permiten documentar nuestro código fuente, se encuentran entre los delimitadores <%-- --%>. Estos comentarios no serán visibles en el navegador, ya que son comentarios de JSP que serán tratados por el contenedor de páginas JSP, no se deben confundir con los comentarios HTML (<!-- -->), que si serán visibles desde el navegador y enviados como tales al usuario.
  • 14. Acciones Acciones: las acciones son etiquetas específicas de JSP que afectan al comportamiento de la página JSP y a la respuesta enviada al usuario. La especificación JSP define una serie de acciones estándar que todo contenedor de páginas JSP debe ofrecer. Estas acciones ofrecen al diseñador de páginas JSP una funcionalidad bastante interesante, que veremos en detalle cuando tratemos las acciones en siguientes capítulos. También es posible definir acciones determinadas mediante el mecanismo de librerías de etiquetas. La sintaxis general de una acción JSP es: <jsp: accion>
  • 15. Objetos implicitos Objetos implícitos o integrados: estos objetos se suelen utilizar dentro de expresiones o scriptlets, y no necesitan ser declarados ni instanciados, se encuentran disponibles dentro de cada página JSP. Casi todos estos objetos implementan interfaces que podíamos encontrar en los servlets, como pueden ser el interfaz HttpServletRequest, HttpServletResponse o HttpSession. Estos objeto son similares a los objetos integrados que ofrece ASP.
  • 16. Ejemplo <%@ page language=&quot;Java&quot;%> <html> <head> <title>Hola mundo con esto es mi primer JSP</title> </head> <body> <%--Esto es un comentario--%> <div align=&quot;center&quot;> <b><%out.println(&quot;Hola Mundo&quot;);%></b> </div> </body> </html>
  • 17. Comparación entre el código de un servlet y un JSP Si comparamos el código fuente de la página JSP, con el código fuente del servlet equivalente que devolverá el mismo resultado, vemos que es mucho más sencillo el código fuente de la página JSP, además de ser más claro. import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletHolaMundo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ response.setContentType(&quot;text/html&quot;); PrintWriter out = response.getWriter(); out.println(&quot;<html>&quot;+ &quot;<head><title>Hola Mundo con un servlet</title></head>&quot;+ &quot;<body><div align='center'><b>Hola Mundo </b></div>&quot;+ &quot;</body></html>&quot; ); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ doGet(request,response); } }
  • 18. Ejemplo <%@ page language=&quot;Java&quot; import=&quot;java.util.*&quot;%> <html> <head> <title>Hola mundo con JSP</title> </head> <%--Esto es un comentario--%> <body> <div align=&quot;center&quot;> <b> <%!String nombre;%> <%nombre=request.getParameter(&quot;nombre&quot;); if (nombre!=null) out.println(&quot;Hola &quot;+nombre); else out.println(&quot;Hola Mundo&quot;);%> <br>La fecha y hora actuales son:</b><i><%=new Date()%></i> </div> </body> </html>
  • 19. Ejecución de las páginas JSP A cada página JSP le corresponde un servlet que se genera de forma automática, y al invocar la página JSP es realmente este servlet el que se ejecuta.
  • 20. Ejecución de las páginas JSP
  • 21. Estructura de los contenedores del servidor Tomcat
  • 22. Ejemplo <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Hola Mundo 7 veces</title> </head> <body> <%for (int i=1;i<=7;i++){%> <font size=&quot;<%=i%>&quot;>Hola Mundo</font><br> <%}%> </body> </html>
  • 24. Introducción A partir de aquí iremos detallando el uso y sintaxis de estas etiquetas especiales que ofrece la especificación JSP, cada etiqueta tendrá una traducción en el servlet que genere el contenedor de páginas JSP. El primer elemento de las páginas JSP que vamos a tratar son las directivas, que se corresponden con una etiqueta especial de JSP que puede utilizarse utilizando la sintaxis XML, y se comenta en el siguiente apartado.
  • 25. Directivas Las directivas son un conjunto de etiquetas JSP que ofrecen al contenedor de páginas JSP instrucciones específicas de cómo se debe procesar una página determinada. Las directivas definen propiedades generales que afectan a la página, incluso algunas de estas directivas se pueden utilizar para generar de forma indirecta contenido dinámico que será devuelto como parte de la respuesta enviada al cliente, y por lo tanto tienen una traducción correspondiente dentro del servlet equivalente a la página JSP. Las directivas sirven como mensajes que se envían desde la página JSP al contendor JSP que la ejecuta Un ejemplo de uso de las directivas puede ser para indicar el tipo de lenguaje (lenguaje de script) que se va a utilizar dentro de la página JSP, para incluir contenidos de otra página o recurso del servidor, para indicar que la página usa una librería de etiquetas personalizada determinada, para importar paquetes del lenguaje Java, etc.
  • 26. Directivas Las directivas no generan directamente una salida que se envíe al cliente de forma directa, sino que generan efectos laterales en la forma en la que el contenedor JSP procesa la página en la que se encuentra definida la directiva. Las directivas se pueden situar en cualquier lugar de la página, pero para una mayor legibilidad del código de la página se recomienda que se sitúen al principio de la misma.
  • 27. Reglas de sintaxis Las etiquetas tienen una etiqueta de inicio con atributos opcionales, un cuerpo opcional, y una etiqueta de cierre, como se puede ver en la siguiente sintaxis: <etiquetaJSP nombreAtributo=”valor atributo”> cuerpo </etiquetaJSP> También puede aparecer estas etiquetas sólo con una etiqueta de inicio sin cuerpo y con atributos opcionales, como se puede ver en el siguiente esquema: <etiquetaJSP nombreAtributo=”valor atributo”/> Los valores de los atributos de las etiquetas siempre aparecen entre comillas dobles o sencillas. Las cadenas especiales &apos; y &quot; se pueden utilizar (como se hace en HTML) si las comillas son parte del valor del atributo.
  • 28. Reglas de sintaxis Un espacio en al cuerpo del contenido (texto) de un documento no es significante, pero es preservado, es decir, cualquier espacio en blanco en la página JSP se traduce y mantiene durante el proceso de generación del servlet correspondiente. El carácter se puede utilizar como carácter de escape en una etiqueta, por ejemplo para utilizar el carácter % (que veremos más adelante es una carácter especial que forma parte de la propia etiqueta de las directivas y de varios elementos de scripting) debemos usar la notación .
  • 29. Directiva page Esta es la directiva más compleja de JSP debido a que permite especificar un gran número de propiedades que afectan a la página actual. Su sintaxis general es la siguiente: <%@ page atributo1=”valor1” ... Atributon=”valorn”%> Y la sintaxis equivalente en XML es: <jsp:directive.page atributo1=”valor1” ... atributon=”valorn”/>
  • 30. Directiva page La directiva page ofrece hasta once atributos que nos permiten indicar al contenedor de páginas JSP una serie de propiedades que presenta la página JSP actual. Estos atributos se pueden especificar todos juntos en una sólo línea de la directiva page, o bien en diferentes líneas utilizando distintas directivas page, pero teniendo en cuenta que un mismo atributo no puede aparecer en distintas directivas page, el único atributo que puede aparecer varias veces es el atributo import, que permite importar paquetes de clases del lenguaje Java.
  • 31. Ejemplo <%@ page info=&quot;Conjunto válido de directivas&quot;%> <%@ page language=&quot;java&quot; import=&quot;java.io.*&quot;%> <%@ page import=&quot;java.net.*, java.util.*&quot; %> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> <%out.println(&quot;Hola Mundo&quot;);%> </body> </html>
  • 32. Ejemplo 2 <%@ page info=&quot;Conjunto válido de directivas&quot; language=&quot;java&quot; import=&quot;java.net.*, java.util.*, java.io.*&quot;%> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> <%out.println(&quot;Hola Mundo&quot;);%> </body> </html>
  • 33. Atributo info El atributo info permite al autor de la página JSP añadir una cadena de documentación a la página para indicar que funcionalidad posee la misma. Por lo tanto el valor del atributo info será una cadena de texto. No existen restricciones en la longitud de la cadena de texto a signada al atributo info. Esta cadena es útil a nivel de documentación, normalmente se utiliza también para indicar información acerca del autor y del copyright. Por defecto el valor del atributo info es una cadena vacía.
  • 34. Ejemplo <%@ page info=&quot;Ejemplo de directivas, Autor: SAMAEL&quot;%> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> Ejemplo de atributo info </body> </html>
  • 35. Atributo language El atributo language indica el lenguaje de script que se va a utilizar en todos los elementos de la página. Todos los contenedores de páginas JSP deben soportar como lenguaje de script el lenguaje Java, y es el lenguaje por defecto si no es indica otro. En el momento actual no existen más lenguajes de script disponibles para las páginas JSP, por lo tanto actualmente es igual indicar el atributo language u omitirlo.
  • 36. Ejemplo <%@ page info=&quot;Ejemplo de directivas, Autor: SAMAEL&quot; language=&quot;java&quot;%> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Directivas</title> </head> <body> Ejemplo de atributo info y language </body> </html>
  • 37. Atributo extends La función de este atributo es similar a la cláusula extends de la definición de una clase, es decir, nos permite indicar la superclase de la que hereda la página JSP actual. No existe un valor por defecto para este atributo. Este atributo no se suele utilizar en las páginas JSP.
  • 38. Atributo import El atributo import de la directiva page si que se suele utilizar de forma muy común, tiene la misma función que la sentencia import se Java, es decir, nos permite importar clases y paquetes enteros para poder utilizarlos dentro de nuestra página JSP. En el ejemplo del Código Fuente 85 se muestra una página JSP que importa el paqueta java.util para poder utilizar la clase Date y así obtener la fecha y hora actual. Este es el único atributo que se puede repetir en una página JSP. Si queremos importar varios paquetes o clases, es decir, utilizar varios atributos import, podemos hacerlo de dos formas distintas, a través de varias directivas page o bien separando con comas cada valor del atributo import.
  • 39. Ejemplo <%@ page import=&quot;java.util.*&quot;%> <html> <head> <title>Directivas</title> </head> <body> Fecha y hora actuales: <%=new Date()%> </body> </html>
  • 40. Ejemplo 2 <%@ page import=&quot;java.util.*, java.net.*&quot;%> <html> <head> <title>Directivas</title> </head> <body> Fecha y hora actuales: <%=new Date()%><br> <%URL url=new URL(&quot;http://mi.servidor.com&quot;);%> Procolo utilizado:<%=url.getProtocol()%> </body> </html>
  • 41. Atributo session El atributo session, utilizaremos este atributo para indicar si queremos que la página JSP participe o no en la sesión actual del usuario, es decir, decidimos si la página debe utilizar o no el estado de sesión que veíamos en los servlets. Gracias al atributo session y al objeto integrado session, el mantenimiento y utilización de sesiones dentro de las páginas JSP es mucho más sencillo que en los servlets. Este atributo puede tener los valores verdadero o falso (true/false) para indicar si la página va a pertenecer a una sesión o no, por defecto el atributo session tiene el valor true, por lo tanto de forma predeterminada una página JSP va a pertenecer a una sesión.
  • 42. Ejemplo <%@ page session=&quot;true&quot;%> <html> <head> <title>Directivas</title> </head> <body> El identificador de la sesion es: <%=session.getId()%> </body> </html>
  • 43. Atributo buffer Este atributo controla si en la respuesta que se envía al cliente se va utilizar un búfer intermedio. Si no queremos utilizar un búfer intermedio y enviar al contenido de forma directa al navegador le asignaremos el valor none a este atributo. En caso contrario si deseamos que antes de enviar la salida al navegador pase por el búfer intermedio, deberemos indicar el tamaño del búfer en kilobytes. Por defecto el valor del atributo buffer es 8kb, es decir, por defecto una página JSP tiene un búfer intermedio de 8 KB. Cuando el búfer se llena se debe enviar su contenido al navegador para dejarlo libre, este mecanismo de liberación del espacio del búfer lo trataremos en el siguiente apartado, ya que se encuentra regulado por el atributo autoFlush de la directiva page.
  • 44. Atributo autoFlush Este atributo se encuentra relacionado con el atributo búfer, ya que indica el comportamiento que se debe seguir cuando el búfer intermedio se ha llenado. Si al atributo autoFlush se le asigna el valor true (que es su valor por defecto), cuando se llene el búfer de forma automática se liberará su espacio dejándolo vacío y enviando sus contenidos al navegador que realizó la petición de la página JSP, y de esta forma la página se seguirá procesando volviendo a llenar el búfer y volviéndose a vaciar si es necesario. Una vez que se ha vaciado el búfer y ha sido enviado su contenido al navegador que realizó la petición de la página JSP, no es posible redirigir la ejecución de la página JSP a otra página, servlet o recurso.
  • 45. Atributo isThreadSafe El atributo isThreadSafe se utiliza para indicar si la página JSP (una vez convertida en servlet), va a ser capaz de atender peticiones múltiples de manera simultánea, es decir, si es posible que se ejecute en varios hilos de ejecución.
  • 46. Atributo errorPage El atributo errorPage es utilizado para especificar la página de error en el caso de que se produzca una excepción no tratada en al página JSP actual. A este atributo se le asigna la URL de la página que va a tratar los errores no atrapados que se produzcan en la página JSP. La URL indicada puede ser absoluta o relativa a la ruta correspondiente a la página actual.
  • 47. Atributo isErrorPage Este es el último de los atributos pertenecientes a la directiva page, y se encuentra muy relacionado en el anterior. Este atributo permite indicar si la página JSP actual es una página de tratamiento de errores o no. A este atributo le asignaremos lo valores verdadero o falso. Si este atributo tiene el valor true, la página JSP actual será una página de error, por lo que podrá ser referenciada desde el atributo errorPage de otra página JSP distinta. Si este atributo tiene el valor false (su valor por defecto), la página se tratará como una página cualquiera.
  • 49. Directiva include Esta directiva permite a los autores de páginas incluir el contenido de un recurso dentro del contenido generado por una página JSP. El recurso a incluir dentro de la página JSP se indica mediante una URL relativa o absoluta, pero que debe hacer referencia al servidor en el que se ejecutan las páginas JSP. La sintaxis general de esta directiva será la siguiente. <%@ include file=”URLlocal”%>
  • 50. Ejemplo <html> <head> <title>Directivas</title> </head> <body> <%@ include file=&quot;cabecera.html&quot;%> <br> Esto es la página JSP <br> <%@ include file=&quot;pie.html&quot;%> </body> </html>
  • 51. La directiva taglib Este directiva es utilizada para indicar al contenedor de páginas JSP que la página JSP actual utiliza una librería de etiquetas personalizadas. Una librería de etiquetas es una colección de etiquetas personalizadas que extienden la funcionalidad de una página JSP. Una vez que se ha utilizado esta directiva para indicar la librería de etiquetas que se van a utilizar , todas las etiquetas personalizadas definidas en al librería están a nuestra disposición para hacer uso de ellas en nuestra página JSP actual. La sintaxis de esta directiva es la siguiente: <%@ taglib uri=”URLLibreria” prefix=”prefijoEtiquetas”%>
  • 52. La directiva taglib Este directiva posee dos atributos, el primero de ellos, llamado uri, se utiliza para indicar la localización del descriptor de la librería de etiquetas (TLD, Tag Library Descriptor), y el segundo atributo, llamado prefix indica el prefijo que se va a utilizar para hacer referencia a las etiquetas personalizadas. El descriptor de la librería de etiquetas es un fichero especial que indica las clases que implementan y forman una librería, también indica el nombre de las etiquetas y los atributos que poseen.
  • 54. Introducción Mientras que las directivas influían en la forma de procesar la página JSP por parte del contenedor de páginas JSP, los elementos de scripting son los que nos permiten incluir código Java en las páginas JSP, los elementos de scripting nos van a permitir declarar objetos, instanciarlos, ejecutar métodos, definirlos, etc., es decir son los que realmente nos permiten realizar la programación de nuestra página JSP.
  • 55. Declaraciones Las declaraciones se utilizan para definir variables (objetos) y métodos específicos de una página JSP, tanto las variables como los métodos declarados se pueden referenciar por otros elementos de script de la misma página JSP. La sintaxis general de una declaración es: <%! Declaración (es)%> En una única etiqueta se pueden incluir varias declaraciones, pero cada declaración debe ser una sentencia declarativa completa en el lenguaje de script correspondiente, que como sabemos el único disponible para las páginas JSP por el momento es el lenguaje Java.
  • 56. Scriptlets Un scriptlet es realmente el código fuente de la página JSP, contiene las sentencias correspondientes al lenguaje de script en el que se ha desarrollado la página (actualmente sólo el lenguaje Java). Dentro de un scriplet nos podemos encontrar cualquier sentencia válida del lenguaje Java, podemos agrupar sentencias, utilizar estructuras de iteración y condicionales, nos permite acceder y manipular los objetos integrados dentro de las página JSP, etc. La sintaxis general de un scriptlet es: <%scriplet%>
  • 57. Expresiones Una expresión es un tipo especial de scriptlet que genera de forma directa una respuesta que se enviará al cliente como parte del contenido generado por la página JSP, es decir, contribuye directamente a la salida de la página JSP. La sintaxis de las expresiones es: <%=expresión%>
  • 58. Comentarios Dentro de una página JSP podemos distinguir tres tipos de comentarios, los que son propios de la especificación JSP y constituyen un elemento de scripting, los comentarios del lenguaje de scripting, en este caso los comentarios que podemos utilizar en el lenguaje Java, y los comentarios del lenguaje HTML y XML. La sintaxis de los comentarios JSP es la siguiente: <%--Comentario--%>
  • 60. Introducción Los objetos integrados se encuentran disponibles en los scriptlets y en las expresiones, sin embargo no se pueden utilizar en la declaraciones, ya sean de métodos o de variables. Esto es debido a que las declaraciones, se traducen en atributos o métodos del servlet resultante, mientras que los objetos integrados sólo están disponibles dentro del método _jspService() del servlet generado, debemos recordar que todo el código fuente de los scriptlets de la página JSP se traduce en código fuente del método _jspService() del servlet generado.
  • 61. request Este objeto representa una petición realizada a una página JSP y es una instancia del interfaz javax.servlet.http.HttpServletRequest. El objeto request es generado por el contenedor de páginas JSP y pasado como un parámetro del método _jspService() contenido en el servlet correspondiente a la página JSP. Este objeto cumple con el cometido del interfaz HttpServletRequest, que si recordamos era el de permitir obtener la información que envía el usuario al realizar una petición de un servlet (en este caso a una página JSP), esta información puede ser muy variada, puede ser desde encabezados de petición del protocolo HTTP, cookies enviadas por el usuario o los datos de un formulario.
  • 62. response El objeto response es una instancia del interfaz javax.servlet.http.HttpServletResponse y encapsula la respuesta que le es enviada al usuario como el resultado de la petición de una página JSP. Al igual que sucedía con el objeto request, este objeto es generado por el contenedor de página JSP y pasado como parámetro de método _jspService() del servlet correspondiente.
  • 63. pageContext Este objeto no tiene correspondencia con ninguna clase ni interfaz del API de los servlets, sino que es una instancia de una clase perteneciente al API JSP, se trata de la clase javax.servlet.jsp.PageContext. El objeto pageContext encapsula el contexto para una página JSP particular, a través de este objeto tenemos acceso a el resto de los objetos implícitos de JSP. Este objeto es creado de manera automática dentro del método _jspService() del servlet generado a partir de la página JSP correspondiente, y partir del objeto pageContext se obtienen otros objetos integrados dentro del servlet.
  • 64. session Este objeto representa una sesión de un usuario con nuestra aplicación Web, y es una instancia del interfaz javax.servlet.http.HttpSession. Las sesiones son creadas de forma automática, a no ser que se indique lo contrario dentro de la directiva page de la página JSP. El objeto session ofrece toda la funcionalidad que ofrecía el interfaz HttpSession, que recordamos era: mantener a través de nuestros servlets información a lo largo de una sesión del cliente con nuestra aplicación Web. Cada cliente tendrá su propia sesión, y dentro de la sesión podremos almacenar cualquier tipo de objeto.
  • 65. application El objeto application representa a la aplicación Web (contexto) en la que se encuentra una aplicación JSP, es una instancia del interfaz javax.servlet.ServletContext, y por lo tanto posee la misma funcionalidad que es la de permitir comunicarlos con el contenedor de páginas JSP, y permitir mantener un estado más general que el de la sesión para que se comparta entre todos lo usuarios de la aplicación Web. Este objeto se creará en el método _jspService() del servlet generado a partir de la página JSP de la que hemos realizado su petición.
  • 66. Tabla de Objetos integrados
  • 67. Tabla de Objetos integrados
  • 68. Ejemplos <%@ page import=&quot;java.util.*&quot; %> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Origen</title> </head> <body> <%request.setAttribute(&quot;fecha&quot;,new Date()); RequestDispatcher rd=application.getRequestDispatcher(&quot;/destino.jsp&quot;); rd.forward(request,response);%> </body> </html>
  • 69. Ejemplo <%@ page import=&quot;java.util.*&quot; %> <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Destino</title> </head> <body> <%Date fecha=(Date)request.getAttribute(&quot;fecha&quot;);%> Atributo de la petición: <%=fecha%><br> </body> </html>
  • 70. Ejemplo <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;> <html> <head> <title>Untitled</title> </head> <body> <%if(request.getParameter(&quot;enviar&quot;)==null){%> <%--No se ha pulsado el botón de envío, por lo tanto se muestra el formulario en el navegador--%> <form action=&quot;formulario.jsp&quot; method=&quot;GET&quot;> <b>Datos personales</b><br> Nombre: <input type=&quot;Text&quot; name=&quot;nombre&quot; size=&quot;20&quot;><br> Apellidos: <input type=&quot;Text&quot; name=&quot;apellidos&quot; size=&quot;20&quot;><br> Edad: <input type=&quot;Text&quot; name=&quot;edad&quot; size=&quot;20&quot;><br> Email:<input type=&quot;Text&quot; name=&quot;email&quot; size=&quot;30&quot;><br> <br> <b>Departamentos</b><br> <select name=&quot;departamentos&quot; multiple size=&quot;5&quot;> <option value=&quot;Sistemas&quot;>Sistemas</option> <option value=&quot;Desarrollo&quot;>Desarrollo</option> <option value=&quot;Comercial&quot;>Comercial</option> <option value=&quot;Administración&quot;>Administración</option> <option value=&quot;Formación&quot;>Formación</option> </select><br><br> <b>Lenguajes de programación y entornos de desarrollo</b><br> <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;C++&quot;>C++ <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;Visual Basic&quot;>Visual Basic <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;Java&quot;>Java <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;ASP&quot;>ASP <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;Delphi&quot;>Delphi <input type=&quot;checkbox&quot; name=&quot;lenguajes&quot; value=&quot;JSP&quot;>JSP <br> <input type=&quot;Submit&quot; name=&quot;enviar&quot; value=&quot;Enviar&quot;> </form> <%}else{%> <%--Se ha pulsado el botón de envío y se muestran los datos contenidos en el formulario--%> <ul> <li>nombre: <i><%=request.getParameter(&quot;nombre&quot;)%></i> <li>apellidos: <i><%=request.getParameter(&quot;apellidos&quot;)%></i> <li>edad: <i><%=request.getParameter(&quot;edad&quot;)%></i> <li>email: <i><%=request.getParameter(&quot;email&quot;)%></i> <%String[] valores=request.getParameterValues(&quot;departamentos&quot;);%> <li>departamentos: <i> <% int i; if (valores!=null){ for (i=0;i<=valores.length-2;i++){%> <%=valores[i]%>, <%}%> <%=valores[i]%></i> <%} valores=request.getParameterValues(&quot;lenguajes&quot;);%> <li>lenguajes: <i> <%if (valores!=null){ for (i=0;i<=valores.length-2;i++){%> <%=valores[i]%>, <%}%> <%=valores[i]%></i> <%}%> </ul> <a href=&quot;formulario.jsp&quot;>Volver</a> <%}%> </body> </html>