Download Java Server Pages Java Server Pages

Document related concepts
no text concepts found
Transcript
JSP
Java Server Pages
César Acebal
cesaracebal.com
[email protected]
¿Qué es JSP?
Una tecnología para crear páginas Web dinámicas
Contiene código HTML normal junto elementos especiales de JSP
Están construidas sobre servlets
Internamente, el servidor de aplicaciones las compilará a un servlet
Vienen a resolver el problema de aquéllos (que era el mismo
que con CGI), es decir:
Que la creación de la página Web se haga generando HTML directamente
por código, en un lenguaje de programación
Esto dificulta enormemente la separación de tareas en el equipo de
desarrollo, entre diseñadores y programadores
Introducción a JSP
Introducció
César Acebal
2
Insertar JSP en páginas HTML
JSP (como ASP) aborda el problema a la inversa:
En vez de insertar HTML en código de programación,
podremos insertar ciertos elementos de código en las páginas
HTML
Introducción a JSP
Introducció
César Acebal
3
Ejemplo de página JSP
<html>
<head>
<title>Saludo personalizado con JSP</title>
</head>
<body>
<% java.util.Date hora = new java.util.Date(); %>
<% if (hora.getHours() < 12) { %>
<h1>¡Buenos días!</h1>
<% } else if (hora.getHours() < 21) { %>
<h1>¡Buenas tardes!</h1>
<% } else { %>
<h1>¡Buenas noches!</h1>
<% } %>
<p>Bienvenido a nuestro sitio Web, abierto las 24 horas del
día.</p>
</body>
</html>
Introducción a JSP
Introducció
César Acebal
4
Para este viaje… ¿hacen falta tantas
alforjas?
Lo cierto es que incluir mucha lógica de
programación en una página Web no es que sea
mucho mejor que generar el HTML por programa
Pero JSP proporciona los elementos de acción
(action elements) que son como etiquetas HTML pero
que representan código reutilizable
Además, podríamos llamar a otras clases Java del
servidor, a componentes (Javabeans
(Javabeans o EJB
EJB)…
)…
Introducción a JSP
Introducció
César Acebal
5
Separación de presentación y lógica
En definitiva, lo que permite JSP (bien utilizado) es
una mayor separación entre la presentación de la
página y la lógica de la aplicación, que iría aparte
(Desde la página JSP únicamente llamaríamos, de diferentes
formas, a ese código)
Introducción a JSP
Introducció
César Acebal
6
Despliegue de una pá
página JSP
Crear una pá
página JSP que muestre la fecha actual
<html>
<head>
<title>Fecha actual con JSP</title>
</head>
<body>
<p>Hoy es <%= new java.util.Date(); %>
<p>
</body>
</html>
Introducción a JSP
Introducció
César Acebal
7
Despliegue de una pá
página JSP
Crear la estructura bá
básica de directorios
ejemplos
WEB-INF
Y éste (el directorio
raíz de la aplicación)
iría en el directorio de
despliegue del
servidor de
aplicaciones
(Tomcat, en nuestro
caso)
Introducción a JSP
Introducció
César Acebal
classes
lib
Las clases
compiladas de Java
(servlets,
JavaBeans, etc.)
Cualquier fichero
.jar necesario para
la aplicación
..
.
web.xml
Descriptor de
despliegue (cómo
llamar a los servlet,
seguridad, etc.)
8
Despliegue de una pá
página JSP
Lo guardamos como index.jsp en el directorio raí
raíz de
la aplicació
aplicación
Debe tener extensión jsp
Introducción a JSP
Introducció
César Acebal
9
Primer ejemplo
Una vez desplegada la aplicación en Tomcat, vamos
a probarla
Introducir en el navegador el siguiente URL:
http://localhost:8080/ejemploshttp://localhost:8080/ejemplos
-jsp/index.jsp
Debería mostrarnos la siguiente página:
Introducción a JSP
Introducció
César Acebal
10
Resultado de la ejecución
Para ver esta película, debe
disponer de QuickTime™ y de
un descompresor TIFF (LZW).
Introducción a JSP
Introducció
César Acebal
11
Establecer la página inicial
En el ejemplo anterior era necesario indicar
explícitamente cuál era la página predeterminada
Aquélla que deberá devolver el servidor cuando sólo se le
indique un directorio
Por ejemplo, ante:
http://localhost:8080/ejemploshttp://localhost:8080/ejemplos
-jsp
Podemos cambiar esto en el fichero web.xml:
<welcome-file<welcomefile-list>
<welcome<welcome
-file>index.jsp</welcomefile>index.jsp</welcome-file>
</welcome</welcome
-filefile-list>
Introducción a JSP
Introducció
César Acebal
12
¿Un servlet?
Efectivamente, las páginas JSP no son más que otra interfaz
que se le ofrece al programador de la misma tecnología
Otra manera de hacer lo mismo
De hecho, ya hemos dicho que el servidor de aplicaciones las
compilará internamente a un servlet
Incluso en este caso, que sólo hay código HTML, debido a la extensión
(.jsp)
Podemos comprobarlo yendo al directorio
work/Catalina/localhost/ejemploswork/Catalina/localhost/ejemplosjsp/org/apache/jsp/ dentro de Tomcat y examinado el
fichero generado index_jsp.java
Además, nótese cómo la primera vez que pedimos la página tarda un poco
(es porque está compilando la página)
Introducción a JSP
Introducció
César Acebal
13
Servlet generado por Tomcat
import oracle.jsp.runtime.*;
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private static java.util.List _jspx_dependants;
public Object getDependants() {
return _jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
Introducción a JSP
Introducció
César Acebal
14
Servlet generado por Tomcat
try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n");
out.write("\t\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n");
out.write("<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"es\" lang=\"es\">\n");
out.write(" <head>\n");
out.write(" <title>Fecha de hoy con JSP</title>\n");
out.write("\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"/>\n");
out.write(" </head>\n");
out.write(" <body>\n");
out.write("\n");
out.write("\t<h1>Fecha con JSP</h1>\n");
out.write("\t\n");
out.write("\t<p>Hoy es ");
out.print( new java.util.Date() );
out.write("</p>\n");
out.write("\n");
out.write(" </body>\n");
out.write("</html>\n");
Introducción a JSP
Introducció
César Acebal
15
Servlet generado por Tomcat
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public class _index extends com.orionserver.http.OrionHttpJspPage {
public final String _globalsClassName = null;
// ** Begin Declarations
// ** End Declarations
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException {
response.setContentType( "text/html;charset=ISO-8859-1");
/* set up the intrinsic variables using the pageContext goober:
** session = HttpSession
** application = ServletContext
Introducción a JSP
Introducció
César Acebal
16
¿Un servlet?
En la siguiente figura podemos ver los pasos que comprende
el procesamiento de una página JSP en el servidor:
Primero, una fase de traducción automática de la página JSP a código
fuente Java del servlet que la implementa
Luego, se compila dicha clase
Ante las subsiguientes
peticiones, se ejecutará
directamente la clase del
servlet generado
Introducción a JSP
Introducció
César Acebal
17
Elementos de JSP
Tres son los bloques de construcción básicos de
JSP:
Directivas
Acciones
Elementos de “scripting
scripting”
Veamos los distintos elementos, comenzando por
estos últimos
Introducción a JSP
Introducció
César Acebal
18
Elementos de “scripting”
Permiten añadir pequeños trozos de código
directamente en la página JSP, incrustado entre el
HTML
Por ejemplo, una instrucción if para generar una salida
HTML diferente dependiendo de una determinada condición
Hay que usarlos con mucho cuidado (o no usarlos en
absoluto)
– Si no, acabaríamos por tener los mismos problemas de mantenibilidad
de la aplicación que con los servlets cuando metíamos en ellos HTML
Introducción a JSP
Introducció
César Acebal
19
Elementos de “scripting”
Hay tres tipos de elementos de “scripting”
“scripting”::
Elemento
Descripción
<% ... %>
Scriptlet.. se usa para meter código Java dentro
Scriptlet
<%= ... %>
Expresión. Permite acceder al valor devuelto por
Expresión.
una expresión en Java
<%! ... %>
Declaración. Usada para declarar variables y
Declaración.
métodos en la clase correspondiente a la página
Introducción a JSP
Introducció
César Acebal
20
Un ejemplo más “dinámico”
Hagamos ahora una página JSP que, en función de
la hora, muestre un saludo diferente (buenos días,
buenas tardes o buenas noches)
Y que muestre también la hora actual
Introducción a JSP
Introducció
César Acebal
21
Objetos predefinidos
Las páginas JSP tienen acceso a los mismos objetos
predefinidos que tenían los servlets
Aquí se llaman como sigue:
request
response
pageContext
session
application
out
config
page
Introducción a JSP
Introducció
César Acebal
Se puede acceder a
ellos directamente
desde los “scriptlets”
22
Ejercicio: Saludo personalizado
Hacer una página JSP que reciba el nombre del usuario y
muestre un saludo personalizado
Hacer uso de request.getParameter(“Nombre”)
Llamar a dicha página saludo.jsp
Probar la página con el método GET
Pasándole como parámetro el nombre a través del URL
– (Como en el ejemplo del servlet)
Crear una página index.html que llame a esa JSP
Cambiando el atributo action de form para que llame a la página
anterior
Introducción a JSP
Introducció
César Acebal
23
Directivas
JSP tiene una serie de directivas que permiten configurar la
página
Ejemplos:
Elemento
Descripción
<% page ... %>
Permite importar clases Java, especificar el tipo de
la respuesta (“text/html” por omisión), etcétera
<%= include ... %>
Permite incluir otros ficheros antes de que la
página sea traducida a un servlet
<%! taglib ... %>
Declara una biblioteca de etiquetas con acciones
personalizadas para ser utilizadas en la página
Introducción a JSP
Introducció
César Acebal
24
Acciones
Elementos XML que realizan determinadas acciones
JSP define las siguientes acciones:
Elemento
Descripción
<jsp:useBean>
Permite usar un JavaBean desde la página
<jsp:getProperty>
Obtiene el valor de una propiedad de un componente
JavaBean y lo añade a la respuesta
<jsp:setProperty>
Establece el valor de una propiedad de un JavaBean
<jsp:include>
Incluye la respuesta de un servlet o una página JSP
<jsp:forward>
Redirige a otro servlet o página JSP
<jsp:param>
Envía un parámetro a la petición redirigida a otro
servlet o JSP mediante <jsp:include> o <jsp:forward>
<jsp:plugin>
Genera el HTML necesario para ejecutar un applet
Introducción a JSP
Introducció
César Acebal
25
Acciones personalizadas
Aparte de ésas, JSP permite crear nuestros propios
elementos de acciones
De esa manera, sí que logramos una verdadera
separación entre la presentación (HTML) y la lógica
de la aplicación (que ahora iría fuera de la JSP,
invocada por estos elementos)
En el curso usaremos los elementos propios de
Struts
Introducción a JSP
Introducció
César Acebal
26