Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Material bajo licencia Creat ive Com m ons Java EE – JavaServer Pages (JSP) Aplicaciones W eb/ Sistem as W eb Juan Pavón Mest ras Dep. I ngenier ía del Softw a re e I nte ligencia Ar t if icia l Facultad de I nform át ica Universidad Com plutense Madr id Java EE Servlets y JSPs Servlet Muy út iles para leer cabeceras de m ensajes, datos de form ularios, gest ión de sesiones, procesar inform ación, etc. Pero tediosos para generar todo el código HTML • El m antenim iento del código HTML es difícil JSP ( JavaServer Pages) Fichero con código (X)HTML que incluye scripts codificados en Java • Perm ite usar (X)HTML para definir gran parte de la página • E int roducir código Java en las partes dinám icas de la página • Mediante et iquetas especializadas (Custom Tags) que am plían la sintaxis de HTML Se com pila y se convierte en un servlet (solo la pr im era vez que se invoca) • Se ejecuta com o un servlet Con JSP es m ás fácil que se dist r ibuya la tarea de diseño de la página web y la program ación de la aplicación web Juan Pavón - UCM 2012-13 JSP 2 JSP y servlets Los servlets t ienen que generar todo el código HTML Las JavaServer Pages (JSP) perm iten escribir código HTML e insertar código Java para las partes dinám icas Juan Pavón - UCM 2012-13 JSP 3 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println ("<!DOCTYPE html>\n" + "<html>\n" + "<head><title>Formulario de saludo</title></head>\n" + "<body>\n" + "<h1>Hola "+request.getParameter("cliente")+"</h1>\n" + "</body></html>"); <!DOCTYPE html> <html> <head><title>Saludo JSP</title></head> <body> <h1>Hola <% if (request.getParameter("cliente")!=null) out.println(request.getParameter("cliente")); %> </h1> </body> </html> Servlet generado Se encont rará en el director io work del servidor tom cat Juan Pavón - UCM 2012-13 JSP 4 public final class Saludo_jsp extends org.apache.jasper.runtime.HttpJspBase //... public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.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("<!DOCTYPE html>\r\n"); out.write("<html>\r\n"); out.write("<head>\r\n"); out.write("<title>Saludo JSP</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("<h1>Hola\r\n"); // ... JSP El texto HTML se denom ina plant illa Los ficheros JSP deben tener la extensión . j sp Se t raducen en un servlet , que será com pilado automát icam ente Se ejecutará el servlet generado El cliente no En eclipse se crean dent ro de WebContent I gual que los ficheros .htm l El código Java se enm arca de varias m aneras: < % = expresión % > • El resultado de evaluar la expresión se inserta en la página HTML < % código % > • Un script let • El código se insertará en el m étodo de servicio del servlet < % ! declaraciones % > • Las declaraciones se insertan en la clase, no en un m étodo < % - - Com entario - - % > • Com entario JSP Juan Pavón - UCM 2012-13 JSP 5 Objetos predefinidos request Objeto Ht tpServletRequest que perm ite acceder a la inform ación de la solicitud response Objeto Ht tpServletResponse para generar la respuesta session Objeto Ht tpSession asociado a la pet ición Si no hubiera sesión será null out Objeto JspWriter (sim ilar a un PrintWriter) para generar la salida para el cliente applicat ion El objeto ServletContext del contenedor web Juan Pavón - UCM 2012-13 JSP 6 Expresiones < % = expresión Java % > El resultado de evaluar la expresión será un St r ing que pasará a form ar parte de la página HTML • Se genera un servlet donde el resultado de la expresión se pone com o out .pr int ln(expresión) dent ro del m étodo _jspService( ) Juan Pavón - UCM 2012-13 JSP 7 <?xml version="1.0" encoding="ISO‐8859‐1" ?> <%@ page language="java" contentType="text/html; charset=ISO‐8859‐1" pageEncoding="ISO‐8859‐1"%> <!DOCTYPE html PUBLIC "‐//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1‐transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http‐equiv="Content‐Type" content="text/html; charset=ISO‐8859‐1" /> <title>Hora</title> </head> <body> <p>Hora actual: <%= new java.util.Date() %></p> <p>Tu IP: <%= request.getRemoteHost() %></p> </body> </html> Script les Es la form a de insertar código Java en JSP Entre los sím bolos < % y % > Este código se insertará tal cual en el m étodo _jspService( ) del servlet generado En el scr ipt let , el texto a generar de la página HTML t iene que ponerse con out .pr int ( ) Norm alm ente es m ás práct ico usar scr ipt lets que expresiones Muchas veces hay que com probar valores, realizar acciones m ás com plejas, etc. • Por ejem plo, en vez de la expresión siguiente <p>Autor = <%= application.getInitParameter("Autor") %></p> • Mejor el scr ipt let : Juan Pavón - UCM 2012-13 JSP 8 <% String autor = application.getInitParameter("Autor"); if ((autor == null)||(autor.trim().equals(""))) autor = "Anónimo"; out.println("Autor = "+autor); %> Partes condicionales Con script les se puede condicionar la ejecución de partes del fichero JSP No obstante este m ecanism o puede dar lugar a código poco claro Juan Pavón - UCM 2012-13 JSP 9 <p> <% String parametro = request.getParameter("nombre"); if ((parametro == null) || (parametro.trim().equals(""))) { %> No nos has dado tu nombre. <% } else { %> Bienvenido, <% out.println(parametro); } %> </p> Declaraciones Se pueden incluir declaraciones en la clase del servlet generado con < % ! declaración % > Este código se inserta fuera de los m étodos de la clase, com o nuevas declaraciones en la clase • Variables del servlet <%! private int edad; %> • Si se declaran variables con < % ... % > serán locales al scr ipt let • Métodos • Es m ejor declararlo en una clase Java aparte Juan Pavón - UCM 2012-13 JSP 10 <%! private int contador = 0; %> <p>Número de veces que se ha visitado esta página desde que se arrancó el servidor: <%= ++contador %> </p> Direct ivas Se aplican a la clase servlet generada Sintaxis: < % @ direct iva at r ibuto= "valor" % > o bien: < % @ direct iva at r ibuto1= "valor1" at r ibuto2= "valor2" ... at r ibutoN= "valorN" % > Direct ivas com unes include – perm ite incluir ot ro fichero que se t ratará com o JSP • Puede t ratarse de un fichero JSP, HTML, JavaScript , etc. • El fichero se referencia con una URL relat iva a la página JSP o al servidor si va precedido de / <%@ include file="/URL" %> page – perm ite im portar un paquete <%@ page import="java.util.*" %> Juan Pavón - UCM 2012-13 JSP 11 Uso de Java Beans con JSP Los Java Beans son com ponentes Java que se usan habitualm ente en aplicaciones Web para gest ionar la lógica de negocio Se pueden ut ilizar en JSP para obtener inform ación a visualizar Más adelante se verá la arquitectura MVC donde JSP im plem enta la vista Juan Pavón - UCM 2012-13 JSP 12 Java Beans Clases Java que cum plen varias convenciones Declarados dent ro de un paquete Const ructor sin argum entos • O que no se defina ningún const ructor Todos los at r ibutos son pr ivate • Estos at r ibutos se denom inan propiedades Métodos de acceso a las propiedades • getPropiedad ( ) para lectura • Para los booleanos isPropiedad ( ) • setPropiedad( va lor ) para escritura Métodos para realizar funciones m ás com plejas En Eclipse se crean con facilidad Crear una clase Java (dent ro de un paquete) • Para aplicaciones web, dent rodel src/ paquete Especificar las propiedades com o at r ibutos pr ivate Source Generate get ters and set ters… • Se crean los m étodos get y set que interesen Juan Pavón - UCM 2012-13 Enterprise Beans 13 Java Beans Ejem plo de un Bean cliente Juan Pavón - UCM 2012-13 Enterprise Beans 14 public class Cliente { private String nombre; private String nif; private String email; private String direccion; private String telefono; 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; } public String getDireccion() { return direccion; } public void setDireccion(String direccion) { this.direccion = direccion; } public String getNif() { return nif; } public String getEmail() { return email; } } JSP y Java Beans JSP proporciona varias et iquetas para usar Java Beans j sp:useBean • Crea un Java Bean <jsp:useBean id="nombreBean" class="paquete.Clase" /> • Equivale a <% paquete.Clase nombreBean = new paquete.Clase(); %> j sp:setProper ty • Modifica una propiedad llam ando al m étodo setPropiedad( ) <jsp:setProperty name="nombreBean" property="propiedad" value="valor" /> • Equivale a <% nombreBean.setPropiedad("valor"); %> j sp:getProper ty • Obt iene el valor de una propiedad llam ando a getPropiedad( ) <jsp:getProperty name="nombreBean" property="propiedad" /> • Equivale a <%= nombreBean.getPropiedad() %> Juan Pavón - UCM 2012-13 Enterprise Beans 15 Versión XML de JSP Si se quiere ut ilizar JSP con aplicaciones XML habrá que adaptar la sintaxis a XML XHTML Servicios Web Aplicaciones Ajax Correspondencia en XML: HTML: < % = expression % > XML: < jsp: expression> expresión< / jsp: expression> HTML: < % code % > XML: < jsp: script let> código< / jsp: scr ipt let> HTML: < % ! declarat ions % > XML: < jsp: declarat ion> declaraciones< / jsp: declarat ion> HTML: < % @ include file= URL % > XML: < jsp: direct ive.include file= "URL"/ > Juan Pavón - UCM 2012-13 JSP 16 Versión XML de JSP Juan Pavón - UCM 2012-13 JSP 17 <?xml version="1.0" encoding="UTF‐8" ?> <html xmlns:jsp="http://java.sun.com/JSP/Page"> <jsp:output omit‐xml‐declaration="true" doctype‐root‐element="html" doctype‐public="‐//W3C//DTD XHTML 1.0 Transitional//EN" doctype‐system="http://www.w3.org/TR/xhtml1/DTD/xhtml1‐ transitional.dtd" /> <jsp:directive.page contentType="text/html"/> <head> <title>Título de la página</title> </head> <body> Cuerpo con scriptles, etc. </body> </html> Espacio de nom bre para las et iquetas j sp: XXX Declaración del t ipo de docum ento Acciones Et iquetas JSP con sintaxis XML para cont rolar el intérprete de servlets <jsp:include page="URL" flush="true" /> • I ncluye el URL indicado en t iem po de ejecución en vez de en t iem po de com pilación (que es lo que hace la direct iva include) Esto sirve para datos que cam bian con frecuencia <jsp:forward page="URL" /> <jsp:forward page="<%= expresiónJava %>" /> Salta al URL (estát ico) o al URL resultante de la expresión Java (calculado dinám icam ente) Juan Pavón - UCM 2012-13 JSP 18 Ventajas de JSP PHP, ASP, ColdFusion Al tener acceso a todo Java, JSP es m ás flexible y m ejor lenguaje para la parte dinám ica Más herram ientas de desarrollo (m uchas de código abierto) Servlets Mejor para crear y m antener el código (X)HTML Se puede editar en herram ientas t ípicas de desarrollo web Aunque antes sigue siendo necesario conocer cóm o program ar servlets Juan Pavón - UCM 2012-13 JSP 19 Bibliografía Eric Jendrock et al. The Java EE 6 Tutorial (2013) . ht tp: / / docs.oracle.com / javaee/ 6/ tutor ial/ doc/ Building Web Apps in Java: Beginning & I nterm ediate Servlet & JSP Tutorials. ht tp: / / courses.coreservlets.com / Course-Materials/ csajsp2.htm l Docum entación oficial Java EE Specificat ions ht tp: / / www.oracle.com / technetwork/ java/ javaee/ tech/ index.htm l API specificat ion for version 6 of Java EE ht tp: / / docs.oracle.com / javaee/ 6/ api/ Juan Pavón - UCM 2012-13 JSP 20
Compartir