JTagua

Inicio » JSP/SERVLETS

Category Archives: JSP/SERVLETS

Anuncios

Tutorial de Java (1): Introducción.

Java es un lenguaje de programación originalmente desarrollado por James Gosling de Sun Microsystems (la cual fue adquirida por la compañía Oracle).

A Java se le considera un lenguaje orientado a objetos. De hecho siempre que se crea un programa en Java, por simple que sea, se necesita declarar una clase. El concepto de clase pertenece a la programación orientada a objetos.
Es decir; en Java no se pueden crear aplicaciones que no sean orientadas a objetos. La Programación Orientada a Objetos (POO) es una técnica de programar aplicaciones ideada en los años setenta y que ha triunfado desde los ochenta, de modo que actualmente es el método habitual de creación de aplicaciones.

La programación estructurada impone una forma de escribir código que potencia la legibilidad del mismo. Cuando un problema era muy grande, aún que el código es legible, ocupa tantas líneas que al final le hacen inmanejable.
La programación modular supuso un importante cambio, ya que el problema se descompone en módulos (en muchos lenguajes llamados funciones) de forma que cada uno se ocupa de una parte del problema. Cuanto más independiente sea cada módulo, mejor permitirá el mantenimiento de la aplicación y el trabajo en equipo. Esta técnica se queda corta. Al final realmente los módulos necesitan datos globales conocidos por todos, lo que resta independencia a los mismos. Además los datos y las funciones se manejan de forma distinta e independiente, lo que provoca problemas.

Con la POO se intenta solucionar esta limitación ya que el problema se dividen en objeto, de forma que cada objeto funciona de forma totalmente independiente. Un objeto es un elemento del programa que integra sus propios datos y su propio funcionamiento. Es decir un objeto está formado por datos (propiedades) y por las funciones que es capaz de realizar el objeto (métodos).

Cuando se escribe un programa en un lenguaje orientado a objetos, definimos una plantilla o clase que describe las características y el comportamiento de un conjunto de objetos similares. La clase automóvil describe las características comunes de todos los automóviles: sus atributos y su comportamiento.

Pala la clase automóvil podemos intuir atributos o propiedades tales como  la marca o fabricante, el color, las dimensiones, si tienen dos, tres, cuatro o más puertas, la potencia, si utiliza como combustible la gasolina o gasoil, etc. El comportamiento se refiere a la posibilidad de desplazarse por una carretera, frenar, acelerar, cambiar de marcha, girar, etc.

Luego, tenemos automóviles concretos, por ejemplo el automóvil propio de un determinado fabricante, de un modelo determinado, de un color determinado, color, potencia, motor, etc, etc, el automóvil del vecino de otra marca, de otro color, etc, , el automóvil de un amigo, etc.

Una clase es por tanto una pantilla implementada en software que describe un conjunto de objetos con atributos y comportamiento similares.

Una instancia u objeto de una clase es una representación concreta y específica de una clase y que reside en la memoria del ordenador.

Atributos

Los atributos son las caracterísiticas individuales que diferencian un objeto de otro y determinan su apariencia, estado u otras cualidades. Los atributos se guardan en variables denominadas de instancia, y cada objeto particular puede tener valores distintos para estas variables.

Las variables de instancia también denominados miembros dato, son declaradas en la clase pero sus valores son fijados y cambiados en el objeto.

Además de las variables de instancia hay variables de clase, las cuales se aplican a la clase y a todas sus instancias. Por ejemplo, el número de ruedas de un automóvil es el mismo cuatro, para todos los automóviles.

Comportamiento

El comportamiento de los objetos de una clase se implementa mediante funciones miembro o métodos. Un método es un conjunto de instrucciones que realizan una determinada tarea y son similares a las funciones de los lenguajes estructurados.

Del mismo modo que hay variables de instancia y de clase, también hay métodos de instancia y de clase. En el primer caso, un objeto llama a un método para realizar una determinada tarea, en el segundo, el método se llama desde la propia clase.

Para crear una clase se utiliza la palabra reservada class y a continuación el nombre de la clase. La definición de la clase se pone entre las llaves de apertura y cierre. El nombre de la clase empieza por letra mayúscula.

[acceso]class automovil{
	//miembros dato o variables de la clase
	//funciones miembro o métodos de la clase.
}

Vamos a crear un proyecto al que llamaremos Proautomovil. Para ello, iniciamos una sesión de Netbeans y hacemos desde el menú principal “Archivo”, “Proyecto nuevo”, “Java” y “Java Application”. Después de esto,
aparecerá el siguiente código,

package proautomovil;

/**
*
* @author Jtaguaa
*/
public class Proautomovil {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
}
}

del que nos ocuparemos más adelante.
Seguidamente, señalamos con el botón derecho del ratón en el proyecto, obtenemos el menú contextual y seleccionamos “Nuevo” y “Java Class”
Image3

Finalmente aparece la plantilla básica de una clase,


package proautomovil;

/**
*
* @author Jtaguaa
*/
public class automovil0 {

}

Modificamos ahora con el siguiente código,


package proautomovil;

/**
*
* @author Jtaguaa
*/
public class automovil {

//VARIABLES DE LA CLASE.
String matricula;    //Matrícula del automóvil
int tipoMotor;       //tipo de motor. 0 = desconocido, 1 = gasolina, 2 = diesel
String fabricante;  //Fabricante del automóvil

//CONSTRUCTOR DE LA CLASE
//Cuando se cree un objeto ejecutará el siguiente código
public automovil () {
matricula = "";
tipoMotor = 0;
fabricante = "";
} //Cierre del constructor

//METODOS DE LA CLASE.

//Método para establecer la matricula del automóvil
public void setMatricula (String valorMatricula) {
matricula = valorMatricula; //Establece la matrícula
} //Cierre del método

//Método para establecer el tipo de motor del automóvil
public void setTipoMotor (int valorTipoMotor) {
tipoMotor = valorTipoMotor; //Establece el tipoMotor
} //Cierre del método

//Método para establecer el fabricante del automóvil
public void setFabricante (String valorFabricante) {
fabricante = valorFabricante; //Establece el fabricante
} //Cierre del método

//Método para obtener la matrícula del objeto automóvil
public String getMatricula () { return matricula; } //Cierre del método

//Método para obtener el tipo de motor del objeto automóvil
public int getTipoMotor () { return tipoMotor; } //Cierre del método…

//Método para obtener el fabricante del objeto automóvil
public String getFabricante () { return fabricante; } //Cierre del método…
}

En el código anterior observamos:

  • En la línea 1, la inclusión de un paquete que incluirá todos los fuentes java. Un Paquete en Java es un contenedor de clases que permite agrupar las distintas partes de un programa cuya funcionalidad tienen elementos comunes.
  • En la línea 7 se define la clase automovil, con el acceso “public”, de esta manera la propia clase será accesible desde cualquier lugar de la aplicación.
  • En las líneas 10, 11 y 12, se definen tres variables de clase, que establecen las propiedades de los objetos que derivan de la clase.
  • En las líneas 16, 17, 18, 19, 20 se define el constructor de la clase, es decir, el grupo de instrucciones que se ejecutarán cada vez que se instancia (crea un objeto) una clase.
  • En las líneas 25,30 y 35 aparecen los métodos “set” utilizados para fijar(escribir) los valores de las propiedades del objeto instanciado.
  • En las líneas 40,43 y 46 aparecen los métodos “get” que obtienen (leen) los valores de las propiedades del objeto instanciado.

Modificamos ahora el proyecto proautomovil.java con el código,


package proautomovil;
/**
*
* @author Jtaguaa
*/
public class Proautomovil {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
automovil auto1 = new automovil();
auto1.setFabricante("Opel");
System.out.println(auto1.fabricante);
}
}

Donde en

  • La línea 13 creamos el objeto auto1 desde la clase automovil.
  • La línea 14 estabelecemos o fijamos el valor de la propiedad fabricante del objeto auto1 a “Opel”.
  • La línea 15 muestra por el dispositivo estandar de salida el valor de dicha propiedad de dicho objeto.
Si hacemos ahotra desde el menú principal "Ejecutar", aparecerá en la ventana de Salida,
Image4
Anuncios

Tutorial de JSP (13): Objeto implícito response.

Los objetos implícitos son una serie de objetos internos asociados a las APIs de los servlets y las páginas JSP suministrados por el contenedor de jsp, y que pueden ser usados en cualquier scriptlet o expresión, para aumentar así su funcionalidad. Entre estos objetos se encuentran:

request, Tiene un ámbito relativo a la petición, y es una instancia de la clase javax.servlet.ServletRequest. Representa la petición del cliente, proporciona entre otras informaciones, los parámetros recibidos del cliente vía formulario o url, el tipo de petición (GET/POST), etc.

response, Tiene un ámbito relativo a la pagina, y es una instancia de javax.servlet.ServletResponse. Encapsula la respuesta generada por la página JSP o servlet que será enviada al cliente en respuesta a su solicitud

session, Instancia de javax.servlet.http.HttpSession, permite acceder a la sesión para leer/escribir datos en ella. En JSP se crea siempre una sesión de trabajo por defecto, para que esto no sea así tendrá que ser específicamente indicado con el atributo session de la directiva page.

out, Instancia de javax.servlet.jsp.JspWriter, este objeto permite escribir la respuesta o parte de ella, en HTML, como resultado de la petición del cliente.

Objeto response

(más…)

Tutorial de JSP (13): Objeto implicito out.

Los objetos implícitos son una serie de objetos internos asociados a las APIs de los servlets y las páginas JSP suministrados por el contenedor de jsp, y que pueden ser usados en cualquier scriptlet o expresión, para aumentar así su funcionalidad. Esto hace que no tengan que ser declarados de manera implícita. Entre estos objetos se encuentran:

request, Tiene un ámbito relativo a la petición, y es una instancia de la clase javax.servlet.ServletRequest. Representa la petición del cliente, proporciona entre otras informaciones, los parámetros recibidos del cliente vía formulario o url, el tipo de petición (GET/POST), etc.

response, Tiene un ámbito relativo a la pagina, y es una instancia de javax.servlet.ServletResponse. Encapsula la respuesta generada por la página JSP o servlet que será enviada al cliente en respuesta a su solicitud

session, Instancia de javax.servlet.http.HttpSession, permite acceder a la sesión para leer/escribir datos en ella. En JSP se crea siempre una sesión de trabajo por defecto, para que esto no sea así tendrá que ser específicamente indicado con el atributo session de la directiva page.

out, Instancia de javax.servlet.jsp.JspWriter, este objeto permite escribir la respuesta o parte de ella, en HTML o cualquier otro contenido, como resultado de la petición del cliente y enviarla al browser.

Objeto implícito out


Los métodos má frecuentemente utilizados son:

print: Escribe directamente en el archivo de salida HTML que se devolverá al cliente.
println: Escribe directamente en el archivo de salida HTML que se devolverá al cliente añadiendo una nueva línea.
newLine(): Este método se utiliza para escribir una nueva línea. La sintaxis es out.newLine()

NOTAS:

Los métodos anteriores se utilizan dentro de un scriptlet o en un servlet.

Un ejemplo sencillo de print o println podría ser

<%  out.println(“Hola mundo”);  %>

La cadena del argumento de print y println no tiene porqué ser una constante, podría ser también una marca de HTML y  así por ejemplo,

<% out.println(“<br><H2>Hola mundo</H2>”); %>

y también puede incorporar cualquier variable previamente declarada, es decir,

<% out.println(“<font color=’red’>El valor del resultado es: ” + resultado + “</font>”); %>

(Es importante recordar que las comillas dobles no deben quedar encerradas entre comillas dobles, cuando ocurre esto, las interiores serán comillas simples).

Conviene recordar:

Concepto, sintaxis y uso del objeto out.

Uso de los métodos print, println, newLine().

Tutorial de JSP (14): Objeto implícito request.

Los objetos implícitos son una serie de objetos internos asociados a las APIs de los servlets y las páginas JSP suministrados por el contenedor de jsp, y que pueden ser usados en cualquier scriptlet o expresión, para aumentar así su funcionalidad. Entre estos objetos se encuentran: request, response, session, out.

(más…)

Tutorial de JSP (11): action forward.

La acción forward se utiliza en JSP para redirigir la petición a otras página JSP, a otro servlet o a otro recurso estático. Es muy útil cuando se quiere separar la aplicación en diferentes vistas, dependiendo de la petición interceptada. Cuando se ejecuta el servlet origen de la página inicial se redirige la petición hacia el destino y ya no se vuelve al servlet original. Pueden pasarse parámetros de la página origen a la de destino, que se recuperan con el método getParameter del objeto implícito request. (Ver en este tutorial).

Sintaxis

donde

  • page: url local que apunta al recurso que va a incluirse. No admite ningún protocolo, nombre de host o número de puerto.
  • param: Opcionalmente puede incluir parámetros a la página a la que desvía la petición. Este parámetro podrá recuperarse con el objeto implícito request.

(más…)

Tutorial de JSP (10) : action include.

La acción include permite la inclusión de la salida de otras páginas jsp, html, ficheros de texto no formateado, ficheros Java, ficheros XML, etc. La inclusión se realiza, no durante la traducción de la jsp (como ocurría con la directiva include), sino justo después, una vez que el servlet generado ya ha sido creado.

El mecanismo de inclusión de la salida de la página incluida, hace que si una página incluida cambia, no es necesario compilar la página que la contiene.

Sintaxis:

Tiene dos atributos, uno obligatorio cuyo nombre es page y otro opcional cuyo nombre es flush

  • page: url local que apunta al recurso que va a incluirse. No admite ningún protocolo, nombre de host o número de puerto.
  • flush: opcional. Por defecto, toma el valor de false. Si se cambia a true, el búfer de salida se vacía antes de que se incluya el recurso asociado a la acción. Este atributo no suele utilizarse.
  • param name, opcionalmente, puede pasar parámetros a la página principal que contiene la acción. Desde allí podrán tomarse los datos con getParameter del objeto request.

Image1

EJEMPLO1:

Un caso típico podría ser una página JSP que contiene noticias que cambian rápidamente. Podríamos resolver la página principal con cierta página JSP e incluir las noticias en determinadas posiciones de dicha página principal. De esta manera, la página jsp (y el servlet generado) para la página principal nunca cambiaría, mientras que los cambios más dinámicos de cada una de las noticias podría hacerse en otras páginas incluidas.

1.- Inicie una sesión con el IDE de NetBeans y haga “Archivo”, “Proyecto Nuevo”, “Proyecto Web” y “Web Aplication”… Nombre al proyecto, por ejemplo, “a_include”

2.-Cuando el editor presente la plantilla del archivo index.jsp sustitúyalo por el siguiente otro

<%-- 
    Document   : index
    Created on : 02-ene-2009, 11:28:39
    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 accion include</title>
    </head>
    <body BGCOLOR="#FDF5E6">

        <CENTER>
            <H1>NOTICIAS DEL DÍA</H1>
            <H2>Resumen de las noticias recientes:</H2>
                <OL>
                    <LI>Primera Noticia:<br>
                        <jsp:include page="noticias/item1.html" flush="true" />
                    <LI>Segunda Noticia:<br>
                        <jsp:include page="noticias/item2.html" flush="true" />
                </OL>
        </CENTER>
    </body>
</html>

Observe las dos acciones include, una en la línea 22 y otra en la línea 24. En los dos casos, se transmite al fichero jsp correspondiente el número de orden de la noticia.

3.-Sitúese ahora con el botón derecho sobre el proyecto, haga click y cuando aparezca el menú contextual haga “Nuevo” y “Carpeta”. LLame a esa carpeta, por ejemplo, “noticias”.

4.-En la carpeta noticias incluya ahora dos archivos jsp llamados “item1” e “item2” con el siguiente contenido

<img alt="" />alt="Rafa Nadal" src="imagenes/rafanadal.jpg" width="190" height="120" />
<p>
Rafael Nadal fué el beneficiario de un enésimo abandono en el Masters de Shanghai

al avanzar ayer viernes a las semifinales cuando Ivan Ljubicic se convirtió en el

octavo jugador en retirarse por una lesión durante el transcurso de la semana.
</p>

y

<img alt="" />alt="Federer" src="imagenes/federer.jpg" width="190" height="120" />
<p>
 El tenista suizo Roger Federer, cinco veces campeón de Wimbledon, ganó en su

 debut en la pista central del torneo británico frente el taiwanés Yen-Hsun

 Lu por 7-5, 6-3 y 6-2, tras una hora y 45 minutos de juego.
</p>

5.- Cree una carpeta denominada “imagenes” e introduzca las correspondientes imágenes cualesquiera que sean estás y localizadas en internet. Vea el árbol de directorios,

Image1

6.- Ejecute finalmente y obtendrá,

Image2

Una vez ejecutado el proyecto, modifique el fuente, por ejemplo de la segunda noticia y ejecute desde el menu contextual el archivo index.jsp, comprobará que esta última ejecución se toma en consideración los cambios producidos, lo que no ocurría con las inclusiones estudiadas en la directiva page con atributo include.

Consideraciones:

Pruebe a modificar una página jsp incluida y compílela para más tarde comprobar que no necesita recompilar la página contenedora.

Cuestiones a recordar:

Concepto, sintaxis y uso de la acción include.

Diferencia entre una acción include y una directiva include.

Tutorial de JSP (9): JavaBean.

Un JavaBean es un objeto Java que cumple ciertas características en cuanto a su diseño:

  • Debe tener un constructor sin argumentos.
  • Sus propiedades deben ser accesibles mediante métodos get y set que siguen una nomenclatura estándar.
  • Debe ser serializable. (Es el proceso de salvar un objeto a un medio de almacenamiento).

El código que sigue se corresponde con una clase que define el objeto JavaBean denominado “persona” con dos propiedades, (nombre y edad)

public class persona {

//Atributos/propiedades

private String nombre;

private int edad;

// Constructor sin argumentos.

public persona() { }

public String getNombre()

{ return nombre; }

public int getEdad()

{ return edad; }

public void setNombre ( String nombre )

{ this.nombre = nombre; }

public void setEdad( int edad )

{this.edad = edad; }

}


(más…)

Tutorial de JSP (9) – Directiva @taglib

La directiva taglib indica al motor jsp que la página va a utilizar “tag libraries” o librerías de etiquetas . Estas librerías contienen etiquetas creadas por el propio programador con sus correspondientes atributos que encapsulan determinada funcionalidad.

La sintaxis es

<%@taglib uri=“ . . . . . ” prefix = “ . . . . . ” %>

donde

  • el atributo uri permite localizar el fichero descriptor de la librería de extensión tld.
  • el atributo prefix especifica el identificador que todas las etiquetas de la librería deben incorporar y que no puede coincidir con las palabras reservadas jsp:, jspx:, java:, javax:, servlet:, sun:, and sunw:

Como cabe esperar existe un procedimiento para crear estas librerías y que aquí no vamos a analizar, lo que si haremos es utilizar un par de ellas previamente construidas.

EJEMPLO 1:

Vamos a utilizar la librería de etiquetas strtag.jar diseñada para manejar fundamentalmente cadenas de texto. Esta librería tiene etiquetas tales como

(más…)

Tutorial de JSP (8) – Directiva @include

La directiva include inserta el contenido de otro fichero en el fichero principal JSP, en la línea donde está situada y antes de ser procesada o traducida a servlet. Su sintaxis es la siguiente.

<%@ include file=”url relativa” %>

En otras palabras, la directiva include simplemente copia el contenido del archivo incluido byte a byte, siendo el resultado similar a si copiamos el texto del archivo incluido y lo pegamos en el JSP.

Es muy importante señalar que dado que la directiva include incluye el fichero en el momento de la compilación, si la página incluida cambia después de la compilación, los cambios no se verán reflejados en la página actual hasta que se vuelva a compilar. Por esta razón si una página incluida cambia, es necesario re-compilar la página que la contiene.

La URL se interpreta relativa al directorio home del servidor Web empezando la URL (Web Pages del proyecto, el lugar donde debe encontrarse index.jsp). Los contenidos del fichero incluido son analizados como texto normal, y así pueden incluir JSP, HTML estático, elementos de script, directivas, acciones o fichero TXT de texto convencional.

Tenga especial cuidado en estas inclusiones de fragmentos de código, porque la página final resultante debe ser coherente respecto a las etiquetas <html> , </html> , <body> o </body>, ya que no deben repetirse cuando se construya la página principal con las inclusiones.

Es útil para incluir información que se quiere reutilizar en otras páginas u aplicaciones. Por ejemplo, el fichero incluido pudiera ser

1.- Una tabla con un banner gráfico fijo, o

2.- Información de pie de página con el  copyright, o

3.- Una cabecera idéntica para un grupo de páginas de una aplicación, etc.

Image2

(más…)

Mi primera página Web dinámica con JSP.

Vamos a dar los primeros pasos con Netbeans y  JSP, para ello vamos a producir una sencilla página JSP que produzca el resultado siguiente en el cliente o navegador (Firefox), después de ser procesada por el servidor, en este caso localhost.

Como parece obvio, se requiere que una vez presentada la página con la fecha y hora correctas, si se “recarga” la página cambie dicha  información convenientemente, si procede … Este es el concepto más simple de página web dinámica, aquella que su información cambia con el tiempo…

RESPUESTA:

(más…)