Академический Документы
Профессиональный Документы
Культура Документы
Invocar a clases directamente desde el cdigo Java: el cdigo Java estar embebido en el JSP. En este caso se programa la lgica de negocio en el JSP. Nada recomendable. Invocar a clases Java de forma indirecta: se embeber el cdigo necesario para invocar a las clases que formen parte de la lgica de negocio. Utilizacin de beans (MVC 1): las clases que formen parte de la lgica de negocio sern implementadas como beans. Utilizacin de una arquitectura MVC 2: un Servlet gestionar las peticiones, invocar a la lgica 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 pgina JSP utiliza beans. Utilizacin de JSP EL (Expression Language): utilizacin de un lenguaje sencillo y abreviado para manejar los resultados generados por el controlador. Utilizacin de etiquetas personalizadas: se utilizar un gestor de etiquetas basadas en XML. Se requiere de un framework que gestione estas etiquetas de funcionalidad aadida.
QU ES UN BEAN
Un bean es un objeto convencional Java, el cual tiene como propsito 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 bsicos: Debe tener un constructor sin argumentos. Sus atributos (propiedades) deben ser accesibles mediante mtodos getter y setters pblicos. 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 peticin (mbito de request). HttpServletResponse: genera la respuesta. HttpSession: permite crear una sesin comn a un conjunto de request (mbito de sesin). ServletContext: gestiona la informacin comn a todas las peticiones realizadas sobre la aplicacin (mbito de aplicacin). Se obtiene a partir del mtodo getServletContext() de la clase HttpServlet.
4.2. JSP
http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/
4.2.1. SCRIPTLETS
Pginas HTML con cdigo Java embebido de dos formas: Scriptlets: cdigo Java multi-mensaje entre los smbolos <% %>. 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 smbolos <%= %>.
Los elementos HTTP definidos en los servlets estn predefinidos en los JSP, como: request response sesin application
Estos objetos se podrn 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>
Cdigo 11. Ejemplo de JSP tratando objetos.
Se pueden manipular las diferentes peticiones HTTP mediante el mtodo getHeader(String nombreCabecera).
<% if(request.getHeader("user-agent").contains("iPhone")) response.sendRedirect("/m/index.jsp"); %>
Cdigo 12. Ejemplo de JSP manipulando cabeceras HTTP.
<jsp:useBean id="hora1" class="service.ServicioHora" scope="session" /> <jsp:setProperty name="hora1" property="hora" value="12" /> <jsp:getProperty name="hora1" property="hora" />
En el caso de que los valores a asignar a las propiedades del bean sean parmetros de una peticin POST/GET, se utilizar param para establecer un parmetro determinado o property=* para asignar todos los parmetros a las propiedades. En este ltimo caso, el nombre de los parmetros 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="*" />
4.3.1. MVC 1
4.3.2. MVC 2
4.4. SESIONES
En una aplicacin web existen tres contextos diferentes de trabajo. Por un lado est el contexto de la peticin web, como una request que realiza un usuario contra un recurso del servidor web. Cada peticin 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 sesin (session). Esto es muy til, por ejemplo, para comprobar si el usuario est accediendo a un recurso de la aplicacin y previamente se ha autenticado. Por ltimo, se puede compartir informacin entre todos los usuarios de la aplicacin en el espacio de memoria de aplicacin (application). Por defecto, cuando se crea una sesin 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 aceptacin de cookies en su navegador. Por este motivo existe otra tcnica en la que se enva el identificador de sesin JSESSIONID como un parmetro ms de la URL.
Es importante destacar que esta prctica 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 sesin. Aplicacin: o Contenido del fichero web.xml:
<context-param> <param-name>bd</param-name> <param-value>personas</param-value> </context-param>
this.getServletContext().getInitParameter("bd");
Operaciones que se pueden realizar con sesiones: boolean isNew(): devuelve true si el cliente no tena una previamente y el servidor la ha creado. void setMaxInactiveInterval(int segundos): establece el tiempo mximo de inactividad en la sesin para inhabilitar la sesin. invalidate(): inhabilita la sesin.
4.5. COOKIES
Las cookies permiten persistir informacin en el lado del cliente, vinculando un servidor con el ordenador, y nunca con el usuario. Generalmente, se utilizan para mejorar la experiencia de navegacin del usuario. La creacin de la cookie se realiza en el servidor gracias a la clase Cookie, envindosela al navegador a travs de la response, como se muestra en el cdigo 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);
Cdigo 15. Servlet creando una cookie.
A continuacin se describen algunas caractersticas de las cookies y cmo se implementan en Java: Cookies no manipulables desde Javascript en el cliente: ests cookies mitigan los ataques del tipo XSS.
c.setHttpOnly(true);
c.setMaxAge(Integer.MAX_VALUE);
c.setMaxAge(-1);
c.setSecure(true);
A continuacin se muestra un ejemplo de cookies ledas mediante Javascript, definidas como HttpOnly y sin definir esta propiedad. Cdigo cliente
<script> function leerCookies() { alert("Cookies leidas: " + document.cookie.split(";")); } </script>
Lenguaje que simplifica el proceso de recuperacin de objetos almacenados en los elementos bsicos de una aplicacin web como son la request, session, cookies, etc. EL est basado en una notacin 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 expresin ${objeto.propiedad}, sin necesidad de referenciar a este mbito, ni realizar downcastings. EL est incorporado por defecto en la especificacin JSP 2.0. As, el acceso a los objetos depositados en la request (tpica accin de un patrn MVC) se acceder directamente. Para el resto de elementos (parmetros, cookies, session, etc.) se utilizarn objetos predefinidos. JSP estndar
<% ArrayList<Persona> lista = (ArrayList<Persona>) request.getAttribute("listaResultado"); %>
JSP con EL
${listaResultado}
${persona.nombre}
${param["nombre"]}
Objetos predefindos en funcin del mbito que posean: pageScope requestScope sessionScope applicationScope
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 librera JSTL est definida en la especificacin Java EE. Define un conjunto de etiquetas estandarizadas que simplifica el desarrollo de aplicaciones MVC. Las etiquetas JSTL se organizan en 4 libreras: core: funciones script bsicas como loops, condicionales, y entrada/salida. xml: procesamiento de xml fmt: la internacionalizacin 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">Informacin 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> <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 bsqueda</a> </body> </html>
Cdigo 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>
Cdigo 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 informacin del navegador: ${header['User-Agent']}</h2> </c:if>
Cdigo 21. Ejemplo de JSTL manipulando distintos tipos de variables: sesin, cookies y cabeceras HTTP.