Java Server Pages JSP Otra forma de hacer
- Slides: 25
Java Server Pages JSP Otra forma de hacer servlets
Las JSP • Son páginas HTML a las que se le inserta código que produce servlets • Se usan cuando la parte estática de la página que se debe generar es relativamente importante (la parte que no cambia) • Al cargarse una página JSP esta se compila, se genera el servlet y se ejecuta • Por esto, la primera invocación a una JSP demora más que las siguientes
Contenido de una JSP • Una JSP, aparte de código HTML puede contener 3 tipos de instrucciones : – Elementos de scripting: son los elementos que definen el comportamiento dinámico del servlet, es decir su código – directivas: afectan la estructura general del servlet que resulta de la JSP (import, include) – acciones: permiten redirigir el request a otra instancia JSP, servlet o página HTML
Elementos de scripting • 1. Expresiones de la forma <%= expresión %>, son evaluadas e insertadas en el output del servlet • 2. Scriptlets son instrucciones Java de la forma <% code %>, que son insertadas en el método _jsp. Service que se llama cuando se contacta a la página jsp (el equivalente al do. Get) • 3. Declaraciones de la forma <%! code %>, que son insertadas en el cuerpo de la clase del servlet, fuera de todo método, definiendo así variables de instancia
Variables predefinidas • Para simplificar las expresiones, existen variables predefinidas que se pueden usar. Las más importantes son: – request, el Http. Servlet. Request – response, el Http. Servlet. Response – session, el Http. Session asociada al request – out, el Print. Writer usado para mandar output al cliente
Un Ejemplo (Ejemplo 1. jsp) <HTML> <HEAD> <TITLE>JSP Expressions</TITLE> </HEAD> <BODY> <H 2>JSP Expressions</H 2> <UL> <LI>Current time: <%= new java. util. Date() %> <LI>Your hostname: <%= request. get. Remote. Host() %> <LI>Your session ID: <%= session. get. Id() %> <LI>The <CODE>test. Param</CODE> form parameter: <%= request. get. Parameter("test. Param") %> </UL> </BODY> </HTML>
Explicaciones • El servidor crea un servlet, lo compila y llama al método _jsp. Service que contiene todas las sentencias escritas entre <% y %> • El texto HTML es mandado al cliente por vía out. print(. . ) • Las expresiones se evalúan y se insertan en el texto que se manda, por lo cual la expresión <LI>Current time: <%= new java. util. Date() %> equivaldría en un servlet a hacer out. println(“<LI>Current time: “+ new java. util. Date() );
Scriptlets • Si se quiere hacer algo más complicado que insertar una simple expresión en el output del servlet se pueden incluir sentencias JAVA en scriptlets que tienen la siguiente estructura: <% String query. Data = request. get. Query. String(); out. println("Attached GET data: " + query. Data); %> • Los Scriptlets tienene acceso a a las mismas variables definidas automáticamente a las que tienen acceso las expresiones • En particular, esto también se pudo haber logrado con El string mandado con GET fue: <%= request. get. Query. String() %> pero hay cosas que no se pueden hacer con expresiones: <% response. set. Content. Type("text/plain"); %>
Algo más serio (Ejemplo 2. jsp) <HTML> <HEAD> <TITLE>Color Testing</TITLE> </HEAD> <% String bg. Color = request. get. Parameter("bg. Color"); boolean has. Explicit. Color; if (bg. Color != null) { has. Explicit. Color = true; } else { has. Explicit. Color = false; bg. Color = "WHITE"; } %> <BODY BGCOLOR="<%= bg. Color %>"> <H 2 ALIGN="CENTER">Color Testing</H 2> <% if (has. Explicit. Color) out. println("You supplied color " +bg. Color ); else out. println("Using background color WHITE. . "); %> </BODY> </HTML>
Usando Scriptlets con código HTML Para entender esto hay que tener claro que el contenido de un scriptlet se incluye exactamente como está escrito al método _jsp. Service y las sentencias HTML se traducen como un out. println(. . . contenido de sentencia HTML. . . ) en el mismo orden en que aparecen en la página jsp
Scriptlets para hacer partes del archivo JSP condicional Lo siguiente <% if (Math. random() < 0. 5) { %> Have a <B>nice</B> day! <% } else { %> Have a <B>lousy</B> day! <% } %> se traduce en el servlet que se genera en lo siguiente if (Math. random() < 0. 5) { out. write("n"); out. write("Have a <B>nice</B> day!n"); } else { out. write("n"); out. write("Have a <B>lousy</B> day! n"); }
¡¡¡¡ATENCION!!!!: los paréntesis sin absolutamente necesarios <% if (Math. random() < 0. 5) { %> Have a <B>nice</B> day! <% } else { %> Have a <B>lousy</B> day! <% } %> Debido a que el servidor genera lo siguiente if (Math. random() < 0. 5) { out. write("n"); out. write("Have a <B>nice</B> day!n"); } else { out. write("n"); out. write("Have a <B>lousy</B> day! n"); }
Scriptlets para repetir partes del codigo HTML <TABLE BORDER=2> <% for ( int i = 0; i < n; i++ ) {%> <TR> <TD>Number</TD> <%= i+1 %> </TD> </TR> <% } %> </TABLE> Se traduce en. . . out. println(“<TABLE BORDE=2>”); for ( int i = 0; i < 10; i++ ) { out. write(" n"); out. write(" <TR> <TD>Number</TD> <TD>n"); out. print( i+1 ); out. write(“ n"); out. write("</TD> </TR> n"); } out. write(" n"); out. write("</TABLE> n");
Declaraciones • No generan output, se usan para declarar variables que más tarde serán usadas en expresiones o scriptlets • Una declaración tiene la siguiente forma: <%! Java Code %> • Son variables que se declaran globales para todo el servlet Un ejemplo (Ejemplo 3. jsp) que cuenta cuantas veces ha sido accesada una página desde que se cargó: <%! private int access. Count = 0; %> Accesses to page since server reboot: <%= ++access. Count %>
Se pueden declarar Métodos <%! int factorial(int x) { int aux = 1; for (int i = 2; i<=x; i++) aux = aux * i; return aux; } %> El método se puede usar después <% int n = (int)(10*Math. random()); %> El factorial de <%=n%> es <%= factorial(n) %>
Directivas • Afectan la estructura general del servlet generado • Ejemplo de directiva page-import <%@ page import =“java. util. *" %>
El atributo import • Permite importar clases que no se incluyen automáticamente • Por ejemplo, se pueden importar las usuales para java (java. util. *) • Para las clases definidas por el programador, estas deben estar en un lugar “visible”. Este lugar depende del servidor • En tomcat es el mismo directorio en donde están los servlets (Ejemplo 4. jsp con Servlet. Utilities. java y Long. Lived. Cookie. java) <%@ page import=”java. util. *" %> <%@ page import="package. class 1, . . . , package. class. N" %>
Usando JDBC en JSP <%@page import="com. mysql. jdbc. Driver"%> <%@page import="java. sql. *"%> <% Class. for. Name("com. mysql. jdbc. Driver"). new. Instance(); String url = "jdbc: mysql: //localhost/biblioteca"; Connection con = Driver. Manager. get. Connection(url, "root"); Statement stm = con. create. Statement(); Result. Set rs = stm. execute. Query("select * from personas"); while(rs. next()) { %> RUT : <%=rs. get. Int(“rut")%> <% } %>
Incluyendo otros archivos • Es posible hacerlo al momento en que se compila la página con la directiva <%@ include file=”nombre del archivo" %> • Esto implica que se incluirá el archivo referenciado como parte del actual antes de compilarlo • El problema es que si el archivo referenciado cambia, no cambiará en la página que se muestra (a menos que se reinicie el servidor) (ver contacto. jsp y pprincipal. jsp) • Se puede hacer que cada vez que se referencie la página incluida se vuelva a recargar el contenido con la siguiente directiva <jsp: include page=”nombre del archivo" flush="true" /> (ver noticias. jsp e item 1. html, item 2. html, item 3. html)
Controlando el tipo de salida • Se hace a través de la directiva <%@ page contet. Type=”text/plain" %> • Se puede usar para determinar cualquier tipo de salida que no sea text/html • Puede ir en cualquier parte del archivo, a pesar de que en un servlet esto debe ir antes de mandar cualquier cosa. Esto es porque primero la página se compila, traduce y luego se ejecuta en el orden adecuado de las directivas <HTML> <BODY> <H 2>The content. Type Attribute</H 2> <%@ page content. Type="text/plain" %> Esto debe verse como texto plano <B>no</B> como HTML. </BODY> </HTML>
Generando salida para excel • Se hace a través de la misma directiva pero cambiando el tipo de salida que se generará (ejemplo 5. jsp) <%@ page content. Type="application/vnd. ms-excel" %> <%- entre columnas poner tabs, no espacios. -%> 1997 1998 1999 2000 2001 12. 3 13. 4 14. 5 15. 6 16. 7 • Tambien se puede lograr lo mismo escribiendo código HTML para generar una tabla pero poner en la directiva que el content. Type es ms-excel (ejemplo 6. jsp) <TABLE BORDER=1> <TR><TH></TH><TH>Apples<TH>Oranges <TR><TH>First Quarter<TD>2307<TD>4706 <TR><TH>Second Quarter<TD>2982<TD>5104 <TR><TH>Third Quarter<TD>3011<TD>5220 <TR><TH>Fourth Quarter<TD>3055<TD>5287 </TABLE>
Directiva Forward • Se usa para redirigir el requerimiento a otra página • Cuando se ejecuta se va a esa página sin que se tenga que hacer nada en el browser • Es equivalente a hacer response. send. Redirect(“servlet 2”); Ejemplo: <% percent = Math. random(); if (percent < 0. 5) { %> <jsp: forward page="/forward/one. jsp"/> <% } else { %> <jsp: forward page="two. html"/> <% } %>
error. Page & is. Error. Page • Es posible invocar una determinada página cuando en otra sucede un error (se lanza una Exception ) • Para ello hay que poner en la página que puede generar el ellror la directiva <%@ page error. Page=”una_URL_relativa" %> • En la página que debe recibir el control (una_URL_relativa) debe ponerse lo siguiente <%@ page is. Error. Page="true" %> (ver genera. Error. jsp y muestra. Error. jsp)
Java Beans • Usar Beans es una buena manera de complementar JSP cuando se requiere de estructuras de datos (clases) que hagan cosas más complejas, y separar el código de programación de estas clases de la JSP • Un Bean es una clase con las siguientes características: – Tiene un constructor que no tiene parámetros – No tiene variables públicas – Para cierto subconjunto de variables privadas llamadas propiedades, si la variable es de tipo 1 y se llama variable 1 entonces existe un método programado tipo 1 get. Variable 1() que retorna el valor actual de la propiedad y otro void set. Variable 1(tipo 1 x) que modifica el valor de la variable con el que está dado como parámetro
Usando Beans en JSP • Para poder usar Beans con JSP en Tomcat estos deben ir en el mismo directorio que los servlets • Creación – <jsp: use. Bean id=’bean 1' class=’Nombre_Clase' scope=“validez”/> • Es lo mismo que haber hecho en un programa Java – Nombre_Clase bean 1 = new Nombre_Clase(); • Obtención de valores – <jsp: get. Property name=”bean 1" property=”variable 1" /> – <%= book 1. get. Variable 1() %> • Modificación valores – <jsp: set. Property name=”bean 1” property=”variable 1” value=”valor 1" /> – <% book 1. set. Variable 1(”valor 1"); %>
- What is jsp file
- Java server pages life cycle
- Java server pages
- Java server pages
- O que e jsp
- Printed pages vs web pages
- Active server pages paradigma
- Java jsp
- Java jsp
- Nnn tutorial
- Jsp v
- Java ee jsp
- Si pues comeis o bebeis o haceis otra cosa
- Jorge luis borges momentos
- Dinos otra vez la historia de su amor
- Otra web
- Dios provee
- Y da vuelta otra hoja del libro de mi vida
- Yo nunca tuve otra escuela que una vida desgraciada
- Observa los siguientes dibujos
- Otra vez corazon de viejita
- Afrontar la situación suavemente
- La otra parte
- La rima del sol
- Ejemplos de sacrificios personales
- Al reves ilusiones opticas caras