escuela técnica superior de ingeniería informática Tema 3: Diseño de la capa de presentación Departamento de Lenguajes y Sistemas Informáticos Ingeniería del Software de Gestión III Índice ● ● Introducción a HTML / XML, JavaScript, CSS. Introducción a JSP Introducción a HTML / XML, JavaScript, CSS. ● Procesamiento en el servidor de datos ● ● ● ● Procesamiento en el servidor de aplicaciones ● ● ● ● Integridad referencial. Procedimientos almacenados. Disparadores. CGI (C, Perl, …). Lenguajes de script (JSP, ASP, PHP, ColdFusion). Servlets (Java). Procesamiento en el cliente web ● ● ● ● JavaScript (Ajax) Applets (Java). ActiveX (Microsoft). Flash (Macromedia). HTML ● Etiquetas de la estructura básica <html> <head> <title>Título del documento</title> <title> <!-- otra información de cabecera --> </head> <body> <!-- contenido del documento --> </body> </html> ● ● <html>: <html> marca raíz del documento. <head>: <head> cabecera del documento, aparte del título, puede contener otra información sobre el documento. ● <title>: <title> título del documento. ● <body>: <body> cuerpo del documento. HTML OJO El código HTML es generado dinámicamente por el servidor XML ● ¿Qué es XML? HTML <b> Pedro P&aacute;ramo </b> <br> Ju&aacute;n Rulfo <br>Precio: <i> 100 pesos (contado) Contenido: caracteres elemento atributo XML <libro> <titulo> Pedro Páramo </titulo> <autor> Juan Rulfo </autor> <precio moneda=“PESO” modo=“contado”> 100</precio> </libro> XML ● Contenido de un documento XML: ● Elementos y atributos y contenido <precio moneda=“PTA” modo=“contado”> 275 </precio> ● Tuberías de metainformación <?xml version="1.0" encoding="UTF-7" ?> ● ● Documento “bien formado”(well-formed): ● Estructura jerárquica de los elementos ● Un solo elemento raíz ● Sensible a mayúsculas y minúsculas ● Etiquetas de cierre obligatorias Documento válido ● Sigue la estructura de un Schema o DTD JavaScript HTTP TCP/IP Cliente web SQL Servidor de aplicaciones Validación en cliente Servidor de datos CSS. http://www.csszengarden.com CSS ● http://www.thestylecontest.com/ Índice ● ● Introducción a HTML / XML, JavaScript, CSS. Introducción a JSP Introducción a JSP ● Problema: los Servlets son difíciles de mantener (código html embebido en código java): ● ● ● Solución ideal: separar roles: ● ● ● Si modifico código HTML tengo que volver a recompilar. No puedo usar herramientas HTML Diseñador: HTML, WML,… Programador: Diseño, implementación,… JSP: Lenguaje de script para ser usado del lado del servidor. Tiene código java embebido en código HTML API JSP <<interface>> Servlet •init() •destroy() <<interface>> JspPage <%! public void JspInit(){} public void JspDestroy(){} %> <<interface>> HttpJspPage Ciclo de vida HTTP GET/POST JSP Contenedor JSP/Servlet Cliente web Traductor JSP Servlet Compilador javac .java Sintaxis y estructura ● ● Los elementos JSP se diferencian de los HTML porque empiezan por <% o <jsp: Existen varios tipos de elementos: ● ● ● Scripting: código java embebido Directivas: información para traducir la página JSP Acciones: acciones utilizadas frecuentemente Scripting ♦ Declaraciones: <%! String color = “azul”; Atributos o métodos de la clase correspondiente int contador = 0; String getDate(){..} %> ♦ Expresiones: Conjunto simple de expresiones cuyo resultado es una cadena y es enviado al flujo de salida ♦ Scriptlets: Código Java que se ejecuta cuando llega una petición. <%= expresion %> <% String user = “david”; %> El usuario es <%= user %> Directivas ♦ include: <%@ include file =“banner.html” %> ♦ page: <%@ page import =“java.util.*” Para incluir html o jsp Información acerca de la página language=“Java”%> Acciones ♦ <jsp:include Para incluir jsp o html. A diferencia de la directiva, la inclusión se procesa cada vez que se llama a la página <jsp:include page =“head.jsp”/> ♦ <jsp:forward Para redireccionar a otro recurso. En el momento de redireccionar, el hilo de ejecución continua <jsp:forward page =“error.jsp”> <jsp:param name=“type” value=“1”/> </jsp:forward> Objetos implícitos Objeto application out response request session Descripción Es de tipo SerlvetContext Es de tipo JspWriter Es de tipo HttpServletResponse Es de tipo HttpServletRequest Es de tipo HttpSession Introducción a JSP, ejemplo <html> <head> <title>Hola Usuario</title> </head> <body text="#000000" bgcolor="#ffffff"> <h1>Hola <%= request.getParameter("user") %> </h1> <br><br><br> <% String name = request.getParameter("userName"); String times = request.getParameter("times"); int limit = Integer.parseInt(times); %> Su nombre escrito <%= limit %> veces:<br> <% for (int i=0; i<limit; i++) { %> <b><%= name %></b> <br> <% } %> </body> </html> Pero... ● ● ¡El código de la capa de presentación se sigue solapando con el código de la capa de lógica de negocios! (lo veremos en la práctica) ¿No hay solución?: ● ● JSTL (Java Standard Tag Library), incluida en JSP 2.0. http://tapestry.apache.org/ Usar XML + HTML + JavaScript en lugar de JSP ● Velocity ● Struts, etc, etc.... Pero... ● ● ¡Normalmente el contenido de una página es modificado por personal no técnico! (p.e. blog, noticias, portal de la JA, etc) ¿No hay solución?: ● ● CMS: Content Managment System: ● OpenCMS ● Apache Lenya ● Magnolia ● etc Wiki (ver http://java-source.net/open-source/content-managment-systems ) (ver http://java-source.net/open-source/wiki-engines ) Pero... ● ● HTML es una lenguaje de marcado con limitada funcionalidad, ¡no puedo hacer un auto completar!, ¡no puedo crear ventanas que se solapen¡ ¿No hay solución?: ● AJAX ● XUL ● Applets ● Flash (ver http://ajaxpatterns.org/Java_Ajax_Frameworks ) (ver http://java-source.net/open-source/wiki-engines ) Bibliografía • JSTL in Action Shawn Bayern. 2003, Manning • Advanced Java 2 Platform Harvey M. Deitel, Paul J. Deitel, Harvey M. Deitel 2001, Prentice Hall ISBN: 0130895601 !Gracias! ● ¿Podemos mejorar esta lección? ● Mándanos un email a benavides@us.es ● Visite la web de la asignatura www.lsi.us.es