Java Server Pages JSP Otra forma de hacer
- Slides: 16
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 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 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. . "); %>
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 <% 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 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: 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 <%@ 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 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 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)
- Java server pages tutorial
- Jsf sample
- Java server pages
- Java server pages
- Java server pages
- Printed pages vs web pages
- Active server pages paradigma
- Java jsp
- Java jsp
- Servlet tutorial
- Java vs jsp
- Java ee jsp
- Nutrición en la biblia
- Somos instantes borges
- Dinos otra vez la historia de su amor
- Otra web
- Gente ayudando a otra gente