Menú Curso Java Web (JSP's/Servlets) : JSP's ("Java Server Pages")

Espacio Espacio Servlets (Siguiente) Espacio

Composición

Un JSP ("Java Server Page") es uno de los componentes más básicos empleados para aplicaciones de Servidor en Java. Su composición consta de dos grandes partes: HTML y lenguaje Java.

Mediante HTML se especifica el contenido estático de despliegue y es mediante fragmentos del lenguaje Java que se genera contenido dinámico en efecto cumpliendo la definición de aplicación de Servidor; a continuación se ilustra una porción de un JSP:

<HTML>
<BODY>

<%
   out.println("Pagina Básica");

%>

</BODY>
</HTML>

Los elementos que se encuentran entre <% y %> son elementos Java , mientras el resto es considerado HTML puro. El comando/método Java utilizado en la porción anterior (out.println) imprime el texto correspondiente; al ejecutarse este JSP da como resultado final :

<HTML>
<BODY>

Pagina Básica

</BODY>
</HTML>

La ejecución y/o transformación de elementos Java es trabajo de un "Servlet Engine" y para este curso es utilizado el "Servlet Engine" Tomcat; el JSP anterior es extremadamente sencillo ya que el código Java solo imprime un mensaje estático , las ventajas de utilizar Java se hacen más evidentes al emplear Java accesando Bases de Datos y/o ejecutando cierta lógica de negocios, lo cual será descrito a fondo en este curso.

En la instalación de su "Servlet Engine" Tomcat, coloquese dentro del directorio webapps y genere un directorio llamado lab, dentro de este directorio puede colocar sus JSP's y Servlets que serán diseñados a lo largo del curso.

Para generar sus JSP's y Servlets puede hacer uso de un editor de Texto disponible en su ambiente.

Para observarlos basta colocarse bajo el URL : http://localhost:8080/lab/

Secuencia de Ejecución ("Lifecycle")

La secuencia de ejecución para un JSP es la siguiente (partiendo de la requisición de página):

  1. Compilar JSP a Servlet.
  2. Cargar/Compilar el JSP(Servlet).
  3. Inicializar el JSP(Servlet).
  4. Ejecutar el JSP(Servlet).
  5. Limpiar el JSP(Servlet).

El primer paso puede ser sorprendente, pero efectivamente todo JSP es convertido a un Servlet , la razón de esto es que el surgimiento de JSP's se debió a la necesidad de facilitar un formato programático sencillo para personal no familiarizado con Java, esto es, el uso de JSP's permite eliminar visualmente funciones de arranque, ejecución y terminación , la inclusión de éstas se lleva acabo en la conversión de JSP a Servlet; el JSP declarado anteriormente es convertido en el siguiente Servlet:

package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import org.apache.jasper.runtime.*;


public class index_jsp extends HttpJspBase {

  private static java.util.Vector _jspx_includes;

  public java.util.List getIncludes() {
    return _jspx_includes;
  }

   public final void _jspx_init() 
      throws org.apache.jasper.runtime.JspException  {    }

   public void _jspService(HttpServletRequest request, 
                              HttpServletResponse  response)
        throws java.io.IOException, ServletException { 

        JspFactory _jspxFactory = null;
        javax.servlet.jsp.PageContext pageContext = null;      
        HttpSession session = null;
        ServletContext application = null;
        ServletConfig config = null;
        JspWriter out = null;
        Object page = this;
        JspWriter _jspx_out = null;      

        try {
        _jspxFactory = JspFactory.getDefaultFactory();
        response.setContentType("text/html;charset=ISO-8859-1");
        pageContext = _jspxFactory.getPageContext(this, request, 
                                             response, null, true, 8192, true);
        application = pageContext.getServletContext();
        config = pageContext.getServletConfig();
        session = pageContext.getSession();
        out = pageContext.getOut();
        _jspx_out = out;


             out.write("<HTML>\n");
             out.write("<BODY>\n ");
                out.println("Pagina Basica");
             out.write("\n");
             out.write("</BODY>\n");
             out.write("</HTML>\n");

             } catch (Throwable t) {
              out = _jspx_out;
           if (out != null && out.getBufferSize() != 0)
             out.clearBuffer();
           if (pageContext != null) pageContext.handlePageException(t);
           } finally {
       if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);
        }
    }
   public final void _jspx_destroy() 
      throws org.apache.jasper.runtime.JspException  {   }
}

Desde luego generar el Servlet anterior requiere conocimientos programáticos, a través de un JSP personal poco familiarizado con el lenguaje Java ( Diseñadores Gráficos, Programadores experimentados en otro lenguaje) pueden generar el mismo resultado escribiendo dos o tres lineas.Una vez convertido el JSP a Servlet, este Servlet(JSP) debe ser compilado para continuar con el proceso, esta compilación también es tarea del "Servlet Engine".

Compilado el Servlet (JSP) se inicializa, ejecuta y limpia, estos tres pasos son llevados acabo por las funciones: _jspx_init(), _jspService(), _jspx_Destroy() respectivamente; si analiza el código del Servlet (JSP) presentado anteriormente se pueden observar estas funciones. Estas mismas funciones son parte central de cualquier Servlet, sin embargo, estas se explorarán a fondo en la sección de Servlets.

El "Servlet Engine" Tomcat coloca los JSP's convertidos a Servlets así como las clases compiladas bajo un directorio llamado work, en su ambiente esto sería bajo el directorio $CATALINA_HOME/work/Standalone/localhost/lab, donde $CATALINA_HOME es el directorio raíz donde instaló Tomcat.

NOTA: La ubicación de estos archivos puede variar de acuerdo al "Servlet Engine"/"Application Server"

Variaciones de <% y %> , "Directives", Acciones y Objetos.

En un JSP además de los Tags <% y %> existen otras variaciones que son las siguientes.

  • <%= Expresión Java %>
  • <%! Declaración Java %>
  • <%-- Comentario Java --%>

<HTML>
<BODY>

<%!

   public String lafuncion(String elenvio) 
   {
         return "El parámetro enviado fue: " + elenvio;
   } 

   int valor = 8;
%>


<%-- Funciones en JSP's --%>

Dentro de HTML  <%= lafuncion("UNICO") %> 

También se encontró el numero  <%= valor %> 
</BODY>
</HTML>

El JSP de la parte superior hace uso de <%= %> que es utilizado para evaluar métodos o variables; <%! %> empleado para declarar funciones y/o clases, mientras <%-- --%> indica un comentario dentro del código Java, al ejecutarse este JSP da como resultado final :

<HTML>
<BODY>

Dentro de HTML El parámetro enviado fue: UNICO 

También se encontró el numero 8

</BODY>
</HTML>

Además de la Sintaxis descrita anteriormente que generalmente ocupa la mayor parte de un JSP, también existen otros elementos empleados en JSP's que son descritos a continuación.

"Directives"

Los "Directives" en un JSP son aquellos colocados al inicio de la página y representan actividades de inicialización, entre ellos se encuentran:

Sintaxis Funcionamiento Opciones más comunes
<%@ page opciones %> Utilizado para importar clases Java que serán utilizadas por el JSP, parámetros de error, coordinación de "Threads" y otros elementos.
  • autoflush : Indica si debe ser vaciado el Buffer del JSP (true|false) [Casi nunca especificado]
  • buffer : Indica el tamaño o utilización de Buffer en el JSP (none|Tamaño kb) [Casi nunca especificado]
  • contentType : Tipo de MIME para el contenido del JSP (Tipo de Contenido,ejemplo: text/html; charset=ISO-8859-1 ) [Casi nunca especificado]
  • errorPage : Página a utilizarse en caso de Error (URL Página)
  • extends : Empleado para heredar ("inherit") el comportamiento de una Clase en el JSP (Nombre Clases )
  • import : Clases a utilizarse dentro del JSP (Clases a Importar,ejemplo: com.osmosislatina.db.*, java.util.*)
  • info : Información descriptiva acerca del JSP (Info) [Casi nunca especificado]
  • isErrorPage : Indica si el JSP es empleado para manejar errores. (true|false)
  • isThreadSafe : Indica si el JSP será capaz de manejar "Threads" de manera segura. (true|false) [Casi nunca especificado]
  • language : El lenguaje a utilizarse en el JSP (java)
  • session : Indica si el JSP utilizará sesiones. (true|false) [Casi nunca especificado]
<%@ include opciones %> Empleado para colocar archivos estáticos dentro de JSP's, estos generalmente son encabezados o pies de pagina escritos en HTML
  • file : Archivo a incluirse en el JSP (Nombre del Archivo)
<%@ taglib opciones %> Utilizado para incluir librerías de Tags hechos a medida en JSP's
  • uri : Empleado para indicar la ubicación de las librerías hechas a medida (URI de Librerías )
  • prefix : Prefijo para Tags hechos a medida (Prefijo)
Acciones

Otros elementos empleados en JSP's son denominados Acciones, aunque por ahora entrar en su sintaxis especifica sería prematuro, vale mencionar que son ampliamente utilizados en conjunción de Java Beans, los cuales serán descritos en una futura sección del curso.

Un "Java Bean" no es lo mismo que un "Enterprise Java Bean"

A lo largo de este curso será descrito el uso de "Java Beans", este tipo de diseño permite encapsular diversos valores en una Clase Java y que su contenido sea manipulable fácilmente en JSP's/Servlets.

Lo anterior es muy diferente al uso de "Enterprise Java Beans" los cuales son complementarios a JSP'/Servlets; el uso de "Enterprise Java Beans" se da en ambientes que requieren controles transaccionales y de seguridad más avanzados que lo que ofrecen JSP's/Servlets.

Sintaxis Funcionamiento Atributos más comunes
<jsp:useBean atributos > Utilizado para importar Java Beans a un JSP.
  • class : Define la Clase del Java Bean (Nombre de la Clase )
  • type : Tipo de Java Bean (type) [Casi nunca utilizado]
  • id : Indica el nombre con que será referenciado el Java Bean dentro del JSP (nombre)
  • scope : Ubicación del Java Bean (page|request|session|application) [Generalmente session]
<jsp:setProperty atributos> Empleado para colocar valores a un Java Bean en un JSP.
  • property : Propiedad del Java Bean (propiedad)
  • name : Nombre del Java Bean (El id de <jsp:useBean>)
  • value : Valor para ser asignado a la propiedad del Java Bean (valor)
<jsp:getProperty atributos> Empleado para extraer valores de un Java Bean a un JSP.
  • property : Propiedad del Java Bean (propiedad)
  • name : Nombre del Java Bean (El id de <jsp:useBean>)
<jsp:include atributos> Empleado para colocar archivos estáticos dentro de JSP's, estos generalmente son encabezados o pies de pagina escritos en HTML.
  • page : Archivo a incluirse en el JSP (Nombre del Archivo)
  • flush : Indica si debe ser vaciado el Buffer del JSP (true|false) [Casi nunca especificado]
<jsp:forward atributos> Empleado para redireccionar el control de un JSP a determinada página.
  • page : Página a donde realizar el forward (Redirección)(URL de página )
  • flush : Indica si debe ser vaciado el Buffer del JSP (true|false) [Casi nunca especificado]
Objetos

Debido a que un JSP ofrece una abstracción por arriba de un Servlet, y éste último es un Objeto (Clase) Java, también se tienen acceso a diversos Objetos dentro de un JSP sin la necesidad de realizar declaraciones complejas, al igual que el uso de Acciones, su descripción puede ser prematura, sin embargo, el uso de estos objetos será descrito a detalle conforme se avance en el curso.

Objeto Uso Clase Base
request Representa el Objeto de Solicitud dentro de un JSP/Servlet. HttpServletRequest
response Representa el Objeto de Respuesta dentro de un JSP/Servlet. HttpServletResponse
pageContext Representa el Contexto del JSP/Servlet. PageContext
session Representa la sesión del Usuario en un JSP/Servlet. HttpSession
application Representa el Objeto de aplicación (Contexto) para un JSP/Servlet. ServletContext
out Representa el Objeto de Escritura (Para enviar a pantalla) en un JSP/Servlet. JspWriter
config Representa el Objeto de Configuración para un JSP/Servlet. ServletConfig
page Representa el Objeto del JSP/Servlet en sí. Object
exception Representa el Objeto de errores para un JSP/Servlet. Throwable

Terminos Legales de Contenido ©2000-2011 Osmosis Latina

Diseñado bajo estándares : XHTML   CSS  

webmaster@osmosislatina.com