style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Directivas JSP - JSP (Parte 2)

Las directivas JSP nos permiten configurar alguna información que pueda ser usada en nuestra página JSP, por ejemplo cosas como importar clases, definir una página de error, incluir una página JSP en otra, en fin.
En este post hablaré de las tres directivas que existen en JSP:

  • Page
  • Include
  • TagLib

Para ello, crea el proyecto DirectivasJSP:


Directiva Page.

Se utiliza para establecer algunas propiedades a nuestra página jsp. Tiene los siguientes atributos: import, sesión, buffer, autoflush, isThreadSafe, erroPage, entre otros.

°°° Ejemplo - Atributo import de la directiva Page

Nos permite importar una clase Java en una JSP. Para el ejemplo, crea la clase ClaseDeEjemplo en el paquete ejemplo:

package ejemplo;

public class ClaseDeEjemplo {

    public static String mostrarMensaje() {
        return "Este es un ejemplo de import en JSP.";
    }

} // fin de la clase ClaseDeEjemplo

No hay nada importante que explicar en el código anterior. Ahora en nuestra index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="ejemplo.ClaseDeEjemplo"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1><%=ClaseDeEjemplo.mostrarMensaje()%></h1>
    </body>
</html>

En el código anterior importamos la clase y ejecutamos uno de los métodos de esa clase.
La clase fué importada por medio de la línea:

<%@page import="ejemplo.ClaseDeEjemplo"%>

El resultado que obtenemos es:

°°° Ejemplo - Atributos isErrorPage y errorPage de la directiva Page

Digamos que en nuestra index.jsp tenemos este codigo:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
           int w = Integer.parseInt("String");
        %>
    </body>
</html>

Si la ejecutas vas a obtener una excepción, pues es imposible convertir una cadena de caracteres en un valor entero:

Pero digamos que en vez de mostrar ese error del servidor, yo quisiera mostrar mi propia página de error, así que crea paginaDeError.jsp en tu proyecto:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%@page isErrorPage="true" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Ocurrió un error en el index.jsp</h1>
    </body>
</html>

La línea importante del anterior código es:

<%@page isErrorPage="true" %>

En ella estamos diciendo que "paginaDeError.jsp" será nuestra pagina de error, así de simple.
Pero para poder usar esa página de error, nuestro index.jsp tiene que hacer uso de ella con la linea:

<%@page errorPage="paginaDeError.jsp"  %>

Nuestro index.jsp, se ve asi:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page errorPage="paginaDeError.jsp"  %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%
           int w = Integer.parseInt("String");
        %>
    </body>
</html>

Ejecutamos y obtenemos esto:

Como ves, se ejecutó nuestra paginaDeError.jsp.


Directiva Include.

Nos permite insertar contenido de otro archivo en una jsp. Veamos el ejemplo, crea el archivo “header.jsp”:

Cuyo contenido es este (Si… solamente es esa linea):

<h1>Esta el header de la JSP.</h1>

Ahora nuestra index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <%@include file="header.jsp"  %>
        Y Este es el cuerpo de nuestra jsp.
    </body>
</html>

En el código anterior, simplemente, incluimos el archivo “header.jsp” en nuestra “index.jsp” con la linea:

<%@include file="header.jsp"  %>

Obtenemos este resultado:


Directiva TagLib.

Esta parte es un poco más complicada. Pero básicamente, la directiva TagLib nos permite utilizar librerías de etiquetas creadas por el propio programador en nuestra pagina jsp. (Sonó confuso… cierto?) Podemos usar nuestras propias etiquetas (llamadas también etiquetas personalizadas o Custom Tags) en nuestra JSP y también nos permite usar etiquetas JSTL (verás eso en otro post).

Para mostrarte como funciona esto de las etiquetas personalizadas, haremos este ejemplo. Digamos que en mi jsp, yo escribiera mi propia etiqueta asi <nuestraEtiqueta:muestaHolaMundo/>, como ves, dicha etiqueta tiene un nombre (o prefijo, o prefix en ingles) el cual es “nuestraEtiqueta” y la parte “muestraHolaMundo” es simplemente una operación que puede realzar nuestra etiqueta, es decir cuando la ejecutemos en nuestra JSP se mostrará un mensaje, tal vez el “Hola Mundo”. Como yo sé que no acabas de entender nada de lo que acabo de decir en este parrafo, veamos el ejemplo:

Da clic derecho en el proyecto > Otro (es la última opción)
En la parte izquierda eliges la carpeta Web y en la parte derecha escoges “Tag Library Descriptor”, da clic en siguiente:

Aquí debemos darle un nombre a nuestra etiqueta, presta atención a los valores que están al final de esta imagen el “URI” y el “prefix”, da clic en finalizar:

Como ves se ha creado nuestra etiqueta en la carpeta tlds:

Nuestra etiqueta debe ejecutar una operación, dicha operación es realizada por una clase Java, crea la clase HolaMundo en el paquete etiquetas:

package etiquetas;

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class HolaMundo extends TagSupport {

    public int doStartTag() throws JspException {
        try {
            // Creamos un objeto para escribir en la JSP
              JspWriter out=pageContext.getOut();
              // escribimos Hola Mundo
              out.println("<h2>Hola Mundo con Custom Tags !</h2>");
              // el tag no recibe parametros y no tiene cuerpo
              return SKIP_BODY;
        }
        catch( IOException exp ) {
            exp.printStackTrace();
            throw new JspException(exp);
        }
    } // fin del metodo doStarTag

    public int doEndTag() throws JspException {
        // retornar el flujo a la pagina JSP
        return EVAL_PAGE;
    } // fin del metodo doEndTag

}

Como ves, el anterior código, es el que nos permite escribir el mensaje “Hola Mundo en custom Tags” en nuestra JSP. El método doStarTag es lo que va a hacer nuestra etiqueta al empezar a ejecutarse y una vez finalizado este método se llama al método doEndTag(), para dejar de ejecutar la etiqueta y retornar el flujo a nuestra jsp.
Bien, pasemos nuevamente al archivo NuestraEtiqueta.tld:

<taglib>
    <tlibversion>1.0</tlibversion>
    <jspversion>1.0</jspversion>

    <!--  la parte importante de nuestra
          etiqueta es esta de abajo
    -->
    <tag>
        <name>muestraHolaMundo</name>
        <tagclass>etiquetas.HolaMundo</tagclass>
        <bodycontent>empty</bodycontent>
    </tag>

</taglib>

De lo anterior, la etiqueta <bodycontent> es simplemente porque nuestra etiqueta no tiene cuerpo, un ejemplo de etiqueta con cuerpo sería más o menos asi:

<etiqueta:operacion>
Este es el cuerpo de la etiqueta
</etiqueta:operacion>

Ahora nuestra index.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/WEB-INF/tlds/NuestraEtiqueta.tld" prefix="nuestraEtiqueta"  %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <nuestraEtiqueta:muestraHolaMundo/>
    </body>
</html>

En la linea

<%@taglib uri="/WEB-INF/tlds/NuestraEtiqueta.tld" prefix="nuestraEtiqueta"  %>

Decimos que vamos a hacer uso de la etiqueta que acabamos de crear. Y en la línea:

<nuestraEtiqueta:muestraHolaMundo/>

Simplemente hacemos uso de nuestra etiqueta. Ejecutamos y obtenemos:

Eso es todo por ahora.
En el proximo post, hablaré un poco de las Acciones Estandar de JSP, como <jsp:useBean>, <jsp:setProperty> y <jsp:setProperty>, <jsp:forward> , en fin.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de CesarAlducin

Que buen Tutorial

Que buen Tutorial !!!!

Felicidades y la primera parte ya la hize !!!! ahora vamos por la segunda !!!!

Imagen de AlexSnake

Buen tutorial

Lo que has motrado hasta el momento es lo básico y esta bien explicado. Sirve muy bien para empezar, sigue así!!

Imagen de Algus Dark

De lujo.

JSP no es mi fuerte, y no he tenido mucho tiempo de indagar en ello. Genial, ahora soy menos ignorante que hace unos minutos :3

Saludos!!!

Es un placer

@CesarAlducin, @AlexSnake y @Algus Dark, pues es un placer publicar estas entradas en JavaMexico. Aunque la verdad, lo que estoy explicando es demasiado básico. Espero publicar pronto la entrada siguiente.

Un apunte: En los JSP de

Un apunte:

En los JSP de error tenemos el objeto implícito "exception" (además de application, session, request, response, etc.) y en él se almacena toda la información de la excepción. Así que podríamos tener algo como:

...
<body>
    Ocurrió un error: <%=exception.getMessage()%>
</body>
...

Versión de JSP

Oye @kaztle_8, ¿que versión de JSP estás empleando?, tengo entendido que la versión más reciente es la 2, sin embargo vi snippets que muestran que usas la versión 1, quisiera saber (personalmente, hace tiempo que no uso JSP), ¿cuales son las diferencias entre JSP 1 y JSP 2?. Hasta el momento el tutorial es muy bueno para empezar a hacer APLICACIONES WEB, y parece que a cada paso que da el tutorial va para mejor.

Bueno, espero respuesta.

basicamente, el expression languaje

Que mas @wishmaster77.
Pues, una de las cosas nuevas que hay en JSP 2 es basicamente el "Lenguaje de Expresiones", para facilitarte algunas cosas, el cual tiene la forma siguiente: ${expresion} . Iba a hablar mas adelante de eso :D, pero te doy un ejemplo:
En post anteriores yo he escrito:

El parametro es:
<%=request.getParameter("nombreDelParametro")%>

Pero ahora, con la ayuda del expresion Language, yo pude haber escrito:

El parametro es : ${param.NombreDelParametro}

Como mencioné en la primera entrada del blog, yo soy un novato, comparado con usted. Y me da gusto se interese en estas cosas que estoy escribiendo, pero no creo que le sea de mucha ayuda. Un saludo.

Imagen de CesarAlducin

Quizá lo que estas realizando

Quizá lo que estas realizando sea lo básico pero precisamente conociendo y teniendo buenas bases
del lenguaje nos pueden servir para hacer cosas mas grandes y difíciles.

Saludos

Re: basicamente, el expression language

No tengo tanta experiencia y si me comparo con @OscarRyz o @ezamudio o @luxspes o @bferro me maravillo (hay entradas de ellos que me cuesta mucho entender). Esto es lo interesante del mundo de la computación, cuanto más sabes más te das cuenta que te queda mucho por aprender.

Respecto de la entrada, se ve interesante eso del expresssion language, es bueno tomar las cosas básicas a repaso, porque ya se ma ha olvidado.

#Colombianish - Mexican

#Colombianish - Mexican translation:
s/Que más/Que tal

:)

Re: Saludos

@OscarRyz, hehe.. Un saludo. Muy divertida la aclaración. :)


@wishmaster77, Un Saludo. Me creerás si te digo que también esto me ha servido a mi para repasar un poco? (Qué cosa más contradictoria.. hehe) Pero lo cierto es que repaso, y luego trato de escribir algo...
Por cierto, ya notaron lo pésimo que es mi ingles?, en vez de escribir "expression language" escribí "expression languaje" y después "expresion Language" (hehe..)

HTTP Status 404

gracias lo necesitaba.
tengo una duda como corregir
HTTP Status 404

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">