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

Acciones estándar de JSP - JSP (Parte 3)



Bueno, el pasado post estuvo demasiado pobre, en cuanto a teoría y a ejemplos,y también se veía demasiado desorganizado, pero eso ya no importa. Aún no vamos a seguir desarrllando ejemplos tan prácticos como el que hicimos en la parte 1 , pues es necesario conocer unas cuantas cosas más.
Esta vez hablaremos de las acciones JSP, ¿Y… que es eso? Pues, básicamente, las acciones, son etiquetas predefinidas en una JSP, las cuales proveen algunas funcionalidades como por ejemplo trabajar con beans o incluir contenido en una jsp. Las acciones estándar de JSP son de la forma <jsp:acción>, las cuales son las siguientes:
  • <jsp:forward>
  • <jsp:include>
  • <jsp:plugin>
  • <jsp:param>
  • <jsp:useBean>
  • <jsp:setProperty>
  • <jsp:getProperty>

Cabe destacar que las tres últimas etiquetas son las utilizadas para la manipulación de JavaBeans.
Para los ejemplos de este post, creamos nuestro proyecto JSP llamado “AccionesEstandar”:



1. <jsp:include>
La etiqueta <jsp:include> funciona igual que la directiva Include que mencionamos en la parte 2. Dicha etiqueta nos permite incluir contenido de otro archivo en nuestra JSP. Pero entonces cuál es la diferencia? La diferencia radica en si el archivo a incluir cambia, cuando usemos la etiqueta <jsp:include> dichos cambios se verán reflejados, en cambio no ocurrirá lo mismo con la directiva include. Vamos al ejemplo, el cual es muy parecido al que hicimos en el post anterior:

Crea el archivo, cabecera.jsp:

Y el código de cabecera.jsp:

Este escrito está contenido en el archivo <b>cabecera.jsp</b>

Como ves, solamente es una sola línea. Sin embargo, si vas a incluir más contenido en ese archivo, trata de que las etiquetas HTML, sean coherentes, por ejemplo, no debes incluir la etiqueta <body> en cabecera.jsp pues, el index.jsp, ya tiene una etiqueta body. Para que me entiendas un poco mejor, modifiquemos el “cabecera.jsp” y también crearemos el “pieDePagina.jsp”:

Nuestro archivo “cabecera.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>
Este escrito está contenido en el archivo <b>cabecera.jsp</b>

Y ahora el “pieDePagina.jsp”:

Este es el archivo <b>PieDePagina.jsp</b>
</body>
</html>

Finalmente, nuestro index.jsp (Solamente estas tres líneas):

<jsp:include page="cabecera.jsp" flush="true"/>
<p>
Aquí debe ir algún contenido del <b>index.jsp</b>
</p>
<jsp:include page="pieDePagina.jsp" flush="true"/>

Veamos entonces, en la línea <jsp:include page="cabecera.jsp" flush="true"/>
El atributo page es el archivo a incluir en nuestra JSP, mientras que el atributo flush, es para limpiar el buffer una vez que se haya incluido dicho archivo en nuestra JSP. La acción jsp:include requiere más sobrecarga que la directiva include, es por eso que el atributo flush siempre debe ser true. Por defecto, la JSP configura el atributo flush de jsp:include como false. Solo menciono esa parte, por cuestiones de rendimiento.

Ahora, ejecutamos y obtenemos lo siguiente:

Como ves, se incluyen tanto las etiquetas HTML y JSP de los dos archivos y se mezclan con nuestro archivo index.jsp.



2. <jsp:useBean>,  <jsp:getProperty> y <jsp:setProperty>
La acción useBean simplemente nos permite usar un Bean (una clase de Java) en una página JSP. Mientras que las acciones setProperty y getProperty nos permiten establecer un valor en una propiedad del bean y obtener un valor de una propiedad del bean, respectivamente.
Veamos el ejemplo:

Creamos una clase llamada “Persona” en el paquete “beans”:

Ahora veamos el código, crearemos una propiedad “nombre” con sus respectivos métodos get y set, para que el ejemplo funcione, debemos seguir ciertas reglas de los JavaBeans, y es que el método para obtener un valor de un campo de nuestra clase debe ser getNombreDeLaPropiedad, para nuestro caso sería getNombre() nos devuelve el valor que tiene la propiedad nombre de nuestro bean. Mientras que para establecer valores debe ser setNombreDeLaPropiedad( tipoDeDato valor), para nuestra propiedad nombre sería setNombre(String valor), veamos :

package beans;

public class Persona {
   
    private String nombre;

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
}

Ahora en nuestro index.jsp usaremos las etiquetas useBean, setProperty y getProperty:

<%@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">

<jsp:useBean class="beans.Persona" id="persona" scope="page"/>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <jsp:setProperty name="persona" property="nombre" value="Maria"/>
        <%="El nombre de la persona es : "%>
        <h1><jsp:getProperty name="persona" property="nombre"/></h1>
    </body>
</html>

En la línea,
<jsp:useBean class="beans.Persona" id="persona"scope=”page”/>

No era necesario incluir el atributo scope en este ejemplo, pero lo puse para aclarar algo. Scope literalmente significa “alcance”, pues bien, en JSP, existen diferentes tipos de alcance para los beans, los cuales son page, request, sesión y application.

Los beans que tienen el alcance de tipo “page”, solo puede ser accedidos desde la misma página donde se está haciendo uso de él. En este caso, el bean “persona” solo está disponible para nuestro “index.jsp”, pero no para otras JSP que definamos en nuestro proyecto.
Si un bean tiene alcance de tipo “request”, sus datos (o propiedades, como quieras llamarlos) solo pueden ser accedidos durante la petición en la que fue creado, por ejemplo, si en el index yo creo el bean persona, pero quiero que los datos de ese bean se muestren en un pagina llamada “resultados.jsp” entonces dicho bean, solo existirá en el momento en que index.jsp le envíe los datos a “resultados.jsp”, y una vez que se muestren los datos en la pagina “resultados.jsp” el bean desaparecerá de la memoria inmediatamente, así entonces, los datos no pueden ser accedidos luego de eso.
El alcance tipo “session” permite que los datos del bean sean leídos las veces que yo guste, por las paginas que traten de usarlo, mientras exista todavía una sesión, es decir, mientras el navegador no se cierre.
Por último, si un bean tiene un alcance de tipo “application”, el bean estará disponible para todas las paginas JSP de nuestra aplicación, sin embargo, se debe tener cuidado con no repetir el identificador de nuestros beans y tener en cuenta cuidadosamente qué pagina cambia los valores del bean, para no llegar a cometer errores lógicos en nuestra aplicación.

Volvamos al ejemplo.
Ahora, simplemente creamos un objeto de la clase Persona, cuyo identificador en nuestra página jsp será “persona”, aunque puedes usar el nombre que gustes como identificador. Ahora, la línea,
<jsp:setProperty name="persona" property="nombre" value="Maria"/>
Simplemente pone el valor “Maria” en la propiedad “nombre” del objeto “persona”.
Y finalmente, la línea
<jsp:getProperty name="persona" property="nombre"/>
Obtiene el valor de la propiedad “nombre” del objeto persona.
Ahora, debes obtener algo como esto:



3. <jsp:forward> y <jsp:param>
La accion forward nos adyuda a redirigir la petición hacia una nueva jsp. Mientras que la acción param, nos permite pasar parámetros entre dos jsp, Pero se requere que la acción jsp:param esté incluida dentro de una acción jsp:forward veamos el ejemplo:

Crea una jsp llamada “Resultado” :

Ahora, nuestro 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>
        <jsp:forward page="resultado.jsp">
           <jsp:param name="parametro" value="Valor_del_parametro"/>
        </jsp:forward>

    </body>
</html>

La línea,
<jsp:forward page="resultado.jsp">
Como verás al ejecutar el ejemplo, al abrirse el index.jsp, inmediatamente nos va a redirigir a la página resultados.jsp. y se le enviará un parámetro llamado “parametro” por medio de la línea que dice:
<jsp:param name="parametro" value="Valor_del_parametro"/>

Ahora, nuestro resultados.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>
        El parametro enviado por index.jsp es:
        <h1><%=request.getParameter("parametro")%></h1>
    </body>
</html>

En el código anterior, simplemente mostramos el valor del parámetro recibido.
Ejecutamos y obtenemos esto:



4. <jsp:plugin>
Generalmente, esta etiqueta se usa para mostrar un Applet en un archivo JSP. (¿Aún se usan los applets de Java, cierto.....?) Para este ejemplo generé por aparte un “.class” del siguiente Applet (solo necesitamos el .class):

import java.awt.Graphics;
import javax.swing.JApplet;

public class AppletDeEjemplo extends JApplet {

    public void paint( Graphics g ) {
        super.paint(g);
        g.drawString("Esto es un applet de ejemplo", 100, 100);
    }

}

Arrastra ese “.class” desde donde lo tengas guardado, hasta esta carpeta en Netbeans que dice “Web Pages” o ve al directorio del proyecto, y pégalo en la carpeta “web”, al pegarlo o arrástralo se verá así en Netbeans:

Normalmente el applet se ejecuta a través de una página HTML, con la etiqueta <applet>(lo recuerdas?....), así que en nuestro index.jsp, tendríamos algo así, por ejemplo:

<%@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>
        <applet code = "AppletDeEjemplo.class" width="400" height="200">
        </applet>
    </body>
</html>

Al ejecutarlo vemos el resultado:

Pero como estamos trabajando la etiqueta <jsp:plugin> escribimos esto:

<jsp:plugin type="applet" code="AppletDeEjemplo.class" width="400" height="200"/>

Por lo que nuestro index.jsp, ahora se ve así:

<%@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>
        <jsp:plugin type="applet" code="AppletDeEjemplo.class" width="400" height="200"/>
    </body>
</html>

Nuevamente ejecutamos y obtenemos el mismo resultado que con la etiqueta <applet>:



Eso es todo por ahora.
Este es el final de la Parte 3.
Cualquier comentario, sugerencia o crítica son bienvenidos.
Suerte.

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 teebia

Muy bueno

Estan muy buenos los tutoriales y explicas muy bien, segui asi...

Estaria bueno que en algun momento hagas algun ejemplo basico de spring con maven, Saludos !

Imagen de CesarAlducin

Con estos tutoriales estoy

Con estos tutoriales estoy reafirmando algunas cosas que ya sabia, pero ya verlo de manera practica es mas interesante.

Imagen de Sr. Negativo

Buenos tutos JSP

Bien muy bien. Estos tutoriales sobre JSP son muy útiles.

Imagen de skuarch

excelente

nunca habia entendido lo del scope pero ahora ya lo entiendo ... gracias

ok

Hey gente gracias a todos...

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