4. DESARROLLO WEB CON JAVA JSP & SERVLETS



Documentos relacionados
Curso Desarrollo Java Web con JSP, Servlets y el MVC

Curso de JavaServer Faces

Agosto. Un primer JSP. Guía rápida. [ h t t p : / / w w w. o p e n b o x e r m b. c o m / j a v a. p h p ]

Introducción al desarrollo web (idesweb)

Librería Estándar de Etiquetas JSP (JSTL JSP Standard Tag Library)

Mario Muñoz Organero & Norberto Fernández * Departamento de Ingeniería Telemática

Laboratorio de Aplicaciones Telemáticas

Capitulo III. Diseño del Sistema.

JSP. MSc. Daniel Alejandro Yucra Sotomayor Pag Web Services. Laboratorio Nro. 11. Web Services con JAX-WS con MySQL. I. Competencia General:

FUNCIONAMIENTO: FUNCIONALIDAD

Fundamentos de programación Estudia las estructuras de control y cómo definir funciones en JavaScript.

Desarrollo de Aplicaciones Web con JAVA: J2EE y Struts

TEMARIO. 4-Servlet Definición de servlet El Web Container y el ciclo de vida de los servlets El ciclo request- response.

Índice: Tema Aplicaciones basadas en Sesiones

Conexión de Mysql con NetBeans

Productos para desarrollar aplicaciones web: ASP, CFM, JSP y PHP

Programación páginas web con ASP.NET 3.5 (C#)

PROGRAMACIÓN PÁGINAS WEB CON PHP

Formato para prácticas de laboratorio

Ficha Técnica. Categoría. Contenido del Pack. Sinopsis. Programación. - 2 Manual Teórico - 1 Cuaderno de Ejercicios - 1 CDROM

Ejercicios de validación e internacionalización

Elementos sintácticos de una JSP.

EXTENSIÓN DE UML PARA APLICACIONES WEB

Sistemas de Información 12/13 Ejercicios Tecnologías Web

aplicaciones web: ASP, CFM, JSP y PHP

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

Curso de HTML5 y CSS3

Diplomado Java Web Programming with Servlets, JSP, JSF & Ajax

La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la

Requisitos. Universidad ORT Arquitectura de Software

Escribir código HTML en los servlets es tedioso. que hay que utilizar las instrucciones print, println, etc. Es decir, HTML está dentro de java.

Cada vez que la misma computadora solicita una página pg con un browser, junto con la solicitud el browser envía la cookie al servidor.

Introducción n a Java EE: JSP

Centro de Capacitación en Tecnologías de la Información. Desarrollo de. aplicaciones web con

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Formatos para prácticas de laboratorio

XPERTO EN DISEÑO DE PÁGINAS WEB

5.3.2 Java Server Faces (JSF)

ISJu: Técnicas de Programación Cartilla Teórica-Práctica Instalación del "Eclipse IDE for Java EE Developers" y el servidor "Apache Tomcat"

Lección 1 Introducción a Struts. uacosta@globalmentoring.com.mx

Capítulo III. Análisis y diseño.

CAPÍTULO 14. DESARROLLO

JSP Básico. Índice. 2 Traducción de los JSP a servlets Acciones Introducción a JSP... 2

Arquitectura J2EE para aplicaciones web. Aplicaciones web con JSP. Arquitectura J2EE: Capa de Acceso Web. Arquitectura J2EE: Capa Cliente

Diplomado Java. Descripción. Objetivo. A quien está dirigido. Requisitos. Beneficios

La plantilla propone aprovechar esta estructura en común y sólo modificar el contenido del área del documento que sea diferente.

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

Cursos PROGRAMACIÓN DE APLICACIONES CON JAVA

DESARROLLO WEB EN ENTORNO CLIENTE

Objetivo de aprendizaje del tema

CURSO DE ESPECIALISTA EN DESARROLLO DE APLICACIONES WEB

Programación páginas web. Servidor (PHP)

Contiene código HTML normal junto elementos especiales de JSP. Internamente, el servidor de aplicaciones las compilará a un servlet

FRAMEWORK SPRING EN UNA APLICACIÓN WEB

Java EE JavaServer Pages (JSP)

CATÁLOGO DE FORMACIÓN

Curso de Java POO: Programación orientada a objetos

arquitectura que maneja. Encontraremos también los diferentes servidores que

GUÍA Nro. 1 TECNOLOGÍA DE INTERNET. TIII PIII

Controles en ASP.NET

Spring. Sesión 7: Seguridad con Spring Security. Experto Universitario Java Enterprise

TECNOLOGÍAS ASOCIADAS A LAS APLICACIONES WEB

Figura 7-1 Enlace para instalar el servidor web Apache Jakarta Tomcat

envía al browser. El browser despliega el archivo.

JAVA EE 5. Arquitectura, conceptos y ejemplos.

Laboratorio de Aplicaciones Telemáticas (Curso 2009/2010)

JavaScript como Orientación a Objetos

DEPARTAMENTO: Informática. MATERIA: Programación. NIVEL: 1º Desarrollo de Aplicaciones Multiplataforma

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE

RESUMEN INFORMATIVO PROGRAMACIÓN DIDÁCTICA CURSO 2013/2014

Descripción del tutorial. Contenidos.

Especificación WebService para:

1

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

PLAN FORMATIVO MODALIDAD I

Sesiones en PHP. Área de Ingeniería Telemática

Arquitectura. 1.- Aplicaciones Web. Definición. Arquitectura clásica. Contenidos. 1.- Aplicaciones Web

Seguridad no intrusiva con Acegi Security System for Spring

HTML. HyperText Markup Language (Lenguaje de Marcas de Hipertexto)

DIPLOMATURA DESARROLLO DE APLICACIONES JAVA

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

Este tipo de situaciones son solventadas a partir de las variables de sesión.

FOROS. Manual de Usuario

Curso PHP Módulo 1 R-Luis

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

Novedades. Introducción. Potencia

ESTÁNDAR DE CODIFICACIÓN JEE CHECKLIST

Arquitectura de Aplicaciones

ORGANIZACIÓN MUNDIAL DE LA PROPIEDAD INTELECTUAL GINEBRA COMITÉ PERMANENTE DE TECNOLOGÍAS DE LA INFORMACIÓN

ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE

Lógica en páginas JSP (I)

Integración de Magento & Dynamics NAV

Ejemplos básicos de webmathematica para profesores

Tema 4: Tecnologías Web Java

JAVA ENTERPRISE EDITION (J2EE) ARQUITECTURA TECNOLOGÍAS (1/2) (L1)

Apuntes de ACCESS. Apuntes de Access. Campos de Búsqueda:


Transcripción:

4. DESARROLLO WEB CON JAVA JSP & SERVLETS La programación de aplicaciones web sobre la especificación de JSP y Servlets es un subconjunto de la plataforma Java EE. Existen muchas formas de estructurar una aplicación web en función de los elementos y patrones de diseño empleados y la complejidad del propio desarrollo (Fuente: INTEGRATING SERVLETS AND JSP: THE MODEL VIEW CONTROLLER (MVC) ARCHITECTURE). Aplicaciones sencillas o equipo de desarrollo pequeño Aplicaciones complejas o equipo de desarrollo grande Invocar a clases directamente desde el código Java: el código Java estará embebido en el JSP. En este caso se programa la lógica de negocio en el JSP. Nada recomendable. Invocar a clases Java de forma indirecta: se embeberá el código necesario para invocar a las clases que formen parte de la lógica de negocio. Utilización de beans (MVC 1): las clases que formen parte de la lógica de negocio serán implementadas como beans. Utilización de una arquitectura MVC 2: un Servlet gestionará las peticiones, invocará a la lógica de negocio, accederá a los datos y guardará el resultado en beans. El Servlet almacenará los resultados en la request y la redirigirá al JSP para mostrar los resultados. La página JSP utiliza beans. Utilización de JSP EL (Expression Language): utilización de un lenguaje sencillo y abreviado para manejar los resultados generados por el controlador. Utilización de etiquetas personalizadas: se utilizará un gestor de etiquetas basadas en XML. Se requiere de un framework que gestione estas etiquetas de funcionalidad añadida. QUÉ ES UN BEAN Un bean es un objeto convencional Java, el cual tiene como propósito encapsular a otros (de ahí su nombre) o no. Para que una clase pueda ser tratada como bean debe cumplir con una serie de requisitos básicos: Debe tener un constructor sin argumentos. Sus atributos (propiedades) deben ser accesibles mediante métodos getter y setters públicos. Debe ser serializable. 4.1. SERVLETS Programas Java que se codifican en forma de clases. Los servlets heredan de la clase HttpServlet y permiten gestionar elementos HTTP mediante las clases: HttpServletRequest: recibe la petición (ámbito de request). HttpServletResponse: genera la respuesta. HttpSession: permite crear una sesión común a un conjunto de request (ámbito de sesión). ServletContext: gestiona la información común a todas las peticiones realizadas sobre la aplicación (ámbito de aplicación). Se obtiene a partir del método getservletcontext() de la clase HttpServlet.

4.2. JSP http://www.apl.jhu.edu/~hall/java/servlet-tutorial/ 4.2.1. SCRIPTLETS Páginas HTML con código Java embebido de dos formas: Scriptlets: código Java multi-mensaje entre los símbolos <% %>. Cada mensaje debe ir separado por punto y coma. Expresiones: un mensaje Java que devuelve un resultado. No finaliza con punto y coma y se escribe entre los símbolos <%= %>. Los elementos HTTP definidos en los servlets están predefinidos en los JSP, como: request response sesión application Estos objetos se podrán invocar directamente sin necesidad de definirlos, como se puede ver en el siguiente ejemplo: <%@page contenttype="text/html" pageencoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body> <h1>bienvenido</h2> La hora actual es: <%= new java.util.date() %> <% Persona p = new Persona(request.getParameter( nombre )); session.setattribute( usuario, p); out.println(p.getnombre()); %> </body> </html> Código 11. Ejemplo de JSP tratando objetos. Se pueden manipular las diferentes peticiones HTTP mediante el método getheader(string nombrecabecera). <% if(request.getheader("user-agent").contains("iphone")) response.sendredirect("/m/index.jsp"); %> Código 12. Ejemplo de JSP manipulando cabeceras HTTP.

4.2.2. JSP TAGS Otra forma más estructurada y elegante de implementar el código Java en la página JSP es mediante la utilización de etiquetas JSP, al estilo HTML. Poseen una funcionalidad muy reducida y se utilizan sobre todo para la creación y utilización de beans. También, se puede especificar de forma añadida el ámbito del bean con el parámetro scope. <jsp:usebean id="hora1" class="service.serviciohora" scope="session" /> <jsp:setproperty name="hora1" property="hora" value="12" /> <jsp:getproperty name="hora1" property="hora" /> Código 13. Utilización de un Bean mediante JSP Tags. En el caso de que los valores a asignar a las propiedades del bean sean parámetros de una petición POST/GET, se utilizará param para establecer un parámetro determinado o property= * para asignar todos los parámetros a las propiedades. En este último caso, el nombre de los parámetros deberá coincidir con el nombre de la propiedad. <jsp:usebean id="hora1" class="service.serviciohora" scope="session" /> <jsp:setproperty name="hora1" property="hora" param="time" /> <jsp:setproperty name="hora1" property="*" /> Código 14. Recuperación de parámetros y creación de un Bean mediante JSP tags. 4.3. ARQUITECTURA MVC Fuente: http://www.oracle.com/technetwork/articles/javase/servlets-jsp-140445.html 4.3.1. MVC 1

4.3.2. MVC 2 4.4. SESIONES En una aplicación web existen tres contextos diferentes de trabajo. Por un lado está el contexto de la petición web, como una request que realiza un usuario contra un recurso del servidor web. Cada petición del usuario tiene su propio de espacio de memoria independiente. Si se desea compartir un espacio de memoria entre todas las peticiones realizadas por un mismo usuario, se debe trabajar con el concepto de sesión (session). Esto es muy útil, por ejemplo, para comprobar si el usuario está accediendo a un recurso de la aplicación y previamente se ha autenticado. Por último, se puede compartir información entre todos los usuarios de la aplicación en el espacio de memoria de aplicación (application). Por defecto, cuando se crea una sesión para un usuario se genera un identificador único para él en forma de Cookie en su navegador. El nombre de esta Cookie es JSESSIONID. El trabajar con sesiones, conlleva a que el usuario tenga habilitada la aceptación de cookies en su navegador. Por este motivo existe otra técnica en la que se envía el identificador de sesión JSESSIONID como un parámetro más de la URL. Es importante destacar que esta práctica es negativa desde el punto de vista de SEO (distintas URLs, muestran el mismo contenido) y desde el punto de vista de seguridad, por la visibilidad del identificador de la sesión. Aplicación: o Contenido del fichero web.xml: <context-param> <param-name>bd</param-name> <param-value>personas</param-value> </context-param> o Código Java de acceso a los parámetros: this.getservletcontext().getinitparameter("bd");

Sesión o Código Java de creación de la sesión: HttpSession sesion = request.getsession(); sesion.setattribute("persona", p1); o Código Java de acceso a los atributos creados sobre la sesión: HttpSession sesion = request.getsession(); if(sesion.getattribute("persona")!=null) Request o Código Java de acceso a un atributo de la request: String nombre = request.getparameter( nombre )); Operaciones que se pueden realizar con sesiones: boolean isnew(): devuelve true si el cliente no tenía una previamente y el servidor la ha creado. void setmaxinactiveinterval(int segundos): establece el tiempo máximo de inactividad en la sesión para inhabilitar la sesión. invalidate(): inhabilita la sesión. 4.5. COOKIES Las cookies permiten persistir información en el lado del cliente, vinculando un servidor con el ordenador, y nunca con el usuario. Generalmente, se utilizan para mejorar la experiencia de navegación del usuario. La creación de la cookie se realiza en el servidor gracias a la clase Cookie, enviándosela al navegador a través de la response, como se muestra en el código siguiente. Cookie c = new Cookie("usuario", request.getparameter("usuario")); c.setcomment("control de acceso"); c.setmaxage(60*60*24); //expresado en segundos response.addcookie(c); Código 15. Servlet creando una cookie.

El navegador almacenará la cookie en el navegador. Y se podrá recuperar posteriormente para procesarla. <% String valorusuario = "Introduzca su usuario"; Cookie [] cookies=request.getcookies(); if(cookies!=null) { for(int i=0;i<cookies.length;i++) { Cookie c = cookies[i]; if(c.getname().equals("usuario")) valorusuario = c.getvalue(); } } %> <h1>bienvenido</h1> <form action="/ejemplomvc/validar" method="post"> Usuario: <input type="text" name="usuario" value="<%=valorusuario%>"> <input type="submit" value="acceder"> </form> Código 16. Ejemplo de JSP recuperando las cookies del cliente. A continuación se describen algunas características de las cookies y cómo se implementan en Java: Cookies no manipulables desde Javascript en el cliente: estás cookies mitigan los ataques del tipo XSS. c.sethttponly(true); Cookies persitentes: permanecen vivas durante el tiempo especificado. c.setmaxage(integer.max_value); Cookies de sesión: cuando se cierre el navegador, se elimnará. c.setmaxage(-1); Cookies seguras: se enviarán sólo mediante HTTPS. c.setsecure(true);

A continuación se muestra un ejemplo de cookies leídas mediante Javascript, definidas como HttpOnly y sin definir esta propiedad. Código cliente <script> function leercookies() { alert("cookies leidas: " + document.cookie.split(";")); } </script> <small><a href="javascript:leercookies();">leer cookies mediante Javascript</a></small> Código de generación de la Cookie Cookie c = new Cookie("pag", request.getparameter("pag")); c.setcomment("aaaaaaaaaa"); c.setmaxage(integer.max_value); //expresado en segundos response.addcookie(c); Resultado sin definir la Cookie como HttpOnly Código de generación de la Cookie Cookie c = new Cookie("pag", request.getparameter("pag")); c.setcomment("aaaaaaaaaa"); c.sethttponly(true); c.setmaxage(integer.max_value); //expresado en segundos response.addcookie(c);

Resultado definiendo la Cookie como HttpOnly

4.6. EXPRESSION LANGUAGE (EL) Lenguaje que simplifica el proceso de recuperación de objetos almacenados en los elementos básicos de una aplicación web como son la request, session, cookies, etc. EL está basado en una notación sencilla identificando los objetos entre los caracteres ${.}. La ventaja del lenguaje EL es poder utilizar cualquier objeto depositado como atributo en la request con la expresión ${objeto.propiedad}, sin necesidad de referenciar a este ámbito, ni realizar downcastings. EL está incorporado por defecto en la especificación JSP 2.0. Así, el acceso a los objetos depositados en la request (típica acción de un patrón MVC) se accederá directamente. Para el resto de elementos (parámetros, cookies, session, etc.) se utilizarán objetos predefinidos. JSP estándar JSP con EL <% ArrayList<Persona> lista = (ArrayList<Persona>) request.getattribute("listaresultado"); %> ${listaresultado} <% Persona p = (Persona) request.getattribute ("persona"); String nombre = p.getnombre(); %> ${persona.nombre} <%= request.getparameter("nombre") %> ${param["nombre"]} Código 17. Comparación entre JSP estándar y EL. Objetos predefinidos: param paramvalues header headervalues cookie initparam Objetos predefindos en función del ámbito que posean: pagescope requestscope sessionscope applicationscope ${sessionscope.validado} ${cookie.usuario.value} ${header['user-agent']} Código 18. Ejemplo de acceso a elementos Java Web mediante el lenguaje EL.

4.7. JSTL http://download.oracle.com/docs/cd/e17802_01/products/products/jsp/jstl/1.1/docs/tlddocs/ http://www.labcom.upcomillas.es/isw2/docs/jstl.pdf La librería JSTL está definida en la especificación Java EE. Define un conjunto de etiquetas estandarizadas que simplifica el desarrollo de aplicaciones MVC. Las etiquetas JSTL se organizan en 4 librerías: core: funciones script básicas como loops, condicionales, y entrada/salida. xml: procesamiento de xml fmt: la internacionalización y formato de valores como de moneda y fechas. sql: acceso a base de datos. <%@page contenttype="text/html" pageencoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>ejemplo JSTL</title> <link rel="stylesheet" type="text/css" href="r/estilos.css" /> </head> <body> <p class="titulo">información de las personas de la Base de Datos:</p> <hr> <table border="1" width="200"> <tr> <th>nombre</th> <th>edad</th> <th>dni</th> </tr> </html> <c:foreach var="persona" items="${personas}"> <tr> <td>${persona.nombre}</td> <td>${persona.edad}</td> <td>${persona.dni}</td> </tr> </c:foreach> </table> <br> <a href="/isw2ejemplomvc/index.jsp">nueva búsqueda</a> </body> Código 19. Ejemplo de vista JSTL. <c:foreach var="persona" items="${personas}" varstatus= contador > <tr> <td>${contador.count}</td> <td>${contador.first}</td> <td>${contador.last}</td> </tr> </c:foreach> Código 20. Empleo del contador de estado varstatus en un bucle foreach.

<c:if test="${sessionscope.validado!=null}"> <h1>bienvenido, ${sessionscope.nombre}.</h1> <h2>tu cookie de usuario es: ${cookie.usuario.value}</h2> <h2>tu información del navegador: ${header['user-agent']}</h2> </c:if> Código 21. Ejemplo de JSTL manipulando distintos tipos de variables: sesión, cookies y cabeceras HTTP.