Java Server Pages Dr. Raúl Pérez Introducción z Escribir código HTML en los servlets es tedioso y se presta a equivocarse fácilmente debido a que hay que utilizar las instrucciones print, println, etc. Es decir, HTML está dentro de jjava. p z JSP permite invertir la visión e insertar java dentro de HTML es decir escribir normalmente la página HTML insertando código java en las partes dinámicas dinámicas. Ejemplo z Los 2 ejemplos siguientes tienen f funcionalidades i lid d equivalentes, i l t ell primero i es un servlet y el segundo un JSP. Ejemplo de Servlet public class ThreeParams extends HttpServlet { public void doGet(HttpServletRequest request request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Reading Three Request Parameters"; String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0”+ “Transitional//EN\">\n"; Servlet (cont…) out.println(docType + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<H1>" + title + "</H1>\n" + "<UL>\n" + " <LI><B>param1</B>: "+ request.getParameter("param1") + "\n" + " <LI><B>param2</B>: " + request.getParameter("param2") + "\n" + " <LI><B>param3</B>: “ + request.getParameter( request getParameter("param3") param3 ) + "\n" \n + "</UL>\n" + "</BODY></HTML>"); } } Ejemplo de JSP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>Reading Three Request Parameters</TITLE> </HEAD> <BODY> <H1>Reading Three Request Parameters</H1> <UL> UL <LI><B>param1</B>: <%= request.getParameter("param1") %> <LI><B>param2</B>: <%= request.getParameter("param2") %> <LI><B>param3</B>: <%= request.getParameter("param3") %> </UL> </BODY></HTML> Observaciones sobre los ejemplos z El JSP es mas corto y simple de escribir z El servidor construye un servlet a partir de la página JSP. z Siempre que haya mucho HTML y poco java conviene mas JSP que los servlets. z Cuando el código java es complejo convienen mas los servlets que JSP. z Es p posible combinar los 2 enfoques q – – Usar servlets para las operaciones complejas. Usar JSP para la parte de presentación. Elementos de JSP z Las etiquetas JSP embebidas en páginas HTML se usan para crear servlets l t en ell servidor. z Existen 2 tipos principales de elementos JSP: – – Scripting Directives Directives. JSP Scripting z Expresiones, se evalúan y se insertan di t directamente t en la l página. á i z Scriptlets, son bloques de código java. z Declaraciones, se pueden declarar variables y métodos para utilizar en la página. Expresiones z z z z Usan el formato <%= expresión java %> . Las expresiones se evalúan evalúan, se convierten en Strings y se insertan en la página HTML. Se utilizan con segmentos muy cortos de código java. java Pueden usar 4 variables predefinidas: – – – – request (HttpRequest), response(HttpResponse), session (HttpSession), out (Printwriter) Ejemplos de expresiones JSP <%= request.getRemoteAddress() %> Imprime la dirección IP del cliente <%= new java.util.Date() %> Imprime la hora y la fecha Scriptlets JSP z La etiqueta HTML para enmarcar un Scriptlet es <% % código ódi %>. % z Los Scriptlets se traducen en código insertado directamente en el servlet. z Generalmente son bloques extensos. Ejemplo de Scriptlets JSP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>Color Testing</TITLE> </HEAD> /HEAD <% String bgColor = request.getParameter("bgColor"); if (( ((bgColor g == null)) || (bgColor.trim().equals(""))) ( g () q ( ))) { bgColor = "WHITE"; } %> <BODY BGCOLOR="<%= bgColor %>"> <H2 ALIGN="CENTER">Testing a Background of "<%= bgColor %>"</H2> </BODY></HTML> Ejemplo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-Example of using scriptlets to make parts of the page conditional. Taken from Core Servlets and JavaServer Pages 2nd Edition from Prentice Hall and Sun Microsystems Press Press, http://www.coreservlets.com/. (C) 2003 Marty Hall; may be freely used or adapted. --> <HTML> <HEAD> <TITLE>Wish for the Day</TITLE> <LINK REL=STYLESHEET REL STYLESHEET HREF="JSP-Styles.css" TYPE="text/css"> </HEAD> Ejemplo <BODY> <% if (Math.random() < 0.5) { %> <H1>Have a <I>nice</I> day!</H1> <% } else { %> <H1>Have a <I>lousy</I> day!</H1> <% } %> </BODY></HTML> Declaraciones JSP z Permiten definir métodos ó variables z No generan ninguna salida. z Usan el formato <%! código %> Ejemplo de declaración JSP <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>JSP Declarations</TITLE> </HEAD> <BODY> <H1>JSP H1 JSP Declarations</H1> D l ti /H1 <%! private int accessCount = 0; %> <H2>Accesses to page since server reboot: <%= ++accessCount %></H2> </BODY></HTML> Directivas JSP Una directiva JSP es información de alto nivel i l que afecta f t lla estructura t t generall del d l servlet. z La L etiqueta ti t HTML correspondiente di t es <%@ type = attribute value %>. z Ejemplo <%@ page import =“java = java.util. util *” %> Directivas JSP z page – z include – z Controla la estructura del servlet Insertar un archivo en una página JSP taglib – D fi etiquetas Define ti t (tags) (t )