 Módulos que amplían los servidores orientados a petición/respuesta.  La respuesta en el lenguaje Java a los CGIs (Common Gateway Interface) para construir.

Slides:



Advertisements
Presentaciones similares
Java Enterprise Edition (Java EE)
Advertisements

Introducción a la programación (Clase 2)
Curso de Java “Java para Web” Rogelio Ferreira Escutia.
Internet y tecnologías web
Fernando Alonso Blázquez Sesiones 06 de Mayo de 2004.
Fernando Alonso Blázquez Formularios en lenguaje HTML 26 de Febrero de 2004.
Servlets 22 de Abril de 2004 Fernando Alonso Blázquez.
Curso de Java Capitulo 7: Conceptos sobre poo Profesor:
CGI I La mayor parte de los elementos HTML de que disponemos permite al visitante visualizar los contenidos de un sitio, pero no interactuar con él. Dicho.
"java del lado del servidor" Servlet y JSP Java Server Pages.
OBJETO REQUEST. El objeto Request Por qué el objeto request Funcionamiento Colecciones: – Transferencia de variables por URL –Transferencia de variables.
Introducción a la arquitectura Web
Servlets.
Servlets Servlets.
JSP Copyright ISIPE – Instituto de Servicios Informáticos para Empresas – Universidad Siglo 21 – Cualquier copia u otro uso debe ser autorizado expresamente.
Aplicación del paradigma orientado a objetos
Formularios en lenguaje HTML 7 de Abril de Índice Generalidades Definición en HTML Elementos Formas de envío: métodos GET y POST Recepción y tratamiento.
Sesión en Servlets 31 de Marzo de Índice ¿Por qué seguir la trayectoria de usuarios? Formas de seguir la trayectoria de usuarios –Cookies –Reescritura.
JSP COOKIES. cookies  Las cookies son datos guardados por los navegadores a instancias del servidor.  Los sitios Web las utilizan con propósitos diversos:
Borland User Group - Guatemala Desarrollo de Servlets con Borland JBuilder 2006 Mario Enríquez Open Consult Diciembre 2006.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
Igor Santos Grueiro. Ahora tenemos datos y datos …
Ingeniero Anyelo Quintero
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
Servlets, JSP, JavaBEANS,JDBC
Una java servlet es un programa que se ejecuta en un servidor. Por lo general son aplicaciones Java que corren en un entorno de servidor web. Los Java.
Servicios Web. Servicios web Son programas con funcionalidad accesible a través de protocolo http que permiten la ejecución remota de métodos y funciones.
Patrones Creacionales
PHP TODO SOBRE PHP.
Servlets 18 de Marzo de Índice ¿Qué es un Servlet? ¿Cuándo y por qué usar Servlets? Estructura básica de un HttpServlet Servlet simple que genera.
JAVA: Servlets Diseño de aplicaciones web
TEMA 6. Applets y servlets
PROTOCOLO H T T P.
“SERVLETS”. Paola Rojas Contreras Juan Villarroel Leiva José Miguel Perez V. Departamento de Electrónica.
Fernando Alonso Blázquez Nicolás Serrano Bárcena Servlets 8 de Abril de 2008.
Uso de las Sesiones Temas: Creación de sesiones Lectura de sesiones Borrado de sesiones.
Aplicaciones Web M.C. Jorge Eduardo Ibarra Esquer
Publicación de bases de datos Access en la web
Ihr Logo PHP Parte 4 “manejo de formularios”. Your Logo Formularios  El proceso para el manejo de FORMULARIOS html requiere generalmente dos páginas,
Desarrollo con Servlets. Servlets: Introducción  Módulos que amplían los servidores orientados a petición/respuesta.  La respuesta en el lenguaje Java.
Mario Osvaldo Bressano Servlets. Mario Osvaldo Bressano Arquitectura de 2 Capas.
JAVA: Servlets Diseño de servicios web © María de los Santos Pérez Hernández
Servlets Servlets son módulos que extienden a servidores “java-enabled” orientados a request/response, como por ejemplo Servidores Web Un servlet puede.
Servlets Servlets son módulos que extienden a servidores orientados a request/response, como por ejemplo Servidores Web “java-enabled”. Un servlet puede.
Aplicaciones Web de Servidor
Formularios La mayor parte de los elementos HTML de que disponemos permite al visitante visualizar los contenidos de un sitio, pero no interactuar con.
Servlets 10 de Mayo de 2006.
IS2Objetos Distribuidos - J2EE,RMI1 Ingeniería del software II Ingeniería Web.
EDWIN ACOSTA PINILLA DIEGO FERNANDO CASTRO JHON SEBASTIAN CASTRO.
NUEVO DISEÑO SITIO WEB EXPLORA REGIÓN METROPOLITANA Resultados en cuanto a tráfico, posicionamiento y nuevas herramientas.
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Sun Microsystems. Los servlets son objetos que corren dentro del contexto de un contenedor de servlets y extienden su funcionalidad. También podrían correr.
Confidential // Neoris 1 Confidential // Do Not Reproduce without prior written permission from Neoris Servlets.
Práctica Profesional PHP.
Clases “ Es una Abstracción de un elemento del mundo real ”
En el presente trabajo, se explica los diferentes elementos que nos ofrece Microsoft Access, para hacer mas fácil y rápido la realización de bases de.
GET POST Isc. Abraham Fernández Espinosa Universidad ICEP.
Autentificación y Seguridad en Aplicaciones Web.  Delegadas en el cliente y el servidor ◦ Basados en estándares de Internet  Autentificación Básica.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Temario Java 2 Enterprise Edition Arquitectura Especificación Servlets Contenedores Cookies Sesiones.
Softlogia S.R.L. Formación de Recursos Humanos Java Server Faces Instructor: Martin R. Baspineiro.
Introducción a programación web Martin Esses. Formularios HTML se utilizan para pasar datos a un servidor. Un formulario HTML puede contener elementos.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Patricia López & Julio Medina Computadores y Tiempo Real Santander, 2013 G80 - Advanced Computation 1 Generación de Código con BOUML.
Introducción a programación web Martin Esses. En las presentaciones anteriores, vimos como enviar datos a un controlador usando POST y como generar formularios.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Trabajar con SERVLETS. Índice Qué son los Servlets Para qué sirven Cómo se utilizan Ejemplo Cómo probar un Servlet.
Sesiones 06 de Mayo de 2004 Fernando Alonso Blázquez.
Transcripción de la presentación:

 Módulos que amplían los servidores orientados a petición/respuesta.  La respuesta en el lenguaje Java a los CGIs (Common Gateway Interface) para construir páginas “en el momento”. ◦ Poder basarse en datos del usuario. ◦ La información varía en el tiempo. ◦ Usar información de una base de datos.

 Eficiencia: JVM.  Facilidad de uso y aprendizaje.  Potentes: Comunicación directa con el servidor.  Portables.  Baratos, porque hay programadores Java  Las del Lenguaje Java

 La jerarquía de clases java es...  Nosotros heredamos de HttpServlet!

Un formulario puede enviar la información al servidor de dos formas:  GET: Paso de parámetros en la propia URL de acceso al servicio o recurso del servidor. Método “ doGet ” del servlet  POST: Lo mismo que GET pero los parámetros no van en la línea de URL sino en otra línea a parte. El manejo es idéntico. Método “ doPost ” del servlet.

 Son llamados desde el método “service”.  Reciben interfaces instanciadas: ◦ “ HttpServletRequest ” para manejo de la informacion enviada por el usuario. ◦ “ HttpServletResponse ” para poder enviar una respuesta en forma de pagina web. protected void doGet(HttpServletRequest req, HttpServletResponse resp)HttpServletRequestHttpServletResponse throws ServletException, java.io.IOExceptionServletException protected void doPost(HttpServletRequest req, HttpServletResponse resp)HttpServletRequestHttpServletResponse throws ServletException, java.io.IOExceptionServletException Habitualmente, implementamos uno de los dos y desde el otro delegamos en el implementado, de forma que pueda responder ambos tipos de peticiones.

 La salida del servlet será, habitualmente, un documento HTML. 2 pasos: ◦ Indicar la cabecera de la respuesta el tipo de contenido que vamos a retornar. El caso más habitual será devolver HMTL, aunque tb podemos devolver, por ejemplo, una imagen generada en tiempo de ejecución.  Al ser un proceso tan común existe un método que nos lo soluciona directamente: “ setContentType ” de “ HttpServletResponse ”. ◦ Crear y enviar código HTML válido. ◦ Ej: HolaMundoServlet

package com.dasdi.servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HolaMundoServlet extends HttpServlet { public void doGet( HttpServletRequest req, HttpServletResponse res ) throws IOException, ServletException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(" "); out.println(" Hola Mundo! "); out.println(" "); out.println("Bienvenido a mi primera página Güev!"); out.println(" "); } public void doPost( HttpServletRequest req, HttpServletResponse res ) throws IOException, ServletException { doGet( req,res ); }

En primer lugar, vamos a desarrollar el servlet HolaMundo que ante una petición HTTP, retorne una página HTML con el saludo de rigor. Para desarrollar el servlet:  Creamos un proyecto “Dynamic web” para desplegar uan aplicación sobre tomcat 6.0.  Ahora que ya tenemos creado el proyecto, añadimos la clase es.uniovi.si.MiPrimerServlet por medio del wizard de creación de clase. Debemos especificarle que extiende la clase javax.servlet.http.HttpServlet

 Tenemos ya el esqueleto del servlet que vamos a desarrollar. La lógica del servlet debe ser implementada en los métodos doGet y/o doPost, dependiendo si queremos que nuestro servlet responda a peticiones de uno, otro o ambos tipos. En primer lugar implementamos el doGet(…). public void doGet( HttpServletRequest req, HttpServletResponse res ) throws IOException, ServletException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(" "); out.println(" Hola Mundo! "); out.println(" "); out.println("Bienvenido a mi primera aplicación Güev!"); out.println(" "); }

 El método doGet será invocado por el service cuando la petición que llegue sea de tipo GET. Como queremos hacer un servlet muy cordial, hacemos que el doPost delegue también en el doGet (…). public void doPost( HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { doGet( req,res ); }

 Ya tenemos el servlet implementado. Eclipse señalará y propondrá los imports que son necesarios para poder compilar el código del servlet. Una vez añadidos, el servlet está terminado, aunque aún no podemos acceder a el desde el navegador. ¿Por qué? Es necesario darlo de alta en el descriptor de despliegue de la aplicación: el web.xml.

 Insertamos en el web.xml la declaración del servlet y del servlet-mapping HolaMundo com.miw.servlet.HolaMundoServlet HolaMundo /HolaMundoCordial

 Desplegamos la aplicación y probamos el servlet accediendo desde el navegador mediante  Debemos obtener la página web generada por el servlet como respuesta. Examinar el código fuente de la misma desde el Internet Explorer mediante Ver/Código Fuente.

 En CGI, recoger parámetros de un usuario era muy tedioso. Con servlets, trabajamos SIEMPRE con objetos java.  Los parámetros nos llegan en la request, que representa el objeto de tipo HttpServletRequest que recibimos en la invocación del doXXX(…).  Object HttpServletRequest.getParameter(nombre) devuelve: ◦ “” (si no hay valor) ◦ null (si no existe). ◦ El valor en caso de haber sido establecido.

 Los servlets están diseñados para soportar múltiples accesos simultáneos por defecto.  Ojo! El problema puede surgir cuando se hace uso de un recurso compartido. Ej, abrimos un fichero desde un servlet.  Solución, ◦ Hacer que el recurso sea el que posea la política de acceso concurrente. Ej: Las bases de datos están preparadas para ello.

 Ciclo de vida de un servlet:

INICIALIZACIÓN:  Una única llamada al metodo “ init ” por parte del servidor. public void init(ServletConfig config) throws ServletExceptionServletConfigServletException  Se pueden recoger unos parametros concretos con “ getInitParameter ” de “ ServletConfig ”. Estos parámetros se especifican en el descriptor de despliegue de la aplicación: web.xml DESTRUCCIÓN:  Cuando todas las llamadas desde el cliente cesen o un temporizador del servidor así lo indique. Se usa el método “ destroy ” public void destroy()

 Creamos index.html, página con un formulario que nos pasa el parámetro “Nombre”: Ejemplo "Mi Primer Servlet" Introduzca un texto en el cuadro y pulse "Submit"

// MiPrimerServlet.java import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class HolaMundoServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { … out.println("Bienvenido "+(String)req.getParameter("NOMBRE")+" a mi primera página Güev!"); … }

 El protocolo HTTP no posee la capacidad de almacenar estados.  Se complican mucho las tareas de guardar las acciones (Ej, las Compras) de un usuario.  Posibles soluciones: ◦ Cookies. ◦ Añadir información en la URL ◦ Usar campos ocultos de formularios (HIDDEN) ◦ Empleo del objeto HttpSession del servlet. (Ejemplo: Carrito de la Compra)

 Los servlets proporcionan una solución técnica: La API HttpSession.  Una interfaz de alto nivel construida sobre los cookies y la reescritura de las urls (pero transparente para el desarrollador).  Permite almacenar objetos.

 Trabajar con sesiones: ◦ BUSCAR EL OBJETO HttpSession ASOCIADO A UNA PETICIÓN: Se usa el método “ getSession ” de “ HttpServletRequest ” que devuelve null si no hay una sesión asociada. Entonces podríamos crear una pero al ser una tarea sumamente común, se pasa true y él mismo se encarga de crear una.

 AÑADIR y RECUPERAR INFORMACION DE UNA SESION ◦ Método getAttribute(“nombre_variable”). Devuelve:  Una instancia de Object en caso de que la sesión ya tenga algo asociado a la etiqueta nombre_variable  null en caso de que no se haya asociado nada aún. ◦ Método setAttribute(“nombre_variable”, referencia ). Coloca el objeto referenciado por referencia en la sesión del usuario bajo el nombre nombre_variable. A partir de este momento, el objeto puede ser recuperado por este mismo usuario en sucesivas peticiones. Si el objeto ya existiera, lo sobrescribe. ◦ Método getAttributes() retorna una Enumeration con los nombres de todos los atributos establecidos en la sesión del usuario.

getId. Este método devuelve un identificador único generado para cada sesión. Algunas veces es usado como el nombre clave cuando hay un sólo valor asociado con una sesión, o cuando se uso la información de logging en sesiones anteriores. isNew. Esto devuelve true si el cliente (navegador) nunca ha visto la sesión, normalmente porque acaba de ser creada en vez de empezar una referencia a una petición de cliente entrante. Devuelve false para sesión preexistentes. getCreationTime. Devuelve la hora, en milisegundos desde 1970, en la que se creo la sesión. Para obtener un valor útil para impresión, pasamos el valor al constructor de Date o al método setTimeInMillis de GregorianCalendar. getLastAccessedTime. Esto devuelve la hora, en milisegundos desde 1970, en que la sesión fue enviada por última vez al cliente.

 CADUCIDAD DE LA SESION: ◦ Peculiaridad de las Aplicaciones WEB: No sabemos cuando el usuario se desconecta del servidor ◦ Automáticamente el servidor web invalida tras un periodo de tiempo (30’) sin peticiones o manualmente usando el método “ invalidate ”. OJO! ¡SOBRECARGAR LA SESIÓN ES PELIGROSO! Los elementos almacenados no se liberan hasta que no salta el timeout

 Se trata de un saco “común” a todas las sesiones de usuario activas en el servidor.  Nos permite compartir información y objetos entre los distintos usuarios.  Se accede por medio del objeto “ ServletContext ”. public ServletContext getServletContext()ServletContext (Ejemplo: Contador de Visitas)

 Para colocar o recuperar objetos del contexto… ◦ Añadir un atributo: Se usa el método “ setAttribute ” de “ ServletContext ”. El control de que varios servlets manejen un mismo atributo es responsabilidad del desarrollador. ◦ Recoger un atributo: Se usa el método “ getAttribute ” de “ ServletContext ”. Hay que convertir el objeto que devuelve al tipo requerido (Retorna un tipo Object!) Ejemplo Contador de Visitas.

 Partiendo de la práctica anterior, vamos a añadir un registro de visitas que se base en almacenar un Integer en la sesión del usuario.  Editamos el servlet y modificamos su código de tal forma que al final de la página muestre la lista de personas ya saludadas durante la sesión del usuario actual. Para ello: ◦ Buscaremos en la sesión un atributo del tipo java.util.Vector que se llame listado. En caso de que no exista, lo instanciamos. //Buscamos el listado en la sesión, y en caso de que no exista, lo instanciamos Vector listado = (Vector)req.getSession().getAttribute("listado"); if ( listado == null ) { listado = new Vector(); }

◦ Al recuperar el nombre de la persona a saludar desde la request, añadimos dicho nombre al vector. //Añadimos el visitante al listado en caso de que hayamos recibido su nombre if ( (String)req.getParameter("NOMBRE") != null ) { listado.addElement((String)req.getParameter("NOMBRE")); } ◦ Añadimos el objeto listado a la sesión //Para el caso de que el listado no estuviera en sesión //(primer acceso) lo añadimos req.getSession().setAttribute("listado",listado);

◦ Al recuperar el nombre de la persona a saludar desde la request, añadimos dicho nombre al vector. for ( int i = 0 ; i < listado.size() ; i++ ) { out.println(" "+(String)listado.elementAt(i)); } out.println(" volver ");

 Modificar el piloto anterior para que los registros en lugar de ser por cada instancia del explorer sea uno para todos los usuarios del sistema.  Para ello, en lugar de guardarlo en la sesión, debemos almacenarlo en el contexto de la aplicación.  Podemos obtener una referencia al contexto mediante el método getServletContext() de la sesión del usuario.

 Un servlet puede tomar como entrada la salida de otro servlet, y no le importa mucho a donde va la que el genera.  Servlet Chaining: El servidor guía la request a través de diferentes servlets que van enriqueciéndola, y al final la redirige al cliente. Servlet 1Servlet 2Servlet 3

 ¿Para que vale? ◦ Evitar repetición de tareas  Ej: Añadir una fecha, preprocesado de etiquetas, añadir firma, etc… ◦ Realizar tareas de autentificación  Control de si el usuario está o no autentificado. ◦ Realizar un diseño modular de la capa de presentación: un Servlet, una acción  Maximiza la reutilización

Desarrollar un servlet com.miw.tienda.CarritoCompraServlet que actúe de carrito de la compra almacenando una hashmap La página que genere debe contener un formulario HTML que muestre al usuario un combobox con al menos 5 productos y, bajo el formulario, el estado actual del carrito de la compra, mostrando cuantas unidades de cada artículo hemos introducido en el carrito. Cada vez que el usuario seleccione un producto y pulse el botón de submit, el servlet mirará si la hasmap contiene el identificador del producto. En caso de contenerlo, incrementará las unidades en uno. Si no, lo inserta en el carrito.

 Para hacer un combo en HTML: La trampa Los pájaros Matrix reloaded