Download Servlets - Universidad de los Andes
Document related concepts
no text concepts found
Transcript
DEPARTAMENTO DE SISTEMAS Arquitectura de Software Componentes Web ISIS3702 Agenda DEPARTAMENTO DE SISTEMAS • • • • Componentes Web Servlets JSPs MVC Componentes Web DEPARTAMENTO DE SISTEMAS Contenedor de applets Tomado tutorial JEE 5 Componentes Web DEPARTAMENTO DE SISTEMAS Componentes Web Browser Aplicación de Negocio HTTP Contenedor Web Applet Proveen contenido dinámico e interactivo a clientes a través de un browser. Componentes Web DEPARTAMENTO DE SISTEMAS • En java o Servlets o Java Server Pages (JSP) o Struts o Java Server Faces (JSF) • Microsoft o Active Server Pages (ASP/ASPX) Componentes Web DEPARTAMENTO DE SISTEMAS • Apache (http://httpd.apache.org/) • Netscape (http://wp.netscape.com/enterprise/v3.6/index.html) • Microsoft IIS (http://www.microsoft.com) • Personal Web Server ((http://www.microsoft.com) • muchos más … Componentes Web DEPARTAMENTO DE SISTEMAS • Objeto del lado servidor que maneja eventos del cliente y datos de entrada • Se genera dinámicamente de acuerdo a su estado • Tiene un ciclo de vida • Puede estar embebido en otro componente, puede contener otros componentes, usar otros componentes o ser ‘standalone’ Componentes Web DEPARTAMENTO DE SISTEMAS • Aplicaciones Web proveen contenido dinámico e interactivo a clientes a través de un browser. o Construida a partir de componentes Web o identificada con un URL • Un Contenedor Web, es un ambiente de ejecución para una aplicación Web. o provee al(los) componente(s) recursos de ciclo de vida, localización, seguridad, transacciones, etc. Componentes Web DEPARTAMENTO DE SISTEMAS • En JEE un componente web se construye con servlets, páginas JSP o Web Service endpoints • Sigue un modelo Two-Phase Request Processing Componentes Web DEPARTAMENTO DE SISTEMAS • Llamado Two-Phase Request Processing • División de una solicitud en request y response • Proceso: o El browser pasa los datos de entrada al componente (request) o El componente procesa las entradas, actualiza su estado y redirige el browser al lugar de la respuesta o El browser carga la página de resultado usando otra solicitud (response) Componentes Web DEPARTAMENTO DE SISTEMAS Tomado de: http://www.subbu.org/articles/servlets/ServletIssues.html Componentes Web DEPARTAMENTO DE SISTEMAS • Un componente web es llamado usando un mensaje HTTP al URL asociado • Al pasar parámetros de una forma HTML el componente maneja el evento, o valida los datos de entrada y actualiza su estado • Si hay un error, el componente almacena los datos del error en la sesión y se redirecciona a sí mismo • Si no hubo errores el componente puede hacer reload para construir la página con el nuevo estado o pasar control a otro componente Componentes Web DEPARTAMENTO DE SISTEMAS • JavaServlet es el framework de base • Existen varios frameworks adicionales Agenda DEPARTAMENTO DE SISTEMAS • Componentes Web • Servlets o o o o Ciclo de vida Interfaces y clases Interacción con los Clientes Ejemplos • JSPs • MVC Servlets y JSPs DEPARTAMENTO DE SISTEMAS • Un Servlet es una clase de Java que procesa dinámicamente solicitudes (requests) y construye respuestas (responses) o Orientadas a servicios y funciones de control de una aplicación no orientada a presentación • Una página JSP es un documento de texto que se ejecuta como un servlet pero que permite una aproximación más natural para crear contenido estático o Orientados a presentación o Más apropiadas para generar páginas de texto como HTML, XML, WML, etc • El modelo se potencia utilizando las dos tecnologías en conjunto JavaServer Pages Standard Tag Library DEPARTAMENTO DE SISTEMAS • JSLT encapsula funcionalidades comunes ofrecidas para aplicaciones JSP • Permite usar un conjunto estándar de tags de JSP • Permite que las aplicaciones corran en varios contenedores JSP • JSLT provee tags para condicionales e iteradores, manipulación de XML, internacionalización, acceso a bases de datos con SQL y funciones comunes JavaServer Faces DEPARTAMENTO DE SISTEMAS • JSF es un framework aplicaciones web para construcción de • Componentes principales de JSF: o o o Un framework para componentes GUI Un modelo flexible para generar componentes en diferentes tipos de HTML o lenguajes de marcas. Un objeto “renderer” genera el componente y convierte los datos en un modelo de objetos en tipos que pueden ser representados en una vista Un RenderKit estándar para generar markup HTML/4.01 • Features de los componentes de GUI: o o o o o Validación de entradas Manejo de errores Conversión de datos del modelo de objetos a componentes Creación de modelo de objetos administrado Configuración de navegación de páginas Desarrollo de una aplicación web DEPARTAMENTO DE SISTEMAS 1. Desarrollar el código del componente 2. Desarrollar el descriptor de despliegue (deployment) 3. Compilar los componentes, clases de ayuda referenciadas y otros componentes 4. Empaquetar la aplicación en un archivo desplegable 5. Hacer deploy en un contenedor web 6. Acceder al URL que referencia la aplicación Web Modules DEPARTAMENTO DE SISTEMAS Compuesto de recursos web imágenes, archivos estáticos Componentes web Empaquetados en un archivo .war Descritos por un archivo web.xml. Si hay servlets, filtros o listeners Configuración de un Componente DEPARTAMENTO DE SISTEMAS • Archivo XML llamado web application deployment descriptor. Servlet DEPARTAMENTO DE SISTEMAS • Clase Java que permite extender las capacidades del servidor utilizando el modelo de programación request-response • Basado en componentes • Independiente del servidor web y de la plataforma • Los contenedores de servlets usualmente son un componente de un servidor web o de aplicaciones: o BEA WebLogic Application Server, IBM WebSphere, Sun Java System Web Server, Sun Java System Application Server, JBoss. Servlets DEPARTAMENTO DE SISTEMAS • Manejado por el contenedor • Proceso 1. 2. 3. 4. 5. Carga el servlet Crea una instancia Inicializa el servlet: • invoca el método init Maneja la interacción del cliente con el servlet: • utiliza el método service Destruye el servlet Servlets DEPARTAMENTO DE SISTEMAS <<Interface>> ServletConfig <<Interface>> Servlet GenericServlet extends HttpServlet <<Interface>> java.io.Serializable Servlets DEPARTAMENTO DE SISTEMAS public class EjemploServlet … { public void init() throws ServletException { … // aqui va el código propio de inicialización } public void destroy() { … // aqui va el código propio de destrucción } public void service(HttpServletRequest request , HttpServletResponse response) { … // aqui va el código propio de servicio } } • El contenedor carga el servlet e invoca el método init • El contenedor invoca el método destroy cuando va a descargar el servlet. Se utiliza para liberar recursos, para guardar información que se tenía en el cache, etc. Servlets DEPARTAMENTO DE SISTEMAS • Un Servlet HTTP maneja requerimientos de clientes a través de su método service • El método service puede atender requerimientos HTTP estándares despachando cada requerimiento a un método específico o o o o doGet, para manejar GET, GET condicional y requerimientos HEAD doPost, para manejar requerimientos POST doPut, para manejar requerimientos PUT doDelete, para manejar requerimientos DELETE Servlets DEPARTAMENTO DE SISTEMAS <<abstract class>> HttpServlet <<Interface>> HttpServletRequest doDelete() doPut() doGet() doPost() myServlet <<Interface>> HttpServletResponse Servlets DEPARTAMENTO DE SISTEMAS Cuando un Servlet acepta un llamado de un cliente, el Servlet recibe dos objetos • Un ServletRequest: encapsula la comunicación del cliente al servidor • Un ServletResponse: encapsula la comunicación desde el servidor de regreso al cliente Servlets DEPARTAMENTO DE SISTEMAS <<Interface>> Servlet Service(SReq, Sres) <<Interface>> ServletRequest <<Interface>> ServletResponse Servlets DEPARTAMENTO DE SISTEMAS La Interface ServletRequest Permite al servlet tener acceso a • Información sobre los parámetros pasados por el cliente • El protocolo usado por el cliente • El nombre del host remoto que hizo el llamado y el servidor que lo recibió Servlets DEPARTAMENTO DE SISTEMAS • El stream de entrada o • ServletInputStream: el Servlet usa este stream para obtener datos de los clientes que usan protocolos como los métodos HTTP POST y PUT Para acceder los datos del cliente (HTTPServletRequest) o getParameter: dado el nombre de un parámetro retorna su valor o getParameterValues: usado cuando el parámetro puede tener más de un valor o getQueryString: para requerimientos GET, retorna un String de los datos del cliente o getReader: para POST, PUT y DELETE, si se espera texto, el método retorna un BufferedReader para que los datos sean leídos de ahí o getInputStream: si se espera datos binarios, el método retorna un ServletInputStream para obtener los valores Servlets DEPARTAMENTO DE SISTEMAS java.io.InputStream ServletInputStream extends <<Interface>> RequestDispatcher <<Interface>> ServletRequest <<Interface>> HttpSession <<Interface>> HttpServletRequest Servlets DEPARTAMENTO DE SISTEMAS • La interface ServletResponse ofrece al servlet métodos para responder al cliente o o Colocar la longitud del contenido y el tipo del MIME en la respuesta Provee un stream de salida: ServletOutputStream y un objeto Writer a través del cual el servlet puede enviar la respuesta • Las Interfaces que extiende ServletResponse ofrecen servicios más específicos con el tipo de protocolo. Por ejemplo la interface HttpServletResponse contiene métodos para obtener la información del header del protocolo HTTP Servlets DEPARTAMENTO DE SISTEMAS ServletOutputStream java.io.OutputStream extends <<Interface>> ServletResponse <<Interface>> HttpServletResponse Servlets DEPARTAMENTO DE SISTEMAS Un objeto HttpServletRequest provee acceso a un encabezado HTTP • Cualquier cookie encontrado en el requerimiento • El método HTTP con el que el requerimiento fue hecho • El objeto HttpServletRequest también permite obtener los argumentos que el cliente envía como parte del requerimiento Servlets DEPARTAMENTO DE SISTEMAS Para acceder los datos del cliente o getParameter: dado el nombre de un parámetro retorna su valor o getParameterValues: usado cuando el parámetro puede tener más de un valor o getQueryString: para requerimientos GET, retorna un String de los datos del cliente o getReader: para POST, PUT y DELETE, si se espera texto, el método retorna un BufferedReader para que los datos sean leídos de ahí o getInputStream: si se espera datos binarios, el método retorna un ServletInputStream para obtener los valores Servlets DEPARTAMENTO DE SISTEMAS • Un objeto HttpServletResponse provee dos formas para retornar datos al cliente: o El método getWriter retorna un Writer (texto) o El método getOutputStream retorna un ServletOutputStream (binary) Servlets DEPARTAMENTO DE SISTEMAS El encabezado HTTP • Debe crearse antes de acceder el Writer o el OutputStream. • La clase HttpServletResponse provee métodos para acceder los datos del encabezado. • Por ejemplo, setContentType permite colocar el tipo del contenido DEPARTAMENTO DE SISTEMAS Ejemplo Servlet public class SimpleServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; String title = "Simple Servlet Output"; response.setContentType("text/html"); out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println(title); out.println("</TITLE></HEAD><BODY>"); out.println("<H1>" + title + "</H1>"); out.println("<P>This is output from SimpleServlet."); out.println("</BODY></HTML>"); out.close(); } } Agenda DEPARTAMENTO DE SISTEMAS • Componentes Web • Servlets • JSPs o o o Conceptos Básicos Arquitectura de JSP Elementos JSP: o • Directivas Elementos de Scripting JSP y JavaBeans MVC JSPs DEPARTAMENTO DE SISTEMAS • Una página JSP es un documento de texto que contiene dos tipos de elementos: template estático y elementos JSP • Template estático: puede expresarse en formatos como: HTML, SVG, WML, y XML • Elementos JSP: para construir contenido dinámico JSPs DEPARTAMENTO DE SISTEMAS <html> <head> <title>Hello, User</title> </head> <body bgcolor="#ffffff" background="background.gif"> <%@ include file="dukebanner.html" %> … <form method="get"> <input type="text" name="username" size="25"> <br> <input type="submit" value="Submit"> <input type="reset" value="Reset"> </form> <% if ( request.getParameter("username") != null ) { %> <%@ include file="response.jsp" %> <% } %> </body> </html> JSPs DEPARTAMENTO DE SISTEMAS • Las páginas JSP son traducidas a servlets y por lo tanto su ciclo de vida es el del ciclo de vida del servlet • Cuando un request sobre una página jsp es iniciado, el procesador de páginas verifica: o o si ya tiene un servlet asociado si la pagina es más reciente que el servlet • Si alguna de las condiciones no se cumple, la página es traducida y compilada al correspondiente servlet • Una vez que se crea la instancia del servlet asociado a la página, el contenedor invoca el método jspInit JSPs DEPARTAMENTO DE SISTEMAS • Dos tipos de sintaxis están disponibles para crear elementos JSP o o Sintaxis basada en tags de XML Sintaxis propia de JSP • Permite tener dos maneras alternativas para definir los mismos comandos o La sintaxis XML es más fácil de entender pero tiene limitaciones (e.g., no se puede tener un tag como valor de un atributo de otro tag) JSPs DEPARTAMENTO DE SISTEMAS • Directivas: o Son usadas para que el contenedor web determine cómo será traducida y ejecutada la página • Elementos de Scripting: o Son usados para crear, modificar, formatear JSPs DEPARTAMENTO DE SISTEMAS • Hay tres tipos de directivas: o o o Page Include TagLib • Directiva Page: define atributos que aplican a toda la página JSP o Sintaxis JSP: <%@ page o [name = value] %> Sintaxis XML <jsp:directive.page [name = value] /> JSPs DEPARTAMENTO DE SISTEMAS [ [ [ [ [ [ [ [ [ [ language="java" ] extends="package.class" ] import="{package.class | package.*}, ..." ] session="true|false" ] buffer="none|8kb|sizekb" ] autoFlush="true|false" ] isThreadSafe="true|false" ] info="text" ] errorPage="relativeURL" ] contentType="mimeType [ ; charset=characterSet ]" | html ; charset=ISO-8859-1" ] [ isErrorPage="true|false" ] [ pageEncoding="characterSet | ISO-8859-1" ] "text/ JSPs DEPARTAMENTO DE SISTEMAS Ejemplos: <%@ page import="java.util.*, java.lang.*" %> <%@ page buffer="5kb" autoFlush="false" %> <jsp:directive.page errorPage="error.jsp" /> JSPs DEPARTAMENTO DE SISTEMAS • La directiva include • Incluir en la página JSP el archivo de texto o código especificado. • Si el archivo contiene elementos JSP, estos se procesan: • Sintaxis JSP: o • <%@ include file="relativeURL" %> Sintaxis XML: o <jsp:directive.include file="relativeURL" /> JSPs DEPARTAMENTO DE SISTEMAS <html> <body bgcolor="white"> <font color="blue"> The current date and time are <%@ include file="date.jsp" %> </font> </body> </html> <%@ page import="java.util.*" %> <%= (new java.util.Date() ).toLocaleString() %> JSPs DEPARTAMENTO DE SISTEMAS • Los elementos de scripting son usados para o o o crear y acceder objetos definir métodos manejar el flujo de control • Directivas Page para o o Definir el lenguaje de scripting Importar paquetes • Declaraciones • Expresiones • Scriptlets JSPs DEPARTAMENTO DE SISTEMAS Declarar variable y métodos: • Sintaxis JSP o • Sintaxis XML o • <%! declaration; [ declaration; ]+ ... %> <jsp:declaration> [ declaration; ]+… </jsp:declaration > declaration; Ejemplos o o o <%! int i = 0; %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %> JSPs DEPARTAMENTO DE SISTEMAS • Sintaxis JSP <%= expression %> • Sintaxis XML <jsp:expression> expression </jsp:expression> • Ejemplos: The map file has <font color="blue"> <%= map.size() %> </font> entries. Good guess, but nope. Try <b> <jsp:expression>numguess.getHint()</jsp:expression> </b> JSPs DEPARTAMENTO DE SISTEMAS • Sintaxis JSP <% code fragment %> • Sintaxis XML <jsp:scriptlet> code fragment </jsp:scriptlet> • Ejemplos: <% String name = null; if (request.getParameter("name") == null) { %> <%@ include file="error.html" %> <% } else { foo.setName(request.getParameter("name")); if (foo.getName().equalsIgnoreCase("integra")) name = "acura"; %> JSPs DEPARTAMENTO DE SISTEMAS • Manejo de Objetos Implícitos • Estos objetos pueden ser usados dentro de scriptlets y expressions. Algunos son: o request: representa el HttpServletRequest o response: representa el HttpServletResponse o application: representa el ServletContext o session: representa la HttpSession JSPs DEPARTAMENTO DE SISTEMAS • JSPs y JavaBeans • Motivación o Reducir la cantidad de código java dentro de una JSP o Estandarizar la manera en que se acceden objetos • Declaración <jsp:useBean id="beanName" class="fully_qualified_classname" scope="scope"> … </jsp:useBean> JSPs DEPARTAMENTO DE SISTEMAS • Ejemplo: <jsp:useBean id="cart" class="session.Carts" scope="session" </jsp:useBean> JSPs DEPARTAMENTO DE SISTEMAS • Uso: actualización y obtención de las propiedades del bean • Ejemplos actualización: <jsp:setProperty name="mybean" property="*" /> <jsp:setProperty name="mybean" property="username" /> <jsp:setProperty name="mybean" property="username" value="Steve" /> JSPs DEPARTAMENTO DE SISTEMAS • Obtención de valores de las propiedades: <jsp:getProperty name="beanInstanceName" property="propertyName" /> Ejemplo: <jsp:useBean id="calendar" scope="page" class="employee.Calendar" /> <h2> Calendar of <jsp:getProperty name="calendar" property="username" /> </h2> Preguntas de discusión DEPARTAMENTO DE SISTEMAS • Qué desventajas le ve a usar solamente tecnología de Servlets? • Qué desventajas le ve a usar tecnología de JSPs? Agenda DEPARTAMENTO DE SISTEMAS • • • • Componentes Web Servlets JSPs MVC o o o Patrón MVC JSPs y Servlets MVC con Servlet – JSP Patrón MVC DEPARTAMENTO DE SISTEMAS • Model – View – Controller Representación Visual de los Datos Datos de la Aplicación Modelo Vista Recibe estímulos Controlador del usuario Modifica el modelo MVC DEPARTAMENTO DE SISTEMAS • Los servlets son clases de Java que procesan solicitudes dinámicamente y construyen respuestas • Los JSP son páginas basadas en documentos de texto que son ejecutadas como servlet o Permiten una aproximación mas natural para crear contenido estático • Los servlets son apropiados para administrar las funciones de control como despachar solicitudes y manipular datos que no sean texto o No son buenos para crear contenido estático • Los JSPs son mas apropiados para generar markups basados en texto como HTML, XML, WML y SVG MVC DEPARTAMENTO DE SISTEMAS tomado de http://javaboutique.internet.com/tutorials/Struts/ MVC DEPARTAMENTO DE SISTEMAS • El rol de controlador es jugado por los servlets • El controlador recibe los request de los usuarios, los interpreta y envía al modelo para su procesamiento • El Modelo procesa el request • El Controlador recibe el resultado y delega en las vistas (páginas JSPs) la presentación de los resultados Referencias DEPARTAMENTO DE SISTEMAS • The Java EE 5 Tutorial – o • Java Web Components- The J2EE Tutorial o • • http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html JavaServer Faces Technology – o • http://java.sun.com/products/jsp/tags/11/tags11.html (los ejemplos en esta presentación han sido tomados de la referencia) Understanding JavaServer Pages Model 2 architecture. Exploring the MVC design pattern. By Govind Seshadri. o • http://java.sun.com/j2ee/tutorial/1_3-fcs/index.html JavaServer Pages (JSP ) v1.2 Syntax Reference o • http://java.sun.com/products/servlet/ J2ee Tutorial: o • http://today.java.net/pub/a/today/2005/08/04/jspcomponents.html Sun Developer Network - J2EE Java Servlet Technology o • http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/WebComponents.html Java .net - Building Web Components Without a Component Framework o • http://java.sun.com/javaee/5/docs/tutorial/doc/ http://java.sun.com/javaee/javaserverfaces/ Presentación de clase: Componentes WEB – Parte 1. Rubby Casallas, Universidad de los Andes. 2002 Presentación de clase: Componentes WEB – Parte 2. Rubby Casallas, Universidad de los Andes. 2002 DEPARTAMENTO DE SISTEMAS • Material Prepaparado por o o Nicolás López Pilar Villamil • Revisado y Actualizado por o Darío Correal (2008)