Java Server Pages JSP Otra forma de hacer

  • Slides: 16
Download presentation
Java Server Pages JSP Otra forma de hacer servlets

Java Server Pages JSP Otra forma de hacer servlets

Las JSP • Son páginas HTML a las que se le inserta código que

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

Contenido de una JSP • Una JSP, aparte de código HTML puede contener 3 tipos de constructos : – 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 – 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

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.

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

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.

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

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.

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. . "); %>

Usando Scriptlets para hacer partes del archivo JSP condicional Para entender esto hay que

Usando Scriptlets para hacer partes del archivo JSP condicional 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 Por lo tanto, lo siguiente <%

Scriptlets para hacer partes del archivo JSP condicional Por lo tanto, lo siguiente <% if (Math. random() < 0. 5) { %> Have a <B>nice</B> day! <% } else { %> Have a <B>lousy</B> day! <% } %> se traduce en if (Math. random() < 0. 5) { out. println(“Have a <B>nice</B> day!”); } else { out. println(“Have a <B>lousy</B> day! “); }

Declaraciones • No generan output, se usan para declarar variables que más tarde será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 %> 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 %>

Directivas • Afectan la estructura general del servlet generado • Existen 3 tipos de

Directivas • Afectan la estructura general del servlet generado • Existen 3 tipos de directivas: page, include y taglib <%@ directiva atributo="valor" %> <%@ directiva atributo 1="valor 1" atributo 2="valor 2". . . atributo. N="valor. N" %>

Controlando el tipo de salida • Se hace a través de la directiva <%@

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>

error. Page & is. Error. Page • Es posible invocar una determinada página cuando

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)

Incluyendo otros archivos • Es posible hacerlo al momento en que se compila la

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)