Escolar Documentos
Profissional Documentos
Cultura Documentos
Juan Pavn Mestras Dep. Ingeniera del Software e Inteligencia Artificial Facultad de Informtica Universidad Complutense Madrid
Servlet
Muy tiles para leer cabeceras de mensajes, datos de formularios, gestin de sesiones, procesar informacin, etc. Pero tediosos para generar todo el cdigo HTML El mantenimiento del cdigo HTML es difcil Fichero con cdigo (X)HTML que incluye scripts codificados en Java Permite usar (X)HTML para definir gran parte de la pgina E introducir cdigo Java en las partes dinmicas de la pgina Mediante etiquetas especializadas (Custom Tags) que amplan la sintaxis de HTML Se compila y se convierte en un servlet (solo la primera vez que se invoca) Se ejecuta como un servlet
Con JSP es ms fcil que se distribuya la tarea de diseo de la pgina web y la programacin de la aplicacin web
JSP
JSP y servlets
Las JavaServer Pages (JSP) permiten escribir cdigo HTML e insertar cdigo Java para las partes dinmicas
<!DOCTYPEhtml> <html> <head><title>SaludoJSP</title></head> <body> <h1>Hola <%if (request.getParameter("cliente")!=null) out.println(request.getParameter("cliente"));%> </h1> </body> </html>
JSP
Servlet generado
public finalclass Saludo_jsp extends org.apache.jasper.runtime.HttpJspBase //... public void _jspService(finaljavax.servlet.http.HttpServletRequest request, finaljavax.servlet.http.HttpServletResponse response) throws java.io.IOException,javax.servlet.ServletException { //... try{ 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("<!DOCTYPEhtml>\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<title>SaludoJSP</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("<h1>Hola\r\n"); // ... Juan Pavn - UCM 2012-13
JSP
JSP
El texto HTML se denomina plantilla Los ficheros JSP deben tener la extensin .jsp
Se traducen en un servlet, que ser compilado automticamente Se ejecutar el servlet generado El cliente no Igual que los ficheros .html <%= expresin %> El resultado de evaluar la expresin se inserta en la pgina HTML <% cdigo %> Un scriptlet El cdigo se insertar en el mtodo de servicio del servlet <%! declaraciones %> Las declaraciones se insertan en la clase, no en un mtodo <%-- Comentario --%> Comentario JSP
JSP
Objetos predefinidos
request
Objeto HttpServletRequest que permite acceder a la informacin de la solicitud Objeto HttpServletResponse para generar la respuesta Objeto HttpSession asociado a la peticin Si no hubiera sesin ser null Objeto JspWriter (similar a un PrintWriter) para generar la salida para el cliente El objeto ServletContext del contenedor web
response
session
out
application
JSP
Expresiones
El resultado de evaluar la expresin ser un String que pasar a formar parte de la pgina HTML Se genera un servlet donde el resultado de la expresin se pone como out.println(expresin) dentro del mtodo _jspService()
<?xml version="1.0"encoding="ISO88591"?> <%@pagelanguage="java"contentType="text/html;charset=ISO88591" pageEncoding="ISO88591"%> <!DOCTYPEhtml PUBLIC"//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <metahttpequiv="ContentType"content="text/html;charset=ISO88591"/> <title>Hora</title> </head> <body> <p>Horaactual: <%=newjava.util.Date()%></p> <p>TuIP: <%=request.getRemoteHost()%></p> </body> </html>
Juan Pavn - UCM 2012-13 JSP
Scriptles
Entre los smbolos <% y %> Este cdigo se insertar tal cual en el mtodo _jspService() del servlet generado En el scriptlet, el texto a generar de la pgina HTML tiene que ponerse con out.print () Muchas veces hay que comprobar valores, realizar acciones ms complejas, etc. Por ejemplo, en vez de la expresin siguiente <p>Autor=<%=application.getInitParameter("Autor")%></p> Mejor el scriptlet: <% String autor=application.getInitParameter("Autor"); if ((autor==null)||(autor.trim().equals(""))) autor="Annimo"; out.println("Autor="+autor); %>
JSP
Partes condicionales
<p> <%Stringparametro =request.getParameter("nombre"); if((parametro ==null)||(parametro.trim().equals(""))){%> Nonos hasdadotu nombre. <%}else{%> Bienvenido, <%out.println(parametro);}%> </p>
JSP
Declaraciones
Se pueden incluir declaraciones en la clase del servlet generado con <%! declaracin %>
Este cdigo se inserta fuera de los mtodos de la clase, como nuevas declaraciones en la clase Variables del servlet <%!private int edad;%>
Si se declaran variables con <% ... %> sern locales al scriptlet
Mtodos
Es mejor declararlo en una clase Java aparte
<%!privateint contador =0;%> <p>Nmero deveces que sehavisitado esta pgina desde que se arranc elservidor: <%=++contador %> </p>
JSP
10
Directivas
Se aplican a la clase servlet generada Sintaxis: <%@ directiva atributo="valor" %> o bien: <%@ directiva atributo1="valor1" atributo2="valor2" ... atributoN="valorN" %> Directivas comunes
include permite incluir otro fichero que se tratar como JSP Puede tratarse de un fichero JSP, HTML, JavaScript, etc. El fichero se referencia con una URL relativa a la pgina JSP o al servidor si va precedido de / <%@include file="/URL"%> page permite importar un paquete <%@pageimport="java.util.*"%>
JSP
11
Los Java Beans son componentes Java que se usan habitualmente en aplicaciones Web para gestionar la lgica de negocio Se pueden utilizar en JSP para obtener informacin a visualizar
JSP
12
Java Beans
Declarados dentro de un paquete Constructor sin argumentos O que no se defina ningn constructor Todos los atributos son private Estos atributos se denominan propiedades Mtodos de acceso a las propiedades getPropiedad() para lectura
Para los booleanos isPropiedad()
setPropiedad(valor) para escritura Mtodos para realizar funciones ms complejas Crear una clase Java (dentro de un paquete) Para aplicaciones web, dentro del src/paquete Especificar las propiedades como atributos private Source Generate getters and setters Se crean los mtodos get y set que interesen
Enterprise Beans
13
Java Beans
public String getTelefono(){ return telefono; } public void setTelefono(String telefono){ this.telefono =telefono; } public String getNombre(){ return nombre; } public void setNombre(String nombre){ this.nombre =nombre; }
Enterprise Beans
14
<jsp:useBean id="nombreBean"class="paquete.Clase"/>
Equivale a
<%nombreBean.setPropiedad("valor");%>
<jsp:getProperty name="nombreBean"property="propiedad"/>
Equivale a
<%=nombreBean.getPropiedad()%>
Juan Pavn - UCM 2012-13 Enterprise Beans
15
Si se quiere utilizar JSP con aplicaciones XML habr que adaptar la sintaxis a XML
XHTML Servicios Web Aplicaciones Ajax HTML: <%= expression %> XML: <jsp:expression>expresin</jsp:expression> HTML: <% code %> XML: <jsp:scriptlet>cdigo</jsp:scriptlet> HTML: <%! declarations %> XML: <jsp:declaration>declaraciones</jsp:declaration> HTML: <%@ include file=URL %> XML: <jsp:directive.include file="URL"/>
Correspondencia en XML:
JSP
16
JSP
Acciones
JSP
18
Ventajas de JSP
Al tener acceso a todo Java, JSP es ms flexible y mejor lenguaje para la parte dinmica Ms herramientas de desarrollo (muchas de cdigo abierto) Mejor para crear y mantener el cdigo (X)HTML Se puede editar en herramientas tpicas de desarrollo web Aunque antes sigue siendo necesario conocer cmo programar servlets
Servlets
JSP
19
Bibliografa
Eric Jendrock et al. The Java EE 6 Tutorial (2013). http://docs.oracle.com/javaee/6/tutorial/doc/ Building Web Apps in Java: Beginning & Intermediate Servlet & JSP Tutorials. http://courses.coreservlets.com/Course-Materials/csajsp2.html Documentacin oficial
JSP
20