JTagua

Inicio » JSP/SERVLETS » Scriptlet » Tutorial de JSP (4) – Scriptlet

Tutorial de JSP (4) – Scriptlet

Licencia

Creative Commons License

Visitas:

  • 813.330 hits

Un scriplet en JSP es un fragmento de código Java escrito entre los símbolos <% y %>, es decir

<% código Java %>

en general, puede escribir cualquier código Java y esto, el hecho de disponer de todo el lenguaje Java detrás, es precisamente lo que hace que JSP sea el lenguaje de script de servidor mas potente. Más que ASP o PHP.

Ejemplo1:

Queremos producir un programa JSP que devuelva al cliente la fecha y hora del servidor, produciendo la salida,

Image1

Para hacer esto iniciamos una sesión de NetBeans y hacemos desde el menú principal “Archivo”, “Proyecto Nuevo”, “Java Web”, “Web Application” y damos nombre al archivo jsp en la forma de scriplet1, finalmente sustituimos el archivo index.jsp por el siguiente código,

<%-- 
    Document   : index
    Created on : 23-sep-2009, 19:45:27
    Author     : Juan Tagua
--%>

<%@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>Scriplet en páginas JSP</title>
    </head>
    <body bgcolor="ffffcc">
        <center>
        <%
        java.util.Date FechaHora = new java.util.Date();
        out.print("La fecha y Hora son: "+ FechaHora);
        %>
        </center>
    </body>
</html>

Ejemplo2:

Queremos producir un programa JSP que devuelva al cliente solicitante la siguiente salida:

Esta salida se corresponde con un código HTML, que hemos de generar con JSP, a partir de un array o vector de cadena que contiene el nombre de cinco personas, Juan, Pedro, Ana, Inma y Carmen. Tal como puede verse queremos que el tamaño del texto se incremente regularmente.

Para realizar el problema iniciamos una nueva sesión de Netbeans, creamos un nuevo proyecto con las opciones “Java Web”, “Web Application”, llamamos al nuevo proyecto scriplet1 y sustituimos la plantilla del archivo index.jsp por el siguiente código:

<%-- 
    Document   : index
    Created on : 11-dic-2007, 20:16:45
    Author     : jtagua
--%>

<%@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>Ejemplo Scriptlet2</title>
    </head>
    <body>
        <%
          String[] nombres={"Juan","Pedro","Ana","Inma","Carmen"};
          for ( int i = 0; i < nombres.length; i ++ )
          {
        %>
        <font color="green" size="<%=i+2%>">
        a <i><%= nombres[i]%></i></font><br>
        <% } %>
    </body>
</html>

En este código vemos como en la línea 19 se crea y asigna valores al vector nombres, en la línea 20 se establece un bucle for que termina en la línea 25. Véase que como quiera que sea hemos de escribir/general el código HTML resultante y hemos de cambiar del tamaño del font, tenemos que salir del código JSP, para entrar en código HTML. Véa como se han utilizado expresiones para establecer el tamaño de los distintos nombres, así como para escribir los propios nombres. Incluso en la línea 23 vemos cómo una etiqueta propia de HTML puede ser compuesta con ayuda de código JSP.

La solución aquí presentada a este problema es intencionada, es decir, se ha provocado intencionadamente la utilización tanto de código HTML como de código JSP mezclado, y en algún momento pudiera parecer farragosa la utilización combinada de los tipos de códigos. Aunque esto es totalmente correcto, podría hacerse mucho mas inteligible y claro el código haciendo uso de un objeto implícito llamado out que a través del método println permite escribir código HTML desde dentro de JSP. Este objeto implícito y otros se verán más adelante en este curso.

Ejemplo3:

Queremos producir un programa JSP que devuelva al cliente solicitante la siguiente salida:

Es obvio que el saludo “buenos días” tendrá que convertirse en “buenas tardes” o “buenas noches” dependiendo de la hora del día. Para resolver esta cuestión he considerado tres intervalos:  Buenas noches si la hora es >20 y menor que 6, Buenos días si la hora es >=6 y <= 12, Buenas tardes y finalmente Buenos días el resto de las horas.

Para realizar el problema iniciamos una nueva sesión de Netbeans, creamos un nuevo proyecto con las opciones “Java Web”, “Web Application”, llamamos al nuevo proyecto saludo y sustituimos la plantilla del archivo index.jsp por el siguiente código:

<%-- 
    Document   : index
    Created on : 24-dic-2012, 10:55:47
    Author     : Jtaguaa
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Scriptlets en páginas JSP</title>
    </head>
    <body>
        <%
            java.util.Calendar ahora = java.util.Calendar.getInstance();
            int hora = ahora.get(java.util.Calendar.HOUR_OF_DAY);
        %>
        <H1>
            <center>    
                <b>Hola mundo,
                    <i>
                        <% if ((hora > 20) || (hora < 6)) {%>
                        buenas noches.
                        <% } else if ((hora >= 6) && (hora <= 12)) {%>
                        buenos días.
                        <% } else {%>
                        buenas tardes.
                        <% };%>
                    </i>
                </b>
                <HR> 
            </center>    
        </H1>
    </body>
</html>

Le recomiendo que revise la utilización de la clase java.util.Calendar , esta clase representa la fecha y el tiempo. Con ayuda de esta clase puede obtenerse el año, el mes, el día, la hora el minuto, el segundo y los milisegundos. Por defecto,  Calendar contiene cuando se crea la fecha y tiempo actual. La forma de obtener cada uno de estos valores será

t.get(Calendar.YEAR) int value of the year
t.get(Calendar.MONTH) int value of the month (0-11)
t.get(Calendar.DAY_OF_MONTH) int value of the day of the month (1-31)
t.get(Calendar.DAY_OF_WEEK) int value of the day of the week (0-6)
t.get(Calendar.HOUR) int value of the hour in 12 hour notation (0-12)
t.get(Calendar.AM_PM) returns either Calendar.AM or Calendar.PM
t.get(Calendar.HOUR_OF_DAY) int value of the hour of the day in 24-hour notation (0-24)
t.get(Calendar.MINUTE) int value of the minute in the hour (0-59)
t.get(Calendar.SECOND) int value of the second within the minute (0-59).
t.get(Calendar.MILLISECOND) int value of the milliseconds within a second (0-999)

Donde t es el objeto Calendar.

Consideraciones:

Debería comprobar que hemos arrastrado en la sintaxis de las líneas 18 y 19 el paquete “java.util” donde se define Calendar, esto ha hecho algo mas engorroso la escritura del programa. Podría probar incorporar una directiva page con el atributo import para hacer mas legible el programa.

Finalmente, puede observar que la mezcla de instrucciones JSP dentro de las marcas HTML (los scriplets), a veces, dificultan un poco la lectura del programa, esto se puede arreglar en parte usando el objeto implícito out, pues su método println permite dentro de un bloque JSP incluir HTML. (Este objeto implicito, junto a otros, se verá mas adelante en el tutorial.)

Y así por ejemplo,  los texto buenos días, buenas tardes y buenos noches podrían escribirse en lugar de HTML podrían escribirse como JSP en la forma out.println(“Buenos días”); out.println(“Buenas tardes”); out.println(“Buenas noches”); .Sencillamente el objeto out con el método println indica al Motor de JSP que escriba directamente lo que aparece entrecomillado en la salida HTML que se devolverá al cliente. Esto es válido para cualquier marca HTML, es decir, si escribimos out.println(“”); estaremos indicando dentro de un scriplet al Motor que envíe al archivo HTML que se está construyendo como respuesta el texto plano .

Esta utilización del objeto recuerda mucho a la instrucción del lenguaje PHP , echo “Yo uso PHP5!”; sin embargo, en este caso es una instrucción que hace exactamente esto y no mas, mientras que el objeto out de Java, es sin duda, mucho mas potente.

EJEMPLO4:

Deseamos producir una página jsp que indique si estamos en fin de semana o en día laborable, amén del día de la semana tal como se muestra mas abajo.

Image2Inicie una sesión de Netbeans y sustituya el código del archivo index.jsp por el que sigue,

<%-- 
    Document   : index
    Created on : 24-dic-2012, 11:28:34
    Author     : Jtaguaa
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Scriplets en páginas JSP</title>
    </head>
    <body>
        <center>
        <%
        java.util.Calendar ahora = java.util.Calendar.getInstance();
        int numdia = ahora.get(java.util.Calendar.DAY_OF_WEEK);
        
        if (numdia == 1 | numdia == 7) { %> <p> FIN DE SEMANA!!</p> <% } else { %> <p> Día laborable...</p> <% } %>
        <HR>
        <%
        switch(numdia) {
         case 0: %>Sábado.<%; break;   
         case 1: %>Domingo.<%; break;
         case 2: %>Lunes.<%; break;
         case 3: %>Martes.<%; break;
         case 4: %>Miércoles.<%; break;
         case 5: %>Jueves.<%; break;
         case 6: %>Viernes.<%; break;
         default: %>ERROR DÍA!!.<%
        };%>                
        </center>
    </body>
</html>

Cuestiones a recordar:

Concepto, sintaxis y uso de scriplet.


2 comentarios

  1. Elkin Bernal Martinez dice:

    Muchas gracias por dar tus conocimientos, en verdad estoy agradecido! Saludos desde C O L O M B I A.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: