Servlets Unidad: 4 Laboratorio de Programación Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos Indice Introducción CGI Servlets: concepto, caracteristicas Servlets Vs. CGI Ciclo de vida de un servlet Configuración: Tomcat y Eclipse JEE Creación de Server, Proyectos Dinámicos Web y Servlets Java Ejemplos y ejercitación Servlet Laboratorio de Programacion 1 Introducción Principio básico de funcionamiento de la World Wide Web: Usuario que mediante un browser (cliente) solicita un servicio (páginas HTML, etc.) a una computadora que hace las veces de servidor. Servidores HTTP Primera concepción: mero servidor de ficheros HTML Evoluciono en dos direcciones complementarias: Servlet Añadir más inteligencia en el servidor, y Añadir más inteligencia en el cliente. Laboratorio de Programacion 2 Introducción… Diversas formas de añadir inteligencia a los clientes (páginas HTML): Javascript (<SCRIPT> … </SCRIPT>) Applets de Java (clases de Java que se cargan y se ejecutan en el cliente). Programas CGI (Common Gateway Interface), unida a los formularios HTML permiten de alguna manera invertir el sentido del flujo de la información. Servlet Laboratorio de Programacion 3 Introducción… Programas CGI Servlet Surgió de la necesidad de generar respuestas dinámicas HTML Las aplicaciones CGI se ejecutan en el servidor Es una interfaz para comunicar al servidor, con programas externos que implementen alguna funcionalidad (cliente). Escritos en Perl y C/C++. Existen dos formas principales de pasar los datos del formulario al programa CGI: métodos GET y POST. La forma de enviar la respuesta al cliente desde el servidor es a través de una página HTML. Laboratorio de Programacion 4 Servlets Los Servlets son las respuesta de la tecnología Java a la programación CGI. Son programas que se ejecutan en un servidor Web y construyen páginas Web dinámicas. Introducidos por Sun en 1996 Construir páginas Web dinámicas es útil (y comunmente usado) por un número de razones: La página Web está basada en datos envíados por el usuario. Los datos cambian frecuentemente. Por ejemplo, un informe sobre el tiempo o páginas de noticias Las páginas Web que usan información desde bases de datos corporativas u otras fuentes. Servlet Por ejemplo, las páginas de resultados de los motores de búsqueda Por ejemplo, usaríamos esto para hacer una página Web en una tienda on-line. Laboratorio de Programacion 5 Ventajas sobre CGI Rendimiento Eficiencia Se necesita portar los CGIs entre distintas plataformas Los servlets son independientes de la plataforma Desarrollo La máquina Virtual Java permanece arrancada, y cada petición es manejada por un thread Java de peso ligero, no un pesado proceso del sistema operativo. Portabilidad Cada petición a un CGI provoca la creación de un nuevo proceso. Los contenedores de servlets arrancan un nuevo thread. Las APIs e IDEs de Java facilitan mucho el desarrollo Características Avanzadas Servlet Programación Distribuida, Acceso a Bases de Datos, etc. Mucho más sencillas en los servlets. Laboratorio de Programacion 6 Hilos vs. Procesos Un proceso (abstracción creada por el SO) es simultáneamente: Un hilo es una actividad concurrente dentro de un proceso La unidad de ejecución (cada proceso se puede lanzar/detener por separado) Un conjunto de recursos (cto de ficheros abiertos, mapa de memoria, etc.) Podemos definir varios hilos concurrentes dentro de un proceso El hilo es la unidad de ejecución Pero prácticamente no posee recursos. Todos los hilos comparten los recursos del proceso La creación/destrucción/etc. De hilos es mucho más barata que la de procesos Servlet Laboratorio de Programacion 7 Servlets: características Los servlets se utilizan para extender o implementar funcionalidades en un servidor. Son módulos de software que se ejecutan dentro del entorno de un servidor y proveen servicios de tipo petición/respuesta. Son componentes escritos en Java, situados en los servidores e independientes de cualquier protocolo y de cualquier plataforma. Son los equivalentes en los servidores a los applets en el cliente. Sin embargo, a diferencia de los applets, los servlets no tienen representación gráfica. Los servlets pueden estar en muchos tipos de servidores. Pero su uso más común es en servidores web. Existen muchos servidores web que soportan el uso de servlets (JWS, Tomcat, JRun, Websphere, etc.). Un servlet se instancia la primera vez y se mantiene en memoria esperando nuevas invocaciones (el servidor web tiene una máquina virtual java que es la que ejecuta el servlet). La comunicación entre servlets es fácil porque ya están en memoria. El servidor web te da el mecanismo para que se comuniquen entre ellos. Servlet Laboratorio de Programacion 8 Servlets: contenedores Un servlet es un objeto que se ejecuta en un servidor o contenedor Contenedores de servlets Se encargan de determinar Los contenedores de servlets son los responsables de manejar las peticiones de los clientes, proporcionárselas al servlet correspondiente y devolver la respuesta al cliente. los detalles de la comunicación. cómo se entrega una petición al servlet. cómo se envía una respuesta al cliente. Se ajustan a la API de servlets Servlet Establecen el mecanismo de comunicación. Laboratorio de Programacion 9 Servlets: ciclo de vida El cliente solicita una petición a un servidor vía URL. El servidor recibe la petición: Si es la 1ra. vez, se utiliza el motor de Servlets para cargarlo y se llama al método init(). Si ya esta iniciado, la petición se convierte en un nuevo hilo. Un Servlet puede manejar múltiples peticiones de clientes. Se llama al método service() para procesar la petición, devolviendo el resultado al cliente. Cuando termina la ejecución del Servlet y no hay mas requerimientos, se llama al método destroy(), que lo destruye y libera los recursos abiertos. Todo esto lo maneja el contenedor de servlets. Servlet Laboratorio de Programacion 10 Servlets: ciclo de vida… Servlet Laboratorio de Programacion 11 Proceso de una solicitud (request) Un cliente hace una solicitud al servidor La solicitud es asignado a un servlet por el servidor. El servlet llama al método service() con el objeto Request y el objeto Response (respuesta) El Server devuelve una respueste a través del servlet. Request Servlet Engine Server Client ServletInputStream Response Service( ServletRequest, ServletResponse) Servlet ServletOutputStream Servlet Laboratorio de Programacion 12 Estructura de un Servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Prueba extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { ... } } Servlet Laboratorio de Programacion 13 Herramientas Versión Java JDK 1.5 o superior Un servidor Web que soporte Servlets Descargar versión de Eclipse JEE (Enterprise Edition, antes llamada J2EE) Apache TomCat 6.0, se encuentra en la dirección http://tomcat.apache.org/ Java EE incluye varias API tales como JDBC, RMI, e-mail, JMS, Servicios Web, XML, etc y define cómo coordinarlos. Java EE configura algunas especificaciones que incluyen Enterprise JavaBeans, servlets, JavaServer Pages y varias tecnologías de servicios web. Permite crear una Aplicación de Empresa portable entre plataformas y escalable, a la vez que integrable con tecnologías anteriores. El servidor de aplicaciones puede manejar transacciones, la seguridad, escalabilidad, concurrencia y gestión de los componentes. Los desarrolladores pueden concentrarse más en la lógica de negocio de los componentes en lugar de en tareas de mantenimiento de bajo nivel. Para instalar Apache Tomcat Servlet Bajarse el fichero de http://tomcat.apache.org/download-55.cgi Instalación normal (Todo por defecto) Probar que funciona mediante la siguiente ruta: http://localhost:8080 Reiniciar el Tomcat Laboratorio de Programacion 14 Tipos de peticiones por formulario Existen dos métodos de envío de formulario en html: GET y POST. POST sirve para enviar datos ocultos entre páginas, o sea los datos no se ven en la barra de direcciones (URL). GET envía los datos a través de la barra de direcciones, siendo más riesgoso en cuanto a seguridad se refiere. Los servlets cuentan con dos métodos: doGet y doPost, los cuales capturan información enviada a través de GET y POST, respectivamente. Por defecto el ingreso a cualquier página (index.html) es por medio de GET. Servlet Laboratorio de Programacion 15 Servlets: Métodos doGet y doPost Reciben interfaces instanciadas: "HttpServletRequest" para manejo de la información enviada por el usuario. "HttpServletResponse" para poder enviar una respuesta en forma de pagina web. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOException Normalmente se implementa uno de los dos y desde el otro, delegamos en el implementado, de forma que pueda responder ambos tipos de peticiones. Servlet Laboratorio de Programacion 16 Servlets: Respondiendo en HTML La salida del servlet será normalmente un documento HTML. Dos pasos: Indicar la cabecera de la respuesta el tipo de contenido que vamos a retornar. El caso mas habitual será devolver HTML o XML. Servlet 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. Laboratorio de Programacion 17 Configuración Tomcat y Eclipse JEE TOMCAT Apache Tomcat es un contenedor de servlets que soporta tecnologías como Java Servlets y JavaServer Pages. Es Open Source Si todo esta correcto, ejecutar en la barra de direcciones http:://localhost:8080, y nos debería mostrar lo siguiente: Servlet Laboratorio de Programacion 19 Eclipse: creación de un Server Seleccionar la opcion File->New->Other->Server Servlet Laboratorio de Programacion 20 Eclipse: creación de un Server Configuración Servlet Laboratorio de Programacion 21 Eclipse: creación de un Server Vista una vez creado el Server Servlet Laboratorio de Programacion 22 Eclipse: crear proyecto Seleccionar la opción File->New->Web->Dynamic Web Project Servlet Laboratorio de Programacion 23 Eclipse: crear proyecto Vista una vez creado el proyecto dinámico Servlet Laboratorio de Programacion 24 Eclipse: crear un servlet Seleccionar la opción File->New->Web->Servlet Servlet Laboratorio de Programacion 25 Eclipse: crear un servlet Vista una vez creado el servlet Servlet Laboratorio de Programacion 26 Ejemplo Servlet: HolaMundo import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML>"); out.println("<HEAD><TITLE>Hello World</TITLE></HEAD>"); out.println("<BODY>"); out.println("<BIG>Hello World</BIG>"); out.println("</BODY></HTML>"); } } Servlet Laboratorio de Programacion 27 Ejemplo c/formulario HTML <HTML><HEAD><TITLE>Introductions</TITLE> <BODY> <FORM METHOD= GET ACTION="Hello" > If you don´t mind me asking, what is your name? <INPUT TYPE=TEXT NAME="name" ><P> <INPUT TYPE=SUBMIT> </FORM></BODY></HTML> Servlet Laboratorio de Programacion 28 API de los servlets Servlet Laboratorio de Programacion 29 Aplicaciones Web JEE Colección de recursos tales como Jsp Servlets Archivos Html Imagenes, Etc… Ubicados en un URL específica Una aplicación web está organizada en una estructura jerárquica de directorios dos partes Un directorio privado WEB-INF contiene los recursos que no son descargables para el cliente Un directorio público que contiene los recursos públicos Ejemplo: miaplicación\ index.html login.jsp images\ logo.gif doc\ tutorial.pdf WEB-INF\ web.xml (Deployment Descriptor) classes\ ServletCompras.class lib\ cualquierOtraApi.jar Servlet Laboratorio de Programacion 30 Consultas… Servlet Laboratorio de Programacion 31 Próxima clase Ultima clase teórica Comunicación entre servlets Manejo de Sesiones Ejemplos y ejercitación Servlet Laboratorio de Programacion 32