Descarga la aplicación para disfrutar aún más
Esta es una vista previa del archivo. Inicie sesión para ver el archivo original
Apuntes/Sesion1_HTML.pdf 1 Laboratorio de Informática Distribuida Sesión I. Lenguaje HTML/Formularios Roberto Barchino Plata Lenguaje HTML/Formularios Lenguaje HTML El lenguaje HTML (HyperText Markup Language), es un lenguaje pensado para presentar información en la Web. Es un lenguaje de marcas – etiquetas para la creación de documentos hipertextuales. Por hipertexto entenderemos texto con una presentación agradable, con inclusión de elementos multimedia (gráficos, video, audio) y con la presencia de hiperenlaces que permiten relacionar otras fuentes de información en documentos hipertextos. La versión actual del lenguaje es la 4.0.1 disponible en: http://www.w3.org/TR/html4/ 2 Lenguaje HTML/Formularios Lenguaje HTML Es un lenguaje de etiquetas y pueden verse como las “instrucciones” del lenguaje, la estructura de una etiqueta dentro de un documento o página HTML es: <ETIQUETA> ..Campo acción .. </ETIQUETA> Por tanto, un documento HTML estará formado de texto que será el contenido del documento y de etiquetas HTML que resaltarán el contenido y le darán un formato de manera sencilla y con la posibilidad de relacionar documentos y fuentes de información mediante hiperenlaces. Lenguaje HTML/Formularios Lenguaje HTML Las etiquetas pueden presentar modificadores, que llamaremos atributos, que permitirán definir las diferentes posibilidades de la etiqueta HTML. Estos atributos se definirán en la etiqueta de inicio y consistirán normalmente en el nombre del atributo y el valor que toma separados por un signo de igual. Ejemplo: <FORM method=“POST” action=“./ConsultarSaldo”> Cuando el valor que toma el atributo tiene más de una palabra deberá expresarse entre comillas, en otro caso no será necesario. 3 Lenguaje HTML/Formularios Lenguaje HTML La estructura de cualquier página HTML es: <HTML> <HEAD> Definiciones de cabecera </HEAD> <BODY> Etiquetas HTML </BODY> </HTML> Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Los formularios son plantillas que permiten la creación de documentos HTML para solicitar cierta información a los clientes/usuarios de la página, lo que nos permite interactuar con ellos. La principal utilidad de los formularios reside en la posibilidad de crear cuestionarios, encuestas o en general cualquier documento en el que se desee una interacción por parte del usuario. Se podrán definir distintos tipos de cajas de dialogo, botones de selección, menús de distintas opciones, etc. 4 Lenguaje HTML/Formularios Lenguaje HTML. Formularios. A continuación se presentan los diferentes atributos de la etiqueta <FORM> además de enumerar las posibilidades de inclusión de elementos de interacción con el usuario. Dicha enumeración es básica, pudiendo profundizar en la definición en la siguiente dirección web: http://www.w3.org/TR/html4/interact/forms.html Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Atributos <FORM> < FORM ACTION=“URL->fichero” METHOD= POST | GET > ... Elementos que forman el formulario ... < /FORM> Action – Modificador donde se especifica la dirección del programa del servidor web que se va hacer cargo de los datos del formulario. La URL puede ser absoluta (http://www.cc.alcala.es/servlet/Comprobar) o relativa (/Servlet/Comprobar) Method – Determina cómo se transportan los datos entre el cliente y el servidor. En el método GET los datos se añaden a la URL y en el método POST los datos se envían a través de un fichero standard de entrada/salida. 5 Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Entradas básicas de datos en el formulario. < INPUT TYPE = ( TEXT | PASSWORD | CHECKBOX | RADIO | HIDDEN | SUBMIT | IMAGE | RESET ) NAME = "Variable " VALUE = "Valor Inicialización" > Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Entrada de texto: < INPUT TYPE=TEXT NAME="variable" VALUE="valor inicial " SIZE="tamaño" MAXLENGTH="long. máxima" > Ejemplo. Nombre:<input type=text name=nombre size=30 maxlength=25 > 6 Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Entrada de texto oculto. Password: < INPUT TYPE=PASSWORD NAME="variable" VALUE="valor inicial " SIZE="tamaño" MAXLENGTH="long. máxima" > Ejemplo. Password:<input type=PASSWORD name=clave size=15 maxlength=10> Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Entrada CheckBox. < INPUT TYPE=CHECKBOX NAME="variable" CHECKED> Ejemplo. <input type=checkbox name=caja1 checked ><br> <input type=checkbox name=caja2 ><br> <input type=checkbox name=caja3 ><br> Nota: “Los posibles valores de las variables serán On y Off” 7 Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Entrada Radio. <INPUT TYPE=RADIO NAME="variable" VALUE="valor“ CHECKED> Ejemplo. <input type=radio name=so value=linux checked ><br> <input type=radio name=so value=95 ><br> <input type=radio name=so value=2000 ><br> Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Entrada Oculta. < INPUT TYPE=HIDDEN NAME="variable“ VALUE="valor" > Ejemplo. <input type=hidden name=oculto value=pasa1 ><br> 8 Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Envío de Datos. < INPUT TYPE=SUBMIT VALUE="mensaje" > Ejemplo. <input type=submit value=“Enviar consulta” > Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Envío de Datos. Botón envío gráfico. < INPUT TYPE=IMAGE NAME="variable" SRC="URL Imagen" > Ejemplo. <input type=image name=imagen src=uah.jpg > 9 Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Inicialización Datos. < INPUT TYPE=RESET VALUE=“Mensaje" > Ejemplo. <input type=reset value=“Borrar consulta” > Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Entrada de Texto, varias líneas. <TEXTAREA NAME="variable" ROWS=Filas COLS=Columnas> Texto de Inicialización que puede incluir varias líneas. </TEXTAREA> Ejemplo. <TEXTAREA NAME=texto ROWS=10 COLS=60> Escriba aquí </TEXTAREA> 10 Lenguaje HTML/Formularios Lenguaje HTML. Formularios. Selección entre múltiples opciones. <SELECT NAME="variable"> < OPTION SELECTED VALUE=valor1> Opción Primera < OPTION VALUE=valor2> Opción Segunda … </SELECT> Ejemplo. <SELECT NAME=dpto> < OPTION SELECTED VALUE=ventas> Dpto. Ventas < OPTION VALUE=personal> Dpto. Personal </SELECT> Laboratorio de Informática Distribuida Sesión I. Lenguaje HTML/Formularios Roberto Barchino Plata Apuntes/Sesion2_Servlets[1].pdf 1 Laboratorio de Informática Distribuida Sesión II. Servlets Servlets Base de datos Cliente Servidor Web Tecnología Servlets Se puede definir un Servlet como un programa JAVA que se ejecuta en un entorno distribuido en red, como un servidor web, y que recibe y responde a las peticiones de un cliente a través del protocolo HTTP. 2 Servlets Entorno de Trabajo: Sistema operativo. Servidor Web: Apache Tomcat. Configuración de las variables de entorno. Cómo crear una aplicación Web y desplegarla. Formas de ejecutar un servlet. Servlets Sistema operativo. A lo largo de la sesión se asumirá que se trabaja sobre una máquina con Windows 95/98/2000/NT/XP. En la elección del sistema operativo se ha tenido en cuenta que la mayoría de las personas que leen este tema dispondrán y conocerán este popular sistema operativo. Pero también es factible construir un entorno de programación de la tecnología de los Servlets en un sistema operativo con Unix. 3 Servlets Servidor Web (I). El Servidor Web elegido es Tomcat. Para su utilización dispones de dos posibilidades: 1. Dentro del NetBeans tenemos pre-instalado el Tomcat 5.5.7. Servlets Servidor Web (II). El Servidor Web Tomcat. 2. Instalar el Tomcat de forma independiente, simplemente será necesario descomprimir o ejecutar el fichero de jakarta-tomcat-5.5.9 en C: 4 Servlets Servidor Web (III). Cuando pregunte por el nombre y la clave del administrador se recomienda utilizar admin – admin. El puerto por defecto es el 8080. Servlets Servidor Web (IV) Para arrancar el servidor vamos al icono del Tomcat y pulsamos (botón derecho del ratón) en Start service. Una vez arrancado el servidor podemos comprobar su funcionamiento ejecutando el navegador de Internet y poniendo la dirección: http://localhost:8080 o http://127.0.0.1:8080 5 Servlets Servidor Web (V). La página por defecto del Servidor Web. Servlets Configuración de las variables de entorno. Se tendrán que añadir dos nuevas variables de entorno al sistema operativo. Estas son JAVA_HOME que especifica donde se encuentra instalado el JDK y otra es CATALINA_HOME que indica donde está instalado el Tomcat. A continuación mostramos las pantallas en la que se especifica esta información (Panel de Control – Sistema – Opciones Avanzadas – Variables de Entorno): 6 Servlets Configuración de las variables de entorno. Servlets Configuración de las variables de entorno. Si el entorno de desarrollo NO es NetBeans, para poder compilar las clases que representan los servlets debemos decirle al compilador donde se encuentra el API de los servlets. Esto es así porque el API de los servlets no viene con el API estándar del JDK. La librería que tenemos que añadir se llama servlet- api.jar y se encuentra dentro del Tomcat en el directorio /common/lib. Si se utiliza NetBeans esto no es necesario!!! 7 Servlets Configuración de las variables de entorno. Si utilizamos el entorno de Java JCreator, podremos especificar donde buscar las librerías externas al JDK para incluirlas en nuestro proyecto y poder buscar las clases necesarias para compilar los servlets. Para hacerlo debemos ir a las propiedades del proyecto y en la pestaña de Required Libraries introducir una nueva librería llamada servlets que apunte al fichero servlet-api.jar. Servlets Configuración de las variables de entorno. 8 Servlets Cómo crear una aplicación Web en NetBeans. Pasos: 1. Elegir un nuevo proyecto Web. 2. Configurarlo: Nombre del proyecto, su ubicación, el servidor web, etc. 3. Cerrar configuración configuración Servlets Elegir un nuevo proyecto en NetBeans 9 Servlets Configurarlo en NetBeans. Servlets Una vez terminada la configuración, el proyecto web ya está creado y ya podemos ejecutarlo en NetBeans. Para ejecutarlo debemos pulsar el botón de Run Main Proyect - > F6. 10 Servlets Y podremos visualizar, a través de un navegador web, la página por defecto de nuestro proyecto no es otra cosa que una página jsp Servlets Cómo crear una aplicación y desplegarla, sin NetBeans. Para crear una aplicación Web y desplegarla en el servidor es necesario crear una estructura de directorios en la carpeta webapps del Tomcat. 1.- Creamos una carpeta con el nombre del proyecto Web que queremos realizar, por ejemplo: C:\Tomcat\webapps\Miproyecto 2.- En el directorio MiProyecto situamos los siguientes ficheros y directorios: 11 Servlets Cómo crear una aplicación y desplegarla. / *.html *.jsp *.css: Este directorio base contiene los elementos que comúnmente son utilizados en un sitio Web, Documentos en HTML , JSP's , CSS ,etc. /WEB-INF/web.xml: Contiene elementos de seguridad de la aplicación así como detalles sobre los servlets que serán utilizados dentro de la aplicación. /WEB-INF/classes/: Contiene a los servlets y a las clases Java adicionales a las del JDK que serán empleadas. /WEB-INF/lib/: Contiene los JAR's que serán utilizados por la aplicación. Servlets Cómo crear una aplicación y desplegarla. Una vez situados todos los ficheros en los directorios adecuados para crear nuestra aplicación Web, debemos crear un fichero llamado web.xml. Este fichero se conoce como el descriptor de despliegue y sirve para registrar nuestros servlets en el contenedor. El entorno de NetBeans nos ayuda enormemente en la creación y posterior manipulación de este fichero. Para crear fácilmente un descriptor de despliegue, se suele editar uno existente. A continuación tenemos un esqueleto de un fichero web.xml: 12 Servlets Fichero Web.xml. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list> </web-app> Servlets Cómo crear una aplicación y desplegarla. Además de la información anterior debemos describir cuándo el contenedor de servlets debe invocar al servlet, lo que se suele llamar el mapeo del servlet. En otras palabras, debemos describir cómo se enlaza una URL al servlet. En el fichero web.xml, las URLs se mapean de esta forma: <servlet-mapping> <servlet-name>nombre</servlet-name> <url-pattern>pattern</url-pattern> </servlet-mapping> 13 Servlets Formas de ejecutar un Servlet. Introducir la dirección URL del servlet en un navegador web. Llamar al servlet desde una página web o formulario. Ejecutar un servlet llamándolo desde otro servlet. Servlets Desde un navegador web Ejemplo: http://nombre_maquina:puerto/ruta_servlet/nombre_servlet Las llamadas a servlets pueden contener parámetros: http://www.cc.alcala.es/~barchino/servlets/ejem1?dato1=3&dato2=4 Parámetros 14 Servlets Desde una página Web Un servlet también puede ser llamado desde el código de una página web, al igual que se llamaría a cualquier CGI. Ejemplo: <form action = “http://www.cc.alcala.es/~barchino/servlets/serv2” method=“post”> ...distintas entradas en el formulario… </form> Servlets Desde otro servlet Se puede lanzar la ejecución de un servlet desde otro. Pasos: Conocer el nombre del servlet que queremos llamar. Proporcionar acceso al objeto “Servlet” del servlet llamado. Llamar al método público del servlet. 15 Servlets El API de los Servlets Biblioteca ‘javax.servlet’ Servlets HttpServlet MiServlet paquete javax.servlet paquete javax.servlet.http Servlets El API de los Servlets Dos paquetes: javax.servlet javax.servlet.http Interfaz Servlet Interfaz HttpServlet Interfaz ServlerRequest Interfaz HttpServletRequest Interfaz ServlerResponse Interfaz HttpServletResponse Interfaz ServletConfig Interfaz HttpServletConfig Interfaz ServletContext ……… Interfaz SingleThreadModel Clase GenericServlet 16 Servlets La Clase HttpServlet Extiende de la clase GenericServlet y proporciona una implementación de la interfaz Servlet mucho más específica para el protocolo HTTP. Esta es la clase que extienden la mayoría de los servlets que hay en la actualidad. Métodos (throws ServletException, IOException) Gestionan el servicio public void service (HttpServletRequest req, HttpServletResponse res) Implementan operaciones propias de HTTP GET doGet (HttpServletRequest req, HttpServletResponse res) POST doPost (HttpServletRequest req, HttpServletResponse res) Servlets Javax.servlet.http.HttpServletRequest Una interfaz que encapsula la funcionalidad de las peticiones que hace el cliente. IMPORTANTE: Uno de los métodos de esta interfaz es el método getParameter (String Name) utilizado en la mayoría de los servlets que recuperan valores de los de los formularios HTML rellenados por los clientes de las aplicaciones. Un objeto HttpServletRequest se pasa como parámetro al método service de la clase HttpServlet. 17 Servlets Javax.servlet.http.HttpServletResponse Esta interfaz encapsula la funcionalidad de una respuesta HTTP, incluyendo el manejo de las cabeceras del propio protocolo. Interfaz que encapsula la funcionalidad de la respuesta MIME que será enviada al cliente. Un objeto ServletResponse se pasa como parámetro al método service de la clase Servlet. Servlets Ciclo de Vida: La interfaz que se utiliza para implementarlos define una serie de métodos para cada una de las etapas. El orden es el siguiente: Cuando el servidor carga el Servlet invoca al método init. (Todas las peticiones que lleguen ante de que el método termine deberán esperar). Una vez ejecutado el método init, todas las peticiones serán atendidas por el método service . IMPORTANTE: El servidor manejará varias peticiones simultáneamente, asignando un hilo propio a cada petición. Por último cuando el servidor web descarga al Servlet se invocará al método destroy. 18 Servlets Servidor Servlet Servidor Servlet Manejo de peticiones Cliente Cliente service() Servidor Servlet Descarga destroy() doGet() doPost() Carga init() Servlets Creación del primer Servlet: Se van a seguir todos los pasos necesarios para hacer funcionar sin problemas un Servlet, y se va a realizar un primer análisis de su estructura básica. El ejemplo va a consistir en una página HTML en la que existirá un campo de entrada en el formulario, con los correspondientes botones Submit (Enviar consulta) y Reset (Restablecer) típicos de cualquier formulario de entrada de datos. 19 Servlets Creación del primer Servlet. Pagina Web. Al pulsar al botón Servlets Creación del primer Servlet. Resultado. Salida del Servlet 20 Servlets Código HTML: <html> <head> <title>Ejemplo "Mi Primer Servlet"</title> </head> <body> <form action=/MiPrimerServlet/MiPrimerServlet method=POST> <BR> <BR>Introduzca un texto en el cuadro y pulse "Enviar Consulta"<BR> <BR> <input type=text name=TEXTO> <BR> <BR><input type=submit><input type=reset></form> </body> </html> Servlets Código del Servlet: // MiPrimerServlet.java // import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class MiPrimerServlet extends HttpServlet { string nombre; public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { nombre = req.getParameter("TEXTO"); PrintStream out = new PrintStream(res.getOutputStream()); res.setContentType("text/html"); out.println("<p>Usted ha escrito : "+nombre+"</p>"); out.close(); } } 21 Servlets Código del web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app> <display-name>Servidor Hola</display-name> <description>Captura un texto como parametro</description> <servlet> <servlet-name> MiPrimerServlet </servlet-name> <servlet-class> MiPrimerServlet </servlet-class> <servlet-class>package.nombre.MiClass</servlet-class> </servlet> <servlet-mapping> <servlet-name> MiPrimerServlet </servlet-name> <url-pattern>/MiPrimerServlet </url-pattern> </servlet-mapping> </web-app> Servlets Crear un Servlet, por defecto, en el entorno de NetBeans. Pasos: Crear un nuevo fichero de tipo servlet sobre el proyecto web previamente creado. Configurar servlet con el nombre y demás parámetros de configuración como veremos a continuación. Ejecutar la aplicación y probar el ejecución del servlet. 22 Servlets Creación de una servlet en el entorno del NetBeans, una vez creado el proyecto: Servlets Configurar (I) el servlet con el nombre : 23 Servlets Configurar (II) el servlet con la información necesaria para el mapeo : Servlets Además podemos visualizar el código que se genera por defecto. 24 Servlets Y el fichero de configuración web.xml. Servlets Una vez terminada la configuración, del servlet, podemos ejecutarlo. Para ejecutarlo debemos pulsar el botón de Run Main Proyect - > F6. 25 Servlets Resultado de la ejecución. Servlets Servlet y JDBC. La clave del éxito de las aplicaciones Web, reside en la consulta de bases de datos por parte del aplicativo software, que hace de intermediario entre el cliente y el sistema que almacena la información. A las aplicaciones cliente-servidor que utilizan este tipo de arquitectura, se las denomina aplicaciones de tres capas. 26 Servlets Creación del primer Servlet: Se van a seguir todos los pasos necesarios para hacer funcionar sin problemas un Servlet, y se va a realizar un primer análisis de su estructura básica. El ejemplo va a consistir en una página HTML en la que existirá un campo de entrada en el formulario, con los correspondientes botones Submit (Enviar consulta) y Reset (Restablecer) típicos de cualquier formulario de entrada de datos. Servlets Creación de una página en el entorno del NetBeans (I): File –> New File Ctrl + N 27 Servlets Creación de una página en el entorno del NetBeans (II): Servlets Código HTML: 28 Servlets Crear el servlet: 1º 2º Servlets Código Servlet: 29 Servlets Código del web.xml Servlets. Una vez terminada la creación y configuración, del servlet y la página web, podemos ejecutar esta primera aplicación. Para ejecutarlo debemos pulsar el botón de Run Main Proyect - > F6. 30 Servlets Acceso a la aplicación Servlets Resultado de la Aplicación. 31 Servlets Servlet y JDBC. La clave del éxito de las aplicaciones Web, reside en la consulta de bases de datos por parte del aplicativo software, que hace de intermediario entre el cliente y el sistema que almacena la información. A las aplicaciones cliente-servidor que utilizan este tipo de arquitectura, se las denomina aplicaciones de tres capas. Servlets Servlet y JDBC: Arquitectura en tres capas. 32 Servlets Acceso a Datos.Conector JDBC-ODBC. Cómo Crear un Conector vía JDBC-ODBC. El puente JDBC-ODBC no necesita pasos específicos para su instalación, pero ODBC si. Por ejemplo si asumimos que estamos utilizando un máquina con S.O. Windows necesitaremos configurar nuestra conexión mediante ODBC. A continuación se presentan las pantallas necesarias para crear un conector. Servlets Acceso a Datos. Conector JDBC-ODBC. 33 Servlets Acceso a Datos. Conector JDBC-ODBC. Servlets Acceso a Datos. Conector JDBC-ODBC. 34 Servlets Acceso a Datos. Conector JDBC-ODBC. Servlets Acceso a Datos. Conector JDBC-ODBC. 35 Servlets Servlet y JDBC. Aplicación Ejemplo. Encuesta. En nuestra página principal insertaremos un pequeño formulario, donde se deberá responder a una sencilla pregunta, e introducir los datos personales necesarios para que podamos contactar con el posible ganador del premio. Una vez el participante haya introducido los datos, y pulse el botón para mandar los datos al servidor, recibirá un resumen con la estadística resultante hasta ese momento junto con un mensaje de agradecimiento. Servlets Aplicación Ejemplo. Encuesta. Página HTML 36 Servlets Aplicación Ejemplo. Encuesta. Página HTML Servlets Aplicación Ejemplo. Encuesta. Resultado 37 Servlets Aplicación Ejemplo. Encuesta. Servlet (I) Servlets Aplicación Ejemplo. Encuesta. Servlet (II) 38 Servlets Aplicación Ejemplo. Encuesta. Servlet (III) Servlets Aplicación Ejemplo. Encuesta. Servlet (IV) 39 Servlets Aplicación Ejemplo. Encuesta. Servlet (V) Servlets Servlet y el Manejo de Sesiones. Los protocolos de Comunicaciones en Internet se pueden dividir en 2 tipos: Con Estado (FTP, Telnet, etc. ) Sin Estado (WWW - HTTP ) ESTADO: Se sabe quien es el usuario y qué es lo que quiere realizar en cada momento, mientras esté conectado al servidor. 40 Servlets Servlet y el Manejo de Sesiones. El protocolo HTTP es un protocolo SIN estado. Por tanto, el servidor no necesita saber si un determinado conjunto de peticiones vienen del mismo cliente o de clientes diferentes. Pero, en algunas situaciones, puede ser interesante cuando se desarrollan aplicaciones WEB que este aspecto se tenga en cuenta (estado), por ejemplo en una tienda virtual. El objetivo de una sesión es mantener el estado del usuario en el servidor. Servlets Servlet y el Manejo de Sesiones. Una sesión se puede definir como un conjunto de interacciones relacionadas, entre un cliente y un Servidor WEB, que tienen lugar en un periodo de tiempo determinado. Debido a que el protocolo HTTP es un protocolo sin estado, el servidor web no conoce a qué sesión pertenece una petición determinada, existen en general dos formas para conocer el estado del usuario: Que el cliente se identifique cada vez que realiza una petición determinada. (REPETITIVA) Usando distintas técnicas que se presentan a continuación 41 Servlets Servlet y el Manejo de Sesiones. Si en el desarrollo de la aplicación WEB utilizamos Servlets para gestionar las peticiones, el desarrollador tiene a su disposición una serie de posibilidades que le ayudan a mantener una sesión: Introduciendo campos ocultos en el formulario HTML. Reescribiendo la URL incluyendo estos datos como parámetros de la misma. Usando cookies. Usando las herramientas de seguimiento de sesiones que se incluyen dentro de la API de Servlets. Servlets Servlet y el Manejo de Sesiones. La API de JAVA para desarrollar Servlets proporciona un método para el seguimiento de los datos de una sesión, el cual utiliza dos técnicas diferentes: Las cookies El objeto HttpSession El objeto HttpSession se usa para almacenar los datos de una sesión en el contexto del servlet actual. Las cookies se utilizan para relacionar a un usuario particular con su objeto de sesión asociado, gracias a un identificador de sesión 42 Servlets Servlet y el Manejo de Sesiones. El objeto HttpSession viene definido por la interfaz HttpSession y se obtiene usando el método getSession() del objeto HttpServletResponse. El objeto HttpSession posee los siguientes métodos: getCreationTime() Devuelve la fecha en la fue creada la sesión. getID() Devuelve el identificador de la sesión. getLastAccesedTime() Devuelve el lapso de tiempo transcurrido desde que un usuario con el mismo identificador de sesión, realizó una petición al servidor. Servlets Servlet y el Manejo de Sesiones. El objeto HttpSession posee los siguientes métodos: invalidate() Elimina la sesión actual. isNew() Devuelve true si el objeto sesión ha sido creado por el servidor, pero todavía no se ha enviado de vuelta al navegador del usuario correspondiente. getValueNames() Devuelve un array de textos que representan todos los nombres de los valores que son almacenados para esta sesión. 43 Servlets Servlet y el Manejo de Sesiones. El objeto HttpSession posee los siguientes métodos: getValue(String name) Devuelve el valor almacenado para el nombre pasado como parámetro. putValue(String name, Object value) Añade un item “clave=valor” a la sesión. removeValue(String name) Elimina un item de la sesión. Servlets Servlet y el Manejo de Sesiones. El objeto HttpSession posee los siguientes métodos: setMaxInactiveInternal(int interval) Especifica el máximo intervalo de tiempo, en segundos, que el servidor mantiene la sesión si que exista ninguna otra petición dirigida a la sesión. getMaxInactiveInternal() Devuelve el máximo intervalo de tiempo que la sesión ha estado inactiva. 44 Servlets Servlet y el Manejo de Sesiones. Pasos a seguir para la realización de sesiones usando servlets: Lo primero es crear un objeto sesión. Utilizando para ello el método getSession(boolean) de la clase HttpServletRequest. Después una vez creado el objeto sesión, sólo queda leer de él y escribir en él. Cuando finaliza el servlet, se invalida la sesión. Servlets Servlet y el Manejo de Sesiones. Ejemplo (I): Como escribir datos en una sesión. //Se obtiene un objeto sesion HttpSession sesion=peticion.getSession(true); //Se añade un nuevo item a la sesión sesion.putValue("Cliente",strCodigo[0]); Nota: peticion es un objeto de la clase HttpServletsRequest 45 Servlets Servlet y el Manejo de Sesiones. Ejemplo (II): Como leer datos de una sesión //Se obtiene un objeto sesion HttpSession sesion=peticion.getSession(true); //Se leen los datos realizando los casting necesarios String strCodigoC=(String) sesion.getValue("Cliente"); Laboratorio de Informática Distribuida Sesión II. Servlets Apuntes/Sesion3_JSP.pdf 1 Laboratorio de Informática Distribuida Sesión III. JavaServer Pages Introducción a JavaServer Pages Índice Sesión JSP: Tecnologías JAVA para aplicaciones web. Introducción a JSP. Elementos JSP. Ciclo de Vida. Acceso a Datos. Manejo de Sesiones. JavaBeans. Librería de Etiquetas. 2 Introducción a JavaServer Pages Tecnologías JAVA para aplicaciones web. El lenguaje JAVA dispone de dos tecnologías para el desarrollo de aplicaciones en entorno web: Tecnología JSP. Tecnología Servlets. Aunque distintas, están íntimamente relacionadas, ya las páginas JSP al final se transforman en Servlets que son las aplicaciones que realmente se ejecutan en el servidor web. Introducción a JavaServer Pages Introducción a JSP. Permite mezclar, en una página, código HTML para generar la parte estática, con contenido dinámico generado a partir de marcas especiales <% .... %> El contenido dinámico se obtiene, en esencia, gracias a la posibilidad de incrustar dentro de la página código Java de diferentes formas. Permite el acceso a Bases de Datos remotas. Gestionar sesiones. 3 Introducción a JavaServer Pages Introducción a JSP. El primer borrador de la especificación JSP, de Sun Microsystems, vio la luz en 1998, apareciendo la especificación v 1.0 al año siguiente. La siguiente versión (v 1.1) se presento a finales de 1999. Actualmente disponemos de la especificación v 1.2 Introducción a JavaServer Pages Introducción a JSP. La página JSP se convierte en un Servlet La conversión la realiza la máquina servidora: el motor o contenedor de JSP, la primera vez que se solicita la página JSP al servidor web. Este servlet generado procesa cualquier petición para esa página JSP. Si se modifica el código de la página JSP, entonces se regenera y recompila automáticamente el Servlet y se recarga la próxima vez que sea solicitada. 4 Introducción a JavaServer Pages Introducción a JSP. Introducción a JavaServer Pages Introducción a JSP. Ejemplo de página JSP que dice Hola y escribe la fecha actual (fichero hola.jsp). Para editar las páginas se utilizará el EditPlus. <%@ page info="Un ejemplo Hola Mundo" import="java.util.Date" %> <HTML> <head> <title> Hola, Mundo </title> </head> <body> <h1> ¡Hola, Mundo! </h1> La fecha de hoy es: <%= new Date().toString() %> </body> </HTML> 5 Introducción a JavaServer Pages Introducción a JSP. / *.html *.jsp *.css: Este directorio base contiene los elementos que comúnmente son utilizados en un sitio Web, Documentos en HTML , JSP's , CSS ,etc. /WEB-INF/web.xml: Contiene elementos de seguridad de la aplicación así como detalles sobre los servlets que serán utilizados dentro de la aplicación. /WEB-INF/classes/: Contiene a los servlets y a las clases Java adicionales a las del JDK que serán empleadas. /WEB-INF/lib/: Contiene los JAR's que serán utilizados por la aplicación. Directorio de Partida C:\Tomcat5.0\webapps\MiAplicación\ Introducción a JavaServer Pages Elementos JSP. Resumen. Comentarios. Directivas <%@ page <%@ page ATRIBUTOS %> include <%@ include file=”Nombre del fichero” %> taglib <%@ taglib uri =”taglibraryURI” prefix=”tagPrefix” %> Elementos para incrustar código JAVA Scripting (guiones) <% Declaraciones <% ! Declaración %> Código Java arbitrario (scriptlets) <% código Java %> Expresiones <%= Expresión Java a evaluar %> Acciones estándar (formato XML) <jsp: <jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:include> <jsp:param> <jsp:forward> <jsp:param> 6 Introducción a JavaServer Pages Elementos JSP. Comentarios. Las paginas JSP admiten dos tipos de comentarios, los que están orientados o concebidos para presentarse en el código HTML que se generaran a partir de la pagina JSP y los comentarios ocultos, que solamente aparecen en la pagina JSP y están orientados al desarrollador. <!-- Comentario HTML normal --> <%-- Comentario oculto JSP --%> Introducción a JavaServer Pages Elementos JSP. Declaraciones: Son elementos que se utilizan para declarar una variable, objeto o un método que se utilizará posteriormente en la pagina JSP. No generan ninguna salida, por lo que pueden utilizarse conjuntamente con otros elementos de las paginas JSP, como son expresiones o scriptlets. <%! Declaracion, .... % > <%! int i = 0, j = 10; % > <%! java.util.Date fecha = new java.util.Date();%> 7 Introducción a JavaServer Pages Elementos JSP. Expresiones: Las expresiones son un mecanismo que evita tener que escribir el código completo de la sentencia out.println(). Su sintaxis utiliza el símbolo de igual, tal y como vemos a continuación <%= expresion > <%= sueldoBase + dietas %> Introducción a JavaServer Pages Elementos JSP. Scriptlets: Un scriptlet es un bloque de código Java insertado en la página y ejecutado durante el procesamiento de la respuesta. El código introducido se inserta directamente en el método _jspService() del servlet generado para la página. <% código Java %> <% int i, j; for (i=0;i<3;i++) { j=j+1; } %> 8 Introducción a JavaServer Pages Elementos JSP. Directivas: Utilizadas para definir y manipular una serie de atributos dependientes de la página que afectan a todo el JSP. Las directivas existentes son las siguientes: Page Include Taglib Introducción a JavaServer Pages Elementos JSP. Directiva page: Esta directiva se utiliza para definir atributos globales que deben ser aplicados a la pagina JSP completa. La directiva page se puede utilizar varias veces en una misma pagina JSP, aunque solamente se puede especificar el valor de un atributo una única vez. La excepción de esta regla es el atributo import al cual se le pueden asignar diferentes valores. 9 Introducción a JavaServer Pages Elementos JSP. Directiva page: Sintaxis: Donde ATRIBUTOS aparecen en pares: nombre=”valor” Ejemplo: A continuación se presenta una lista de los atributos más utilizados. <%@ page ATRIBUTOS %> <%@ page language=”Java” import=”Java.rmi.*, java.util.*” session=”true” %> Introducción a JavaServer Pages Elementos JSP. Directiva page: language. indica el lenguaje que se utiliza en la página (scriptles). Con la especificación 1.2, sólo está permitido el valor “java”. import. Lista de paquetes o clases, separados por coma, que serán importados para utilizarse dentro del código java. session. Especifica si la página participa en una sesión. Si se inicializa a true, está disponible el objeto implícito sesión. buffer. Especifica el tamaño de un “espacio” para manejar la salida de la página jsp al cliente. autoflush, info, errorPage, isErrorPage,…. 10 Introducción a JavaServer Pages Elementos JSP. Directiva include: Indica al motor JSP que incluya el contenido de un fichero a una página JSP, insertándolo en el lugar de la directiva include JSP. El contenido del fichero incluido, es analizado en el momento de la traducción del fichero JSP y se incluye una copia del mismo dentro del servlet generado. Una vez incluido, si se modifica el fichero incluido no se verá reflejado en el servlet. Introducción a JavaServer Pages Elementos JSP. Directiva include: El tipo de fichero a incluir puede ser un fichero HTML (estático) fichero jsp (dinámico) Sintaxis <%@ include file=”URL fichero” %> 11 Introducción a JavaServer Pages Elementos JSP. Directiva include: Ejemplo: directiva.jsp <HTML> <head> <title> Página de prueba de directivas de compilación </title> </head> <body> <h1> Página de prueba de directivas de compilación </h1> <%@ include file=”/fich1.html” %> <%@ include file=”/fich2.jsp” %> </body> </HTML> Introducción a JavaServer Pages Elementos JSP. Directiva include: Ejemplo: fich1.html <HTML> <head> <title> Hola, Mundo </title> </head> <body> <h1> ¡Hola, Mundo! </h1> </body> </HTML> <%@ page info="Un ejemplo Hola Mundo" import="java.util.Date" %> La fecha de hoy es: <%= new Date().toString() %> fich2.jsp 12 Introducción a JavaServer Pages Elementos JSP. Directiva taglib: Permite extender los marcadores de JSP con etiquetas o marcas generadas por el propio usuario (etiquetas personalizadas). Se hace referencia a una biblioteca de etiquetas que contiene código Java compilado definiendo las etiquetas que van a ser usadas, y que han sido definidas por el usuario. Introducción a JavaServer Pages Elementos JSP. Directiva taglib: Sintaxis Los atributos son: uri: la dirección donde se sitúa el fichero descriptor de la librería de etiquetas (Tag Library Description - TLD) en formato XML. prefix: Define el prefijo de una acción de la librería. <%@ taglib uri=”WEF-INF/tlds/libreria.tld” prefix=”lib” %> 13 Introducción a JavaServer Pages Elementos JSP. Acciones: Son marcas-etiquetas estándar, en formato XML, que afectan al comportamiento en tiempo de ejecución de la página JSP. En la traducción de la página JSP al servlet, la marca se reemplaza por cierto código Java que define a dicha marca. Una marca, por tanto, asocia cierto código Java. Constan de un prefijo y un sufijo además de una serie de atributos. El prefijo es siempre “jsp” en las acciones estándar. Introducción a JavaServer Pages Elementos JSP. Acciones. Sintaxis: Lista de Acciones: <jsp:include> <jsp:forward> <jsp:param> <jsp:useBean> <jsp:setProperty> <jsp:getProperty> <jsp:sufijo atributos/> 14 Introducción a JavaServer Pages Elementos JSP. Acción <jsp:include> Permite incluir un recurso especificado por la URL, en la petición JSP en tiempo de ejecución. Por tanto, cuando se ejecuta el servlet, se invoca al recurso que realiza la operación y devuelve el resultado al propio servlet. Sintaxis <jsp:include page=“URL”/> Introducción a JavaServer Pages Elementos JSP. Acción <jsp:include> ¿Qué diferencia existe entre la directiva y la acción? Directiva: <%@ include file=“Nombre fichero” %> se añade el código al servlet que se genera para la página en tiempo de compilación y se incluye el contenido EXISTENTE EN EL MOMENTO INICIAL. Acción <jsp:include> no se añade código al servlet, sino que se invoca al objeto en tiempo de ejecución y se ejecuta el contenido EXISTENTE EN EL MOMENTO DE LA PETICIÓN. 15 Introducción a JavaServer Pages Elementos JSP. Acción <jsp:param> Se usa como submarca dentro de cualquier otra acción. Sirve para pasar parámetros. Sintaxis <jsp:include page=“URL”> <jsp:param name=“nombre clave” value=“valor”/> </jsp:include> Introducción a JavaServer Pages Elementos JSP. Acción <jsp:forward> Esta marca permite que la petición sea redirigida a otra página JSP, a otro servlet o a otro recurso estático. Muy útil cuando se quiere separar la aplicación en diferentes vistas, dependiendo de la petición interceptada. Sintaxis <jsp:forward page=“URL”/ > 16 Introducción a JavaServer Pages Elementos JSP. Acción <jsp:forward> Ejemplo. Formulario HTML que pide nombre y password y los envía a una página jsp que lo analiza. Página comprobar.html. <HTML><head> <title> Ejemplo de uso del forward </title> </head> <body> <h1> Ejemplo de uso del forward </h1> <form method=“post” action=“comprobar.jsp”> <input type=“text” name=“Nombre”> <br> y clave: <input type=“password” name=“password”> </p> <p><input type=“submit” name=“login”> </form></body></HTML> Introducción a JavaServer Pages Elementos JSP. Acción <jsp:forward> Ejemplo. EL fichero comprobar.jsp: <% if ((request.getParameter(“Nombre”).equals(“Roberto”)) && (request.getParameter(“password”).equals(“xyzzy”))) { %> <jsp:forward page=“saludoforward.jsp”/> <% } else { %> <%@ include file=“comprobar.html”%> <% } %> 17 Introducción a JavaServer Pages Elementos JSP. Acción <jsp:forward> Ejemplo. EL fichero saludoforward.jsp : <HTML> <head> <title> Saludo al cliente </title> </head> <body> <h1> Saludo al cliente</h1> <% out.println(“Bienvenido a la nueva aplicación"); %> </body> </HTML> Introducción a JavaServer Pages Elementos JSP. Acción <jsp:useBean> Esta acción se utiliza para instanciar un JavaBean si no existe, o localizar una instancia ya existente, para su uso desde la página JSP. Los JavaBeans son objetos Java que cumplen ciertas características de diseño en la creación. Se utilizan para reducir al máximo el código Java insertado en una página JSP. Permite separar la lógica de ejecución (en el JavaBean) de la presentación (en el servlet generado) 18 Introducción a JavaServer Pages Elementos JSP. Acción <jsp:useBean> Los JavaBeans se caracterizan porque a sus atributos (llamados propiedades) se acceden (por convenio) a través de los métodos setNombreAtributo y getNombreAtributo Si se usa un JavaBean en una página habrá que definir la clase externa correspondiente, creando los métodos set y get. Dentro del servlet generado se puede llamar a métodos de un JavaBean que se encarguen de realizar ciertas operaciones. Introducción a JavaServer Pages Elementos JSP. Acción <jsp:useBean> Sintaxis Características de los atributos de esta acción: En id se define el nombre asignado al JavaBean (identificador asociado) El ámbito se refiere a dónde puede referenciarse el Javabean. Permite compartir objetos en una sesión “page”,”request”,”session” y “application” Los detalles pueden ser: class=“Nombre de la clase del JavaBean” <jsp:useBean id=“nombre” scope=“nombreámbito” detalles /> 19 Introducción a JavaServer Pages Elementos JSP. Acción <jsp:setProperty> Esta marca se utiliza junto con la marca useBean para asignar valor a las propiedades del Bean En el método _jspService() del servlet generado se invoca al método set de la propiedad deseada. Sintaxis <jsp:setProperty name =“identificador del Bean” detalles/> Introducción a JavaServer Pages Elementos JSP. Acción <jsp:setProperty> Sintaxis. Donde detalles puede ser: property=“*” (se cogen como propiedades y valores todos los parámetros del objeto implícito request) property=“Nombre” (se coge un parámetro con el mismo nombre del objeto implícito request) property=“Nombre” param=“NombreParámetro” (si se desean nombres distintos) property=“Nombre” value=“valor parámetro” (se asignan propiedades arbitrarias con valores concretos) 20 Introducción a JavaServer Pages Elementos JSP. Acción <jsp:getProperty> Se utiliza para obtener el valor de las propiedades de un Bean. Dentro del método _jspService() del servlet generado se accede al valor de una propiedad, lo convierte a string y lo imprime en la salida del cliente (objeto out). Sintaxis <jsp:getProperty> name=“nombre del Bean” property=“Nombre de la propiedad” /> Introducción a JavaServer Pages Elementos JSP. Objetos Implícitos. Los objetos implícitos, son aquellos que están accesibles al motor JSP, por lo que el desarrollador de páginas JSP puede utilizarlos cuando los necesite sin más que invocarlos adecuadamente. Son objetos creador por el motor que no necesitan ser declarados para ser usados, sino que se pueden invocar directamente. Modelan mucha de la funcionalidad básica de cualquier aplicación web: tratamiento de sesiones, procesamiento de un formulario, etc. 21 Introducción a JavaServer Pages Elementos JSP. Objetos Implícitos. out : Proporciona métodos para generar las salidas dentro de scriplets. request: Para obtener los parámetros que vienen de un formulario. response: Ligado con out, ayuda a generar la salida HTML. pageContext: API para acceder a objetos relacionados con los servlets. session: Se utiliza para mantener información sobre el cliente que ha establecido conexión con el servidor a la largo de un cierto tiempo. application: Proporciona un medio de comunicación entre páginas JSP y el servidor sin intervención del objeto request. page: Representa la instancia del servlet generado por la página JSP exception: Solamente está disponible si la excepción no ha sido capturada y se ha utilizado el atributo ERRORPAGE de la directiva page de la página JSP config: Acceso a los parámetros de inicialización del servlet o del motor JSP. Introducción a JavaServer Pages Elementos JSP. Ejemplo de uso de Objetos Implícitos. Aplicación que pide el nombre al usuario y le devuelve un saludo. Se utiliza un fichero HTML con un formulario que pide los datos al cliente y se los pasa a una página JSP que muestra el saludo con éstos datos. El paso de los datos del formulario al JSP se realiza a través de un objeto especial: objeto request. 22 Introducción a JavaServer Pages Elementos JSP. Ejemplo de uso de Objetos Implícitos. <HTML><head> <title> Formulario de petición de nombre </title></head> <body> <h1> Formulario de petición de nombre </h1> <!-- Se envía el formulario al JSP “saludo.jsp” --> <form method="post" action="saludo.jsp"> <p> Por favor, introduce tu nombre: <input type="text" name="nombre"> </p> <p> <input type="submit" value="enviar información"> </form> </body> </HTML> Introducción a JavaServer Pages Elementos JSP. Ejemplo de uso de Objetos Implícitos. <HTML> <head> <title> Saludo al cliente </title> </head> <body> <h1> Saludo al cliente</h1> <%-- Los parámetros que le pasa el cliente en la petición se obtienen del objeto implícito request --%> <% String nombre = request.getParameter(”nombre"); out.println(”Es un placer conocerte, “ + nombre); %> <%-- Al evaluarse el código hay que escribir explícitamente en la salida (objeto implícito out) --%> </body> </HTML> 23 Introducción a JavaServer Pages Ciclo de Vida. Cuando se llama por primera vez al fichero JSP, se genera un servlet con las siguientes operaciones jspInit() Inicializa el servlet generado Sólo se llama en la primera petición jspService(petición,respuesta) Maneja las peticiones. Se invoca en cada petición, incluso en la primera jspDestroy() Invocada por el motor para eliminar el servlet Introducción a JavaServer Pages Acceso a Datos. JDBC, Java Database Connectivity, es una API de Java que se usa para acceder a Bases de Datos, tanto locales como remotas. Existe una independencia del SGBDR: Si cambia el gestor se minimizan los cambios en la aplicación. Lenguaje de consulta SQL. El API JDBC (java.sql) está formada por cinco grupos: Gestión de Drivers. API para manejadores JDBC. Excepciones. API (trabajar con los datos) Utilidades. 24 Introducción a JavaServer Pages Acceso a Datos. Arquitectura. Introducción a JavaServer Pages Acceso a Datos. Arquitectura JDBC Tipo I Puente Jdbc-Odbc Permite conectar con cualquier SGBR que soporte ODBC. Es muy lento 25 Introducción a JavaServer Pages Acceso a Datos. Arquitectura JDBC Tipo II Se conecta directamente con un SGBD, siendo especifico de cada SGBD. Es más rápido. Un manejador diferente para cada sistema gestor. Introducción a JavaServer Pages Acceso a Datos. Arquitectura JDBC Tipo III El manejador JDBC traduce las peticiones JDBC a un protocolo independiente del SGBDR. Se requiere un middleware como traductor. Mayor coste. Menor Velocidad. 26 Introducción a JavaServer Pages Acceso a Datos. Arquitectura JDBC Tipo IV Utiliza el protocolo propietario de red del SGBDR para hablar con él de forma remota. No necesitamos middleware. Mayor Velocidad. Introducción a JavaServer Pages Acceso a Datos. Cuando queremos trabajar con BBDD, debemos tener presente una serie de pasos “básicos”: Abrir la conexión a la base de datos. Ejecutar consultas contra la base de datos. Procesar los resultados. Cerrar la conexión a la base de datos. 27 Introducción a JavaServer Pages Acceso a Datos. Abrir la conexión a la base de datos. Ejecutar consultas contra la base de datos Connection conexion = DriverManager.getConnection("jdbc:odbc:Nombre_ODBC", "usuario","password"); Statement Comando = conexion.createStatement(); ResultSet rs = Comando.executeQuery("select dni, nombre, apellidos, edad from agenda"); Introducción a JavaServer Pages Acceso a Datos. Procesar los resultados. Cerrar conexión. while (rs.next()) { out.println("DNI ->"+ rs.getString("dni")); out.println("NOMBRE ->"+ rs.getString("nombre")); out.println("APELLIDOS ->"+ rs.getString("apellidos")); out.println("EDAD ->"+ rs.getInt("edad")); } rs.close(); Comando.close(); conexion.close(); 28 Introducción a JavaServer Pages Acceso a Datos.Conector JDBC-ODBC. Cómo Crear un Conector vía JDBC-ODBC. El puente JDBC-ODBC no necesita pasos específicos para su instalación, pero ODBC si. Por ejemplo si asumimos que estamos utilizando un máquina con S.O. Windows necesitaremos configurar nuestra conexión mediante ODBC. A continuación se presentan las pantallas necesarias para crear un conector. Introducción a JavaServer Pages Acceso a Datos. Conector JDBC-ODBC. 29 Introducción a JavaServer Pages Acceso a Datos. Conector JDBC-ODBC. Introducción a JavaServer Pages Acceso a Datos. Conector JDBC-ODBC. 30 Introducción a JavaServer Pages Acceso a Datos. Conector JDBC-ODBC. Introducción a JavaServer Pages Acceso a Datos. Conector JDBC-ODBC. 31 Introducción a JavaServer Pages Gestión de sesiones. El protocolo HTTP es un protocolo sin estado. No posee funcionalidad interna para seguir datos de una solicitud a otra. Aunque esto puede proporcionar algunos beneficios en cuanto al rendimiento, también supone un problema en alguna aplicaciones web. Por ejemplo, en aplicaciones tipo: tienda virtual, acceso a un banco, etc. La tecnología JSP proporciona acceso a un objeto implícito session, para almacenar y recuperar valores de una conexión lógica: sesión. Introducción a JavaServer Pages Gestión de sesiones. El objeto session es único para cada usuario concreto. La primera vez que un usuario solicita una página jsp, se crea la sesión, esta sesión está identificada por un ID de sesión único y asociado a ella. Cada vez que el usuario solicita una página jsp, el ID de la sesión se transfiere con la solicitud y, por tanto, se asocia a la sesión adecuada con el usuario. El ID es transferido entre el servlet (transformación página JSP) y el usuario a través de una cookie HTTP. 32 Introducción a JavaServer Pages Gestión de sesiones. Funcionamiento. Navegador JSP #1 Sesión JSP #2 Primera Solicitud Devuelve el ID de sesión dentro de una cookie Crea el objeto de sesión en un sistema de archivos (o memoria) de un servidor de aplicación Obtiene el objeto sesión basado en el ID de sesión que se transfirió Transfiere la Cookie con el ID de sesión Introducción a JavaServer Pages Gestión de sesiones. El objeto session es análogo a la clase HttpSession de la tecnología servlets. Una vez obtenida la sesión, normalmente mediante el objeto implícito, es posible: Escribir, Obtener, y Eliminar atributos del objeto session. 33 Introducción a JavaServer Pages Gestión de sesiones. Por ejemplo, para escribir o dar de alta un atributo (variable de sesión) en la sesión, deberíamos utilizar el método setAttribute de la siguiente manera: <% session.setAttribute(“nombre”,”Roberto”); %> Nombre Variable Valor Variable Introducción a JavaServer Pages Gestión de sesiones. Para recuperar este valor se utiliza el método getAttribute. Observar cómo se asigna el resultado de este método a String. Esto es necesario dado que la sesión, sólo almacena un objeto y devuelve un objeto, sin tener en cuenta el tipo de objeto que esté almacenado. Tenemos que realizar una conversión. <%String SNombre=(String) session.getAttribute(“nombre”); %> 34 Introducción a JavaServer Pages Gestión de sesiones. Para eliminar un atributo se debe utilizar el método removeAttribute. <% session.removeAttribute(“nombre”); %> Introducción a JavaServer Pages Gestión de sesiones. Ejemplo. Como ejemplo, se presentará un sencillo formulario que acepta el nombre de una persona. Enviaremos este formulario a una página JSP que guardará el nombre en la sesión y presentará al usuario mediante dos sencillos hipervínculos a otras páginas JSP. Una vez que el usuario vaya a una de dichas páginas, se recuperará el nombre de la sesión y aparecerá un mensaje personalizado. 35 Introducción a JavaServer Pages Gestión de sesiones. Formulario. <HTML><head> <title> Ejemplo de Sesión </title></head> <body> <h1> Ejemplo de sesión </h1> <form method="post" action=“sesionEje.jsp"> Por favor, introduce tu nombre: <input type="text" name="nombre"> <input type="submit" value="enviar información"> </form> </body> </HTML> Introducción a JavaServer Pages Gestión de sesiones. sesionEje.jsp <HTML> <head> <title> Ejemplo de Sesión </title> </head> <body> <% String val = request.getParameter(“nombre”); if (val != null) session.setAttribute(“Nombre”,val); %> <center> <h1>Ejemplo de Sesión</h1> Donde quieres ir!!! <a href=“sesionEje1.jsp”>Ir a Página 1</a> <a href=“sesionEje2.jsp”>Ir a Página 2</a> </body> </HTML> 36 Introducción a JavaServer Pages Gestión de sesiones. sesionEje1.jsp <HTML><head> <title> Ejemplo de Sesión </title> </head> <body> <center> <h1>Ejemplo de Sesión</h1> Hola, <=%session.getAttribute(“Nombre”)%> Bienvenido a la página 1 </body> </HTML> Introducción a JavaServer Pages Gestión de sesiones. sesionEje2.jsp <HTML><head> <title> Ejemplo de Sesión </title> </head> <body> <center> <h1>Ejemplo de Sesión</h1> Hola, <=%session.getAttribute(“Nombre”)%> Bienvenido a la página 2 </body> </HTML> 37 Introducción a JavaServer Pages Uso de JavaBean. Un JavaBean es una clase Java que sigue un conjunto de guías de estilo para permitir la creación de componentes Java distribuidos. La tecnología JSP soporta el uso de JavaBeans como mecanismo de acceder a objetos remotos. El objetivo básico del uso de los JavaBean, es reducir el código Java que hay en las páginas JSP. Introducción a JavaServer Pages Uso de JavaBean. En el contexto de JSP, un JavaBean será una clase que obedece a las siguientes guías de estilo: Constructor público sin argumentos. Si no se indica ningún constructor explícito, dispone del constructor por defecto. Dispone de propiedades que se pueden consultar con métodos getXXX y/o modificar con métodos setXXX Las propiedades pueden ser controladas por: public TipoPropiedad getNombrePropiedad() public void setNombrePropiedad(TipoPropiedad propiedad) Una propiedad de tipo boolean tiene una convención de nombres diferente para el método “getXXX” -> “isXXX” 38 Introducción a JavaServer Pages Uso de JavaBean. Las acciones son etiquetas especiales que afectan el comportamiento en ejecución de cualquier página JSP. Las acciones estándares son las soportadas por todos los contenedores web. Para manejar JavaBeans se utilizan las siguientes: <jsp: useBean> <jsp: setProperty> <jsp: getProperty> Introducción a JavaServer Pages Uso de JavaBean. La acción useBean. <jsp:useBean id=“name” scope=“page”|”request”|”session”|”application” class=“Nombre de la Clase” /> 39 Introducción a JavaServer Pages Uso de JavaBean. Acciones setProperty y getProperty. Esta acciones estándar de JSP permiten obtener y modificar los valores de los atributos definidos en el JavaBean. A continuación se presenta un ejemplo de utilización de todas las acciones relacionadas con el uso de un JavaBean. Introducción a JavaServer Pages Uso de JavaBean. Ejemplo: MensajeBean package ejemplos; public class MensajeBean { private String mensaje = "Valor no establecido"; public String getMensaje() { return (mensaje); } public void setMensaje(String mensaje) { this.mensaje = mensaje; } } 40 Introducción a JavaServer Pages Uso de JavaBean. Ejemplo: Bean.jsp <html> <head> <title>Ejemplo de beans </title></head> <body> <center><h1>Ejemplo de JavaBeans</h1></center> <jsp:useBean id="mensaje" class="ejemplos.MensajeBean"/> <% mensaje.setMensaje("Hola mundo desde un Bean"); %> <center> <h1>Mensaje: <i> <%=mensaje.getMensaje(); %> <% mensaje.setMensaje("Hola otra vez desde el Bean"); %> </i>Mensaje: <i> <%=mensaje.getMensaje(); %> </i></h1></center> </body> </html> Introducción a JavaServer Pages Uso de JavaBean. Ejemplo: Bean.jsp <html> <head> <title>Ejemplo de beans </title></head> <body> <center><h1>Ejemplo de JavaBeans</h1></center> <jsp:useBean id="mensaje" class="ejemplos.MensajeBean"/> <% mensaje.setMensaje("Hola mundo desde un Bean"); %> <center> <h1>Mensaje: <i> <%=mensaje.getMensaje(); %> <% mensaje.setMensaje("Hola otra vez desde el Bean"); %> </i>Mensaje: <i> <%=mensaje.getMensaje(); %> </i></h1></center> </body> </html> 41 Introducción a JavaServer Pages Uso de Librería de Etiquetas. En JSP, las acciones eran elementos que pueden utilizarse para manejar objetos Java. Existen acciones estándar, definidas por la especificación JavaServer Pages, o acciones personalizadas, creadas por el programador. Una acción personalizada se invoca en una página JSP mediante una etiqueta personalizada. Una librería de etiquetas es una colección de etiquetas personalizadas. Introducción a JavaServer Pages Uso de Librería de Etiquetas. Una etiqueta JSP es una forma simple de abstracción del código Java fuera de la página JSP. Posibilitando que no haya código Java en una página JSP. 42 Introducción a JavaServer Pages Uso de Librería de Etiquetas. Reducen la presencia de Scriptlets en las páginas JSP Las etiquetas personalizadas tienen una sintaxis muy simple, mediante la notación XML. Mejoran la calidad de los desarrollos. Encapsular funciones simples o complejas que facilita la legibilidad de las páginas JSP. Facilitan la reutilización de código. Introducción a JavaServer Pages Uso de Librería de Etiquetas. Para que una página JSP pueda utilizar una librería de etiquetas, ésta debe estar compuesta por dos tipos de componentes: El fichero descriptor de la librería de etiquetas. Los controladores o manejadores de las etiquetas. 43 Introducción a JavaServer Pages Uso de Librería de Etiquetas. El fichero descriptor de la librería de etiquetas, o fichero Tag Library Descriptor (TDL), es un documento XML que describe la librería. Contiene información acerca de la librería en su conjunto y acerca de cada una de las etiquetas que la componen en particular. Este fichero es utilizado por el contenedor de JSP´s a la hora de validar la utilización de las etiquetas de la librería. Introducción a JavaServer Pages Uso de Librería de Etiquetas. El fichero TDL contiene información de cabecera previa a los elementos utilizados para describir la librería. Entre esta información se encuentra: <taglib> La librería de etiquetas en sí misma <tlibversion> Versión de la librería de etiquetas <jspversion> Versión de la especificación JSP soportada por la librería de etiquetas. Por defecto es 1.2 <shortname> Nombre corto que suele utilizarse como prefijo en la directiva taglib <uri> Opcional que identifica la librería de etiquetas. <info> Descripción opcional de la librería de etiquetas. 44 Introducción a JavaServer Pages Uso de Librería de Etiquetas. Tras la cabecera se encuentra la descripción de cada una de las etiquetas que la integran. De los elementos que describen a estas etiquetas, solamente uno de ellos es obligatorio: <tagclass> A continuación se muestra un ejemplo de fichero TLD, donde podemos ver lo comentado hasta ahora. Introducción a JavaServer Pages Uso de Librería de Etiquetas. Ejemplo de fichero TLD. <?xml version="1.0" encoding="ISO-8859-1" ?> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.2</jspversion> <shortname>ejemplo</shortname> <info> Ejemplo de Librería de Etiquetas </info> <!-- Etiqueta simple de saludo --> <tag> <name>hola</name> <tagclass>ejemplos.HolaTag</tagclass> <bodycontent>empty</bodycontent> <info>Etiqueta simple de saludo</info> <!-- nombre personalizado --> <attribute> <name>nombre</name> </attribute> </tag> </taglib 45 Introducción a JavaServer Pages Uso de Librería de Etiquetas. Para utilizar la librería de etiquetas descrita en el archivo TDL en una página JSP, es necesario importar esa librería a través de la directiva taglib, cuya sintaxis es la siguiente: Donde URI es la dirección que indica la localización del fichero TDL y prefijo es el identificador con el que se reconocen las etiquetas pertenecientes a esa librería en la página JSP. <%@ taglib uri=“uri” prefix=“prefijo”%> Introducción a JavaServer Pages Uso de Librería de Etiquetas. Cada etiqueta personalizada integrante de una librería de etiquetas debe estar definida en una clase controladora. Cuando el motor JSP se encuentra con el elemento de comienzo de una etiqueta personalizada, inicializa el controlador de la etiqueta y luego invoca al método doStartTag() de esa etiqueta. Cuando se encuentra la etiqueta de cierre, se invoca al método doEndTag() de la etiqueta personalizada. 46 Laboratorio de Informática Distribuida Sesión III. JavaServer Pages Apuntes/Sesion4_Aplica_MVC.pdf Ejemplo de Aplicación Web con la implementación del patrón de diseño MVC (MODELO VISTA CONTROLADOR) Índice 1. Página HTML. (Inicio Aplicación) 2. Servlet – Controlador. 3. Clase Acceso a Datos. – Modelo 4. Página JSP – Vista. 5. Configuración Servidor: Fichero web.xml 1. Página HTML. (Inicio Aplicación) ACB.html <html> <head> <title>Votación mejor jugador liga ACB</title> </head> <body> <center><H1>Votación al mejor jugador de la liga ACB 2005</H1></center><hr> <form action="/Acb/Acb" method="POST"> <p align="left">Nombre del Visitante: <input type="text" size="20" name="txtNombre"> eMail: <input type="text" size="20" name="txtMail"></p> ESTUDIANTES: <p align="left"><input type="radio" name="R1" value="Azofra">Azofra, Nacho</p> <p align="left"><input type="radio" name="R1" value="Loncar">Loncar, Nikola</p> <p align="left"><input type="radio" name="R1" value="Jimenez">Jiménez, Carlos</p> REAL MADRID: <p align="left"><input type="radio" name="R1" value="Bennet">Bennet, Elmer</p> <p align="left"><input type="radio" name="R1" value="Herreros">Herreros, Alberto</p> <p align="left"><input type="radio" name="R1" value="Reyes">Reyes, Felipe</p> <p align="left"><input type="radio" name="R1" value="Otros">Otro <input type="text" size="20" name="txtOtros"></p> <p align="left"> <input type="submit" name="B1" value="Votar"> <input type="reset" name="B2" value="Reset"></p> </form> </body> </html> 2. Servlet – Controlador. (Acb.java) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; import java.sql.*; public class Acb extends HttpServlet { private ModeloDatos bd; public void init(ServletConfig cfg) throws ServletException { bd=new ModeloDatos(); bd.abrirConexion(); } public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession s = req.getSession(true); String nombreP=(String)req.getParameter("txtNombre"); String nombre=(String)req.getParameter("R1"); if (nombre.equals("Otros")) nombre=(String)req.getParameter("txtOtros"); if (bd.existeJugador(nombre)){ bd.actualizarJugador(nombre); } else bd.insertarJugador(nombre); s.putValue("nombreCliente", nombreP); // Llamada a la página jsp que nos da las gracias res.sendRedirect(res.encodeRedirectURL("/Acb/TablaVotos.jsp")); } public void destroy() { bd.cerrarConexion(); super.destroy(); } } 3. Clase Acceso a Datos. – Modelo. (ModeloDatos.java) import java.util.*; import java.sql.*; public class ModeloDatos { private Connection con; private Statement set; private ResultSet rs; public void abrirConexion() { String sURL="jdbc:odbc:mvc"; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection(sURL,"",""); System.out.println("Se ha conectado"); } catch(Exception e){ System.out.println("No se ha conectado");} } public boolean existeJugador(String nombre) { boolean existe = false; String cad; try { set = con.createStatement(); rs = set.executeQuery("SELECT * FROM Jugadores"); while (rs.next()) { cad = rs.getString("Nombre"); cad = cad.trim(); if (cad.compareTo(nombre.trim())==0) existe = true; } rs.close(); set.close(); }catch(Exception e){ System.out.println("No lee de la tabla"); } return(existe); } public void actualizarJugador(String nombre) { try { set = con.createStatement(); set.executeUpdate( "UPDATE Jugadores SET votos=votos+1 WHERE nombre " + " LIKE '%" + nombre + "%'"); rs.close(); set.close(); }catch(Exception e){ System.out.println("No modifica la tabla"); } } public void insertarJugador(String nombre) { try { set = con.createStatement(); set.executeUpdate("INSERT INTO Jugadores " + " (nombre,votos) VALUES ('" + nombre + "',1)"); rs.close(); set.close(); }catch(Exception e){ System.out.println("No inserta en la tabla"); } } public void cerrarConexion() { try { con.close(); } catch (Exception e){} } } 4. Página JSP – Vista. <html> <head><title>Votación mejor jugador liga ACB</title></head> <body> <font size=10> <h1>Votación al mejor jugador de la liga ACB 2005</h1> <hr> <% String nombreP =(String) session.getValue("nombreCliente"); %> <br><h3>Muchas gracias <%=nombreP%> por su voto</h3> </font> <br> <br> <a href="/Acb/Acb.html"> Ir al comienzo</a> </body> </html> 5. Configuración Servidor: Fichero web.xml <?xml version="1.0" encoding="ISO-8859-1"?> <web-app> <description> Curso Zaragoza. </description> <display-name>Ejemplos</display-name> <servlet> <servlet-name>Acb</servlet-name> <servlet-class> Acb</servlet-class> </servlet> <servlet-mapping> <servlet-name> Acb</servlet-name> <url-pattern>/Acb</url-pattern> </servlet-mapping> </web-app> Apuntes/Sesion4_MVC.pdf 1 Laboratorio de Informática Distribuida Sesión IV. Patrón de Diseño Modelo- Vista-Controlador. Roberto Barchino Plata Patrón de diseño Modelo-Vista-Controlador Introducción A la hora de describir las arquitecturas que se pueden utilizar en el desarrollo de aplicaciones web, creadas con intervención de servlets, JavaBeans, páginas JSP, Librerías de etiquetas, etc. dos son las estructuras más utilizadas: La primera es el modelo clásico Cliente / Servidor, donde todas las peticiones realizadas por el cliente llegan directamente a la página JSP o al servlet. 2 Patrón de diseño Modelo-Vista-Controlador Introducción La segunda estructura es la que utiliza n-capas, donde la aplicación se dividen en unidades funcionales. Cada capa, sabe perfectamente que hacer en cada momento. Una forma de implementar esta arquitectura es el modelo-vista- controlador. Patrón de diseño Modelo-Vista-Controlador ¿Qué es el patrón Modelo-Vista-Controlador? Un Patrón es una solución eficiente sofware de problemas habituales en el diseño de aplicaciones informáticas. Existen distintos patrones de diseño, cada una ofrecerá una solución para un determinado problema. IDEA: Conocer que existen y saber utilizarlos de manera adecuada. 3 Patrón de diseño Modelo-Vista-Controlador ¿Qué es el patrón Modelo-Vista-Controlador? El principal objetivo, por tanto, del patrón de diseño Modelo Vista Controlador (MVC) es aislar- separar los datos de la aplicación, como el estado (modelo) de la misma, del mecanismo utilizado para representar (vista) dicho estado. Así, como para modularizar esta vista y modelar la transición entre estados del modelo (controlador). En el desarrollo de aplicaciones web se utiliza mucho el patrón MVC, por ejemplo los structs de jakarta. Patrón de diseño Modelo-Vista-Controlador ¿Qué es el patrón Modelo-Vista-Controlador? Las aplicaciones MVC se dividen, por tanto, en tres grandes categorías funcionales: Vista: La representación de los datos a visualizar por parte del cliente o usuario del sistema. Controlador: el que atenderá las peticiones y tomará las decisiones adecuadas de la aplicación. Modelo: la lógica de negocio o servicio y los datos asociados con la aplicación. 4 Patrón de diseño Modelo-Vista-Controlador Arquitectura MVC: Laboratorio de Informática Distribuida Sesión IV. Patrón de Diseño Modelo- Vista-Controlador. Roberto Barchino Plata
Compartir