JSP

De inforWiki
Saltar a: navegación, buscar

JavaServer Pages (JSP) es una tecnología que ayuda a los desarrolladores de software a crear páginas web dinámicas basadas en HTML, XML, entre otros tipos de documentos. JSP es similar a PHP, pero usa el lenguaje de programación Java.

 TagLibs -> JSP -> Servidor Aplicaciones (Servlets) -> Cliente (Navegador)

El rendimiento de una página JSP es el mismo que tendría el servlet equivalente, ya que el código es compilado como cualquier otra clase Java. A su vez, la máquina virtual compilará dinámicamente a código de máquina las partes de la aplicación que lo requieran. Esto hace que JSP tenga un buen desempeño y sea más eficiente que otras tecnologías web que ejecutan el código de una manera puramente interpretada.

La principal ventaja de JSP frente a otros lenguajes es que el lenguaje Java es un lenguaje de propósito general que excede el mundo web y que es apto para crear clases que manejen lógica de negocio y acceso a datos de una manera prolija. Esto permite separar en niveles las aplicaciones web, dejando la parte encargada de generar el documento HTML en el archivo JSP.

Otra ventaja es que JSP hereda la portabilidad de Java, y es posible ejecutar las aplicaciones en múltiples plataformas sin cambios. Es común incluso que los desarrolladores trabajen en una plataforma y que la aplicación termine siendo ejecutada en otra. Las JSPs son en realidad una forma alternativa de crear servlets ya que el código JSP se traduce a código de servlet Java la primera vez que se le invoca y en adelante es el código del nuevo servlet el que se ejecuta produciendo como salida el código HTML que compone la página web de respuesta. Jsptrans.gif


JSP puede ser visto como una abstracción de alto nivel de los servlets Java. Las JavaServer Pages son traducidas a servlets en tiempo real; cada servlet es guardado en caché y reusado hasta que la JSP original se modifica.

Ejemplo de código de una página JSP:

<%@ page errorPage="myerror.jsp" %> <%@ page import="com.foo.bar" %> <html> <head> <%! int serverInstanceVariable = 1;%>

<%! int localStackBasedVariable = 1;%>

Ejemplo de una compilación o "salida" JSP:

package jsp_servlet; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; import com.foo.bar; //importado como resultado de <%@ page import="com.foo.bar" %> import ... class _myservlet implements javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage {

   //insertado como
   //resultado de <%! int serverInstanceVariable = 1;%>
   int serverInstanceVariable = 1; 
   ...
   public void _jspService( javax.servlet.http.HttpServletRequest request,
                            javax.servlet.http.HttpServletResponse response )
     throws javax.servlet.ServletException,
            java.io.IOException
   {
       javax.servlet.ServletConfig config = ...;//obtener la configuración del servlet
       Object page = this;
       PageContext pageContext = ...;//obtener el contexto de la pagina para esta petición 
       javax.servlet.jsp.JspWriter out = pageContext.getOut();
       HttpSession session = request.getSession( true );
       ...

Para ejecutar las páginas JSP, se necesita un servidor Web con un contenedor Web que cumpla con las especificaciones de JSP y de Servlet. Tomcat 5 es una completa implementación de referencia para las especificaciones Java Servlet 2.2 y JSP 1.1. Jsp-sites02.jpg



VARIABLES IMPLÍCITAS

Las páginas JSP incluyen ciertas variables privilegiadas sin necesidad de declararlas ni configurarlas:

Variable	Clase
pageContext	javax.servlet.jsp.PageContext
request	javax.servlet.http.HttpServletRequest
response	javax.servlet.http.HttpServletResponse
session	javax.servlet.http.HttpSession
config	javax.servlet.ServletConfig
application	javax.servlet.ServletContext
out	javax.servlet.jsp.JspWriter
page	java.lang.Object
exception	java.lang.Exception

DIRECTIVAS

Son etiquetas a partir de las cuales se genera información que puede ser utilizada por el motor de JSP. No producen una salida visible al usuario sino que configura cómo se ejecutará la página JSP.

Su sintaxis es:

<%@ directiva atributo="valor" %>

Las directivas disponibles son:

include: Incluye el contenido de un fichero en la página mediante el atributo file.
<%@ include file="cabecera.html" %>
taglib: Importa bibliotecas de etiquetas (Tag Libraries)
<%@ taglib uri="/tags/struts-html" prefix="html" %>
page: Especifica atributos relacionados con la página a procesar. Los atributos son:
Atributo	Sintaxis	Utilización
import	<%@ page import="class; class" %>	Importa clases y paquetes Java para ser utilizadas dentro del fichero JSP.
session	<%@ page session="false" %>	Especifica si utiliza los datos contenidos en sesión; por defecto "true".
contentType	<%@ page contentType="class; class" %>	Especifica el tipo MIME del objeto "response"; por defecto "text/html; charset=ISO-8859-1".
buffer	<%@ page buffer="12KB" %>	Buffer utilizado por el objeto writer "out"; puede tomar el valor de "none"; por defecto "8KB".
errorPage	<%@ page errorPage="/path_to_error_page" %>	Especifica la ruta de la página de error que será invocada en caso de producirse una       excepción durante la ejecución de este fichero JSP.
isErrorPage	<%@ page isErrorPage="true" %>	Determina si este fichero JSP es una página que maneja excepciones. Únicamente a este tipo de páginas  pueden acceder a la variable implícita "exception", que contiene la excepción que provocó la llamada a la página de error.

DECLARACIONES

Nos permiten declarar variables, funciones y datos estáticos.

<%! int maxAlumnosClase = 30; %>

SCRIPTLETS

Los scriptlets son partes de código Java incrustadas entre los elementos estáticos de la página.

<% ... código Java ... %>

EXPRESIONES

Las expresiones se evalúan dentro de la servlet. No deben acabar en ";".

<%= maxAlumnosClase + 1%>

El siguiente ejemplo pondría como título de la página el atributo "titulo" contenido en el objeto request:

<%
  String titulo = "";
  if (request.getAttribute("titulo") != null) {
    titulo = (String) request.getAttribute ("titulo");
  }
%>
...
<title><%=titulo%></title>
....


ETIQUETAS

Etiquetas JSP para simplificar el código y dar mayor funcionalidad.

Desarrollar sitios web utilizando etiquetas presenta ciertas ventajas como:

facilitar el aprendizaje. facilitar el mantenimiento. fomentar la modularidad y la reutilización. simplificar el código y reducir el número de líneas necesarias. Su sintaxis sería:

<%@ taglib uri="/taglib/lycka" prefix="lycka" %>
...
<lycka:hola/>
...

A la hora de generar el código Java de la Servlet, esta etiqueta hola será interpretada por el Servidor de Aplicaciones como perteneciente a la biblioteca de etiquetas (Tag Library) lycka. Esta biblioteca estará identificada en el fichero descriptor de nuestra aplicación (web.xml) con el nombre de recurso (URI) /taglib/lycka.

<taglib-uri>/taglib/lycka</taglib-uri>
<taglib-location>/WEB-INF/tags/lycka.tld</taglib-location>

Una implementación de este fichero descriptor, /WEB-INF/tags/lycka.tld podría ser:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 
   "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>
  <tlibversion>1.0</tlibversion>
  <jspversion>1.1</jspversion>
  <shortname>simp</shortname>
  <uri>http://www.hachisvertas.net/jcs/taglibs/lycka</uri>
  <info>A simple sample tag library</info>

  <tag>
    <name>hola</name>
    <tagclass>org.lcyka.taglibs.miEtiqueta</tagclass>
    <bodycontent>empty</bodycontent>
    <info>Alaba la belleza de mi gata.</info>
  </tag>
</taglib>

Y por fin, el servidor de aplicaciones sustituirá la etiqueta por su código Java asociado, org.lcyka.taglibs.miEtiqueta:

package org.lcyka.taglibs;
import ...;
public class miEtiqueta extends TagSupport {
  public int doStartTag {
    try {
      pageContext.getOut().print("Mi gata es preciosa");
    } catch (IOException ioe) {
    }
    return SKIP_BODY;
  }

Y finalmente el navegador mostraría:

Mi gata es preciosa