Download Tecnología de Programación - DCIC
Document related concepts
no text concepts found
Transcript
Java 2 Platform Tecnología de Programación Diego C. Martínez Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur HTTPServlet Servlet HelloWorld HttpServlet public class HelloWorldServlet extends HttpServlet { public void doGet( request service() response HttpServletRequest request, HttpServletResponse response ) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); doGet() Cliente Servidor doPost() String nombre = request.getParameter("USER_NAME"); out.println("<html>"); out.println("<head>"); out.println("<title>Hola</title>"); out.println("</head>"); out.println("<body bgcolor=\"white\">"); out.println("<h1> Hola "+nombre+"</h1>"); out.println("</body>"); out.println("</html>"); Para implementar un servlet HTTP, basta con heredar de la clase HttpServlet y redefinir los métodos doGet() y/o doPost() Nuevamente se aceptan dos parámetros en cada método: un objeto request que informa al servlet del pedido, y un objeto response usado para retornar respuestas. } } Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Java Server Pages Java Server Pages – pasos en la invocación La tecnología JSP (Java Server Pages) usa tags al estilo HTML y scriptlets escritos en Java para encapsular la lógica que genera el contenido de la página. Servidor Web Al separar la lógica de el diseño y la presentación, JSP facilita la tarea de construir aplicaciones basadas en la web. request Página JSP Permiten incluir directamente código Java en un documento HTML Forman una extensión natural a los servlets. De hecho, luego de un preprocesado, las páginas JSP terminan siendo D h h l d d l á i JSP i i d nada más y nada menos que un servlet!. Desde el punto de vista del programador, Servlets y JSP son intercambiables, dependiendo del balance de carga estática y dinámica del documento a generar. Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Servlet Generado Cliente response Servlet Compilado Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur 1 Java Server Pages ‐ ejemplo Java Server Pages ‐ ejemplo HolaVos.jsp Hora.jsp <HTML> Hola <I> <%= request.getParameter("nombre") %> </I>! </HTML> <%@page import=“java.util.Date”%> <HTML> <BODY> Hora actual: <%= new Date().toString() %> </I>! </BODY> </HTML> http://localhost/HolaVos.jsp?nombre=Homero Hola Homero! http://localhost/Hora.jsp Hora actual: Mon Jul 31 10:55:54 GMT+01:00 2006 Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Modelos JSP Servlets y JSP Los servlets tienen su utilidad y sus riesgos. Son excelentes en el procesamiento del lado del servidor, pero dificultan la separación de la presentación Los principales elementos de la oferta de Java2 para el desarrollo de aplicaciones web son los servlets y las java server pages. Los servlets son clases escritas en Java que se ejecutan en el servidor ante una invocación por medio de un URL. Son ideales para los programadores Java, pero dificultan la generación y los cambios de interfaz gráfica HTML JSP favorece la separación de la presentación de la generación del contenido, pero debe usarse adecuadamente. El balance es importante en ambos casos. ¿Cómo organizar las propuestas de Java? Có i l d ? Las Java Server Pages son documentos de texto con código Java empotrado (scriptlets),. Son ideales para los desarrolladores web, pues pueden centrarse más en la interfaz, pero provocan la tentación de llenarlo de scriptlets, mezclando lógica y presentación Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Existieron dos aproximaciones filosóficas para la construcción de aplicaciones web usando JSP. Estas se conocen como las arquitecturas JSP Model 1 y JSP Model 2 y difieren básicamente en la ubicación del grueso del procesamiento. Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur © Diego C. Martínez - DCIC-UNS JSP Model 1 JSP Model 1 1 Ventaja Es la solución más fácil. JSP JSP Desventajas Mezcla lógica con presentación. Pocas probabilidades de reutilización. JSP 4 JSP 2 Browser JSP 3 Java Bean Lógica Lógica Lógica Servidor de Aplicaciones Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Servidor de BD / Enteprise Server Lógica Lógica Lógica Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur 2 JSP Model 2 JSP Model 2 Ventajas Ideal para grandes aplicaciones. Permite la reutilización. Otras aplicaciones pueden usar el mismo código. 1 Servlet Browser Desventajas: 2 3 Se pierde un poco Se pierde un poco el mapeo el mapeo uno a uno a uno entre la presentación entre la presentación y una única fuente de código. Lleva más tiempo de desarrollo. 5 JSP Java Bean 4 Servidor de Aplicaciones Servidor de BD / Enteprise Server Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur MVC – Model ‐ View ‐ Controller JSP Model 2 Un patrón de diseño general muy popular es el patrón MVC. MVC es un patrón de software en donde la lógica se separa del modelo y de la vista de ese modelo de forma de proveer mejores posibilidades de reutilización. Controller 1 Controller Servlet View 2 3 Model Browser 5 JSP El Controlador coordina la actividad de la Vista a través de un mecanismo indirecto de anuncios de cambios, de tal modo que un Modelo no posee conocimiento acerca de las vistas que pueda tener asociadas. Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Java Bean Model Servidor de Aplicaciones Servidor de BD / Enteprise Server Apache Software Group El Apache Software Group provee soporte para la comunidad Apache de proyectos de software open‐source. 2: Recuperar datos Servlet 4 Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Diagrama de colaboración 1: Post View Fuente de Datos Browser 3: Establecer beans, ubicarlos en la sesion, etc 4: Redireccionar a la vista apropiada Beans JSP JSP JSP Colaborativos, Proceso de desarrollo basado en consenso, Licencias de software abiertas y pragmáticas, Pretención de liderazgo en el área de desarrollo, Gobernados por “meritocracia” En esa página podemos informarnos sobre los proyectos actuales, algunos relacionados, downloads, noticias, etc. 5: acceder a los beans Esta es la base del framework Struts Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur 3 Proyecto Jakarta Struts ¿Qué es Struts? Un Framework MVC Struts provee un framework para desarrollar aplicaciones basadas en servlets y JSP que usen la arquitectura MVC Struts es uno de los proyectos de Apache Software Group más populares. Es una implementación en Java del patrón de diseño Model View Controller. Una colección de utilidades Struts provee clases para encarar la mayoría de las tareas comunes en el desarrollo de una aplicación Web. La intención es crear un framework open source para la construcción de aplicaciones Web que separan la presentación del contenido. Modela el patron MVC utilizando una combinación de JSPs y servlets. http://struts.apache.org/ Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Un conjunto de JSP Tag Libraries Struts provee librerías de tags especializadas para manejar propiedades de los beans, generar formularios HTML, iterar sobre varios tipos de estructuras de datos y generar salida HTML. Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Struts Diagrama de colaboración Principal protagonista: ActionServlet Recolecta los datos recibidos, los empaqueta en un componente ActionForm. Delega el procesamiento a otro objeto de tipo Action. El objeto Action manipula los datos y determina la vista correcta. Archivo de Configuración 1: HTTP:Request 3: Invocar a Action con el FormBean Controlador 5: Forward a JSP Vista Controlador ( Controller) Servlet Controlador ActionServlet Clase Action Archivo JSP Browser 2: Crear FormBean Modelo 4: Crear Beans necesarios ( Model ) Vista Form Bean Si bien nada indica cómo definir el modelo, lo ideal es usar componentes JavaBeans ( View ) Bean Bean Bean 6: Mostrar Datos (HTML,JS, etc) Modelo Usualmente, páginas JSP Struts provee librerías de tags Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Struts ‐ Ejemplo simple Struts ‐ Ejemplo simple 1) Necesitaremos una página de login, con dos campos de texto: usuario y clave. login.jsp Cliente Cliente Solicita pagina Login Ingresa Nombre y Clave Opera Pagina Admin LogIn Sitio Retorna LogIn Verifica Datos Recibidos Retorna Pagina Admin Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Retorna Pagina Error <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html:html locale="true"/> <head> <title>Login</title> </head> <body> <html:form action="login.do" focus="userName"> <table align="center"> <tr><td align="right"> Login: </td> <td align="left"> <ht l t t property="userName" <html:text t " N " size="15" i "15" maxlength="15" l th "15" /> </td></tr> <tr> <td align="right">Password:</td> <td align="left"> <html:password property="password" size="15" maxlength="15“/> </td> </tr><tr> <td colspan="2" align="center"> <html:submit>Entrar</html:submit> </td></tr> </table> </html:form> </body> </html> Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur 4 Struts ‐ Ejemplo simple Struts ‐ Ejemplo simple 2) Necesitaremos una página de error, con un mensaje adecuado. 3) Necesitaremos una página de admin, en este caso solo un mensaje de que se ha ingresado satisfactoriamente. <html:html locale="true"/> <head> <title>Error Login </title> </head> <body> <table align="center"> <tr><td align="right"> ERROR! Clave o Password incorrectos! </td></tr> / / </table> </body> </html> <html:html locale="true"/> <head> <title>Administrador Home</title> </head> <body> <table align="center"> <tr> <td align="right"> Bienvenido Administrador! </td> </tr> </table> loginerror.jsp </body> </html> admin.jsp Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Struts ‐ Ejemplo simple Necesitaremos el bean que represente la información de login, que será procesada por el servidor. Este bean es una subclase de ActionForm. import import import import import javax.servlet.http.HttpServletRequest; org.apache.struts.action.ActionError; org.apache.struts.action.ActionErrors; org.apache.struts.action.ActionForm; org.apache.struts.action.ActionMapping; public class LoginForm extends ActionForm { private String userName; private String p g p password; Struts ‐ Ejemplo simple Necesitaremos verificar que los datos de login corresponden con un usuario válido, interactuando con alguna fuente de datos. Por simplicidad haremos un bean que representa la lista de usuarios validos. import java.util.HashMap; public class LoginBean { private HashMap validUsers = new HashMap(); public LoginBean() { validUsers put("Twinkle validUsers.put( Twinkle Toes" Toes ,"tt"); tt ); validUsers.put("administrator","admin"); validUsers.put("Barbara Smith","smitty"); } public String getPassword() { return password; } public String getUserName() { return userName; } public boolean validateUser(String userName, String password) { if(validUsers.containsKey(userName)) { String thePassword = (String)validUsers.get(userName); if(thePassword.equals(password)) return true; } return false; } public void setPassword(String string) { password = string; } public void setUserName(String string) { userName = string; } } } Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Struts ‐ Ejemplo simple Necesitamos finalmente una clase que procese el pedido de login. Es una subclase de Action y recibirá los datos en el ActionForm. import … public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequestr request, HttpServletResponse response) throws Exception { LoginBean lb = new LoginBean(); if(lb.validateUser(((LoginForm)form).getUserName(), ((LoginForm)form).getPassword()) ) { return (mapping.findForward("success")); } else { return (mapping.findForward("failure")); } } Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Struts ‐ Ejemplo simple Con las partes listas, resta configurar la aplicación. Dos archivos de configuración son importantes: web.xml y struts‐config.xml. Los dos configuran aspectos importantes de la aplicación. web.xml le indica al contenedor web (e.g. Apache Tomcat) como ejecutar nuestra aplicación, cual es el servlet principal, etc. struts‐config.xml define los beans utilizados, el mapeo de acciones, los forwards, etc. define los beans utilizados el mapeo de acciones los forwards etc Los dos son archivos XML y la idea central es mover gran parte de la configuración de nuestro sitio en estos archivos, dado que son fáciles de examinar y modificar. Cubren muchos aspectos de la aplicación. } Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur 5 Archivo de Configuracion struts‐config.xml Archivo de Configuracion web.xml Define el <web-app> ActionServlet y lo <!-- Action Servlet Configuration --> llama “action” <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <servlet name>action</servlet name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- The Welcome File List --> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list> <!-- JSTL Tag Library Descriptor --> <taglib> <taglib-uri>/WEB-INF/c.tld</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib> … Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur Mapea requests M t terminados t i d en “.do” al servlet llamado “action”. Determina la página principal. Especifica las librerías de tags … <struts-config> <!-- ===== Form Bean Definitions =========================== --> <form-beans> <form-bean name="loginForm" type="LoginForm"/> </form-beans> <!-- ===== Action Mapping Definitions ====================== --> <action-mappings> <action path="/login" Qué path provoca la invocación de este Action servlet type="LoginAction" Nombre completo del servlet name="loginForm" Qué FormBean será asociado a este Action Cuál es el ámbito del FormBean scope="request" p g p p input="/login.jsp" input /login.jsp Qué página produce los datos para el FormBean validate="true"> ¿debe invocarse la validación del FormBean? <forward name="failure" path="/login.jsp"/> Path para “failure” <forward name="success" path="/loggedin.jsp"/> Path para “success” </action> </action-mappings> <!-- ===== Message Resources Definitions =================== --> <message-resources null="false" parameter="ApplicationResources"/> </struts-config> Departamento de Ciencias e Ingeniería de la Computación ‐ Universidad Nacional del Sur 6