220 likes | 346 Views
Servlets. 22 de Abril de 2004. Fernando Alonso Blázquez. Indice. ¿Qué es un Servlet? Cuándo y por qué usar Servlets Servlet vs. CGI Ventajas de los Servlets frente a los CGI Estructura básica de un HttpServlet Servlet simple que genera texto plano Servlet simple que genera un HTML
E N D
Servlets 22 de Abril de 2004 Fernando Alonso Blázquez
Indice • ¿Qué es un Servlet? • Cuándo y por qué usar Servlets • Servlet vs. CGI • Ventajas de los Servlets frente a los CGI • Estructura básica de un HttpServlet • Servlet simple que genera texto plano • Servlet simple que genera un HTML • Compilado, instalación e invocación • Ejemplo: ServletOpinion • Ciclo de vida de los Servets
¿Qué es un Servlet? • Programas en Java que se ejecutan en un servidor HTTP (servidor Web) • Actúan como capa intermedia entre: • Petición proviniente de un Navegador Web u otro cliente HTTP • Bases de Datos o Aplicaciones en el servidor HTTP Servidor Web BD BD externa Servlet Aplicación
Tareas encomendadas a un Servlet • Leer los datos enviados por un usuario • Usualmente de formularios en páginas Web • Pueden venir de applets de Java o programas cliente HTTP. • Buscar cualquier otra información sobre la petición que venga incluida en esta • Detalles de las capacidades del navegador, cookies, nombre del host del cliente, etc. • Generar los resultados • Puede requerir consults a Base de Datos, invocar a otras aplicaciones, computar directamente la respuesta, etc. • Dar formato a los resultados en un documento • Incluir la información en una página HTML • Establecer los parámetros de la respuesta HTTP • Decirle al navegador el tipo de documento que se va a devolver, establecer las cookies, etc. • Enviar el documento al cliente
Cuándo y por qué usar Servlets • Muchas peticiones desde navegador se satisfacen retornando documentos HTML estáticos, es decir, que están en ficheros • En ciertos casos, es necesario generar las páginas HTML para cada petición: • Página Web basada en datos enviados por el cliente • Motores de búsqueda, confirmación de pedidos • Página Web derivada de datos que cambian con frecuencia • Informe del tiempo o noticias de última hora • Página Web que usa información de bases de datos corporativas u otras fuentes del la parte del servidor • Comercio electrónico: precios y disponibilidades
Servidor Web basado en CGI Servidor Web Petición al CGI-1 Proceso Hijo del CGI-1 Petición al CGI-2 Proceso Hijo del CGI-2 Petición al CGI-1 Proceso Hijo del CGI-1 Servidor Web Servidor Web basado en Java Servlet Petición al Servlet-1 JVM Servlet-1 Petición al Servlet-2 Petición al Servlet-1 Thread Servlet-2 Servlet vs. CGI
Ventajas de los Servlets frente a CGI • Eficiencia • CGI corto: el proceso de arranque de cada proceso puede dominar el tiempo de ejecución • N peticiones simultáneas: el código del CGI se carga en memoria N veces • Al terminar el proceso, el CGI se cierra: difícil persistencia de datos (conexiones a BD, caché...) • Conveniencia • Los Servlets tienen una infraestructura muy amplia para la tratar automáticamente datos de formularios HTML, gestionar sesiones y otras utilidades de alto nivel. • Potencia • Los Servlets pueden comunicar directamente con el navegador Web • Pueden mantener datos entre peticiones, simplificando el seguimiento de sesiones y operaciones de caché • Varios Servlets pueden compartir datos
Ventajas de los Servlets frente a CGI • Portabilidad • Los Servlets están escritos en Java y siguen una API estándar. • Pueden funcionar sin ningún cambio en diferentes servidores • Seguridad • CGI adolecen de vulnerabilidades porque: • Se ejecutan en el shell del SO • Pueden sufrir overflows por el lenguaje (C, C++, ...) • Los Servlets no sufren estos problemas • Economía • Añadir soporte para Servlet a un servidor Web ya disponible tiene muy poco coste extra • Existen ciertos servidores web y servidores de servlet gratuitos para tráficos pequeños
Estructura de un HttpServlet import java.io.*; //Se importan los paquetes con las clases para Servlets y HttpServlets import javax.servlet.*; import javax.servlet.http.*; public class ServletTemplate extends HttpServlet{ //El método doGet responde a peticiones mediante el método GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // El objeto “request” se usa para leer los “HTTP headers” que llegan // (p.e. Cookies) y los datos de formularios HTML enviados por el usuario // El objeto “response” se usa para especificar “HTTP status codes” y // “HTTP headers” de la respuesta (p.e. El tipo de contenido, cookies, etc.) PrintWriter out = response.getWriter(); // El objeto “out” se usa para enviar contenido al navegador } //El método doPost responde a peticiones mediante el método POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Servlet simple que genera texto plano import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); } }
Servlet simple que genera un HTML import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SimpleHTML extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Le decimos al navegador que lo que vamos a devolver es un HTML response.setContentType("text/html"); PrintWriter out = response.getWriter(); // Construimos una página HTML legal out.println(“<HTML>"); out.println(“<HEAD><TITLE>Servlet simple que genera un HTML</TITLE></HEAD>"); out.println(“<BODY>"); out.println(“<H2>Servlet que genera un HTML</H2>"); out.println(“<P>Este Servlet devuelve el cógigo de una página HTML que el"); out.println(“ navegador interpreta y muestra como tal.</P>"); out.println(“</BODY>"); out.println(“</HTML>"); out.flush(); out.close(); } }
Instalación de Tomcat • Realizar download de tomcat.apache.org • Se descomprime en un directorio del ordenador: • C:\apache-tomcat-5.5.16 • Variables del sistema: CATALINA_HOME • set CATALINA_HOME=C:\apache-tomcat-5.5.16 • Ejecución: • Arranque del servidor: %CATALINA_HOME%\bin\startup • Url en el navegador: http://localhost:8080/ • Parada del servidor: %CATALINA_HOME%\bin\shutdown
Instalación de Tomcat (en salas ordenadores) • Copiar los directorios: • conf - Server configuration files (including server.xml) • logs - Log and output files • shared - For classes and resources that must be shared across all web applications • webapps - Automatically loaded web applications • work - Temporary working directories for web applications • temp - Directory used by the JVM for temporary files (java.io.tmpdir) • Variable del sistema: CATALINA_BASE • -Dcatalina.base=%CATALINA_BASE%
Compilación • Compilado • Vamos a utilizar la librería de Tomcat 5 • Indicar en el CLASSPATH dónde están las clases para que el compilador las reconozca • Path del archivo: %CATALINA_HOME%\common\lib\servlet-api.jar Compilar como cualquier otro código fuente Java • Instalación • Se entiende por instalación de un Servlet a ponerlo disponible en el servidor para ser invocado desde un navegador o cliente HTTP • Se necesita un servidor de Servlets (por ejemplo, Apache Tomcat 5.0 que es gratuito) • Anteriormente se utilizaba el Servletrunner que viene con la instalación del JSDK2.0
Compilado, instalación e invocación • Invocación de un Servlet • Desde la barra de direcciones del navegador: • Ejemplo: • De esta forma se invoca el servlet mediante el método GET siempre • Desde un formulario: • La dirección del servlet debe ir en el action • El servlet se invoca al hacer Submit y lo hace mediante el método definido en el formulario • Al servlet se le pasan los valores de los campos http://hostname:port/context/Nombre_Servlet http://localhost:8080/servlet/SimpleHTML <FORM action=“http://hostname:port/context/Nombre_Servlet” method=“POST”> ... </FORM>
Ejemplo: ServletOpinion • Página HTML: • MiServlet.html • Servlet • ServletOpinion.java -> ServletOpinion.class • Configurar web.xml <servlet> <servlet-name>eje1</servlet-name> <servlet-class>eje1</servlet-class> </servlet> <servlet-mapping> <servlet-name>eje1</servlet-name> <url-pattern>/eje1</url-pattern> </servlet-mapping> • Arrancar Tomcat
Objeto HttpServletRequest Objeto HttpServletResponse Ciclo de vida de los Servets HttpServlet • Método init() • Se ejecuta una sola vez al inicializar el Servlet • Inicializar variables y operaciones costosas en tiempo de ejecución • Métodos doGet()odoPost() • Recoger peticiones del usuario y ejecutar operaciones • Mandar respuesta al usuario (en forma de HTML) Otros métodos de usuario • Método destroy() • Lo llama el servidor al “apagarse” • Cerrar procesos en curso, liberar memoria, cerrar ficheros
Servlets JSDK2.0 Java Servlet Development Kit 2.0 22 de Abril de 2004 Fernando Alonso Blázquez
Compilado, instalación e invocación • Compilado • Vamos a utilizar la Servlet API 2.0 • Instalar el JSDK2.0 • Java Servlet Development Kit 2.0 • Indicar en el CLASSPATH dónde están las clases para que el compilador las reconozca • Path del archivo: jsdk.jar • Compilar como cualquier otro código fuente Java • Instalación • Se entiende por instalación de un Servlet a ponerlo disponible en el servidor para ser invocado desde un navegador o cliente HTTP • Se necesita un servidor de Servlets (por ejemplo, Apache Tomcat 4.0 que es gratuito) • Vamos a utilizar el Servletrunner que viene con la instalación del JSDK2.0
Compilado, instalación e invocación • Servletrunner.exe • Programa que se ejecuta bajo MS-DOS y que se queda escuchando a un puerto a la espera de que un servlet sea llamado • Hay que indicar en la variable de entorno PATH el path donde se encuentra el Servletrunner para poderlo ejecutar desde cualquier directorio • Se ejecuta de la siguiente manera: • -p 8080 indica el puerto al que escucha • -d g:\Infor3\Practica8 indica el directorio donde están los servlets (ficheros *.class) • Al invocar un servlet, el Servletrunner lo ejecuta c:\>servletrunner –p 8080 –d g:\Infor3\Practica8\ port = 8080 backlog = 50 max handlers = 100 timeout = 5000 servlet dir = g:\Infor3\Practica8\ document dir = .\examples servlet propfile = g:\Infor3\Practica8\servlet.properties
Compilado, instalación e invocación • Invocación de un Servlet • Desde la barra de direcciones del navegador: • Ejemplo: • De esta forma se invoca el servlet mediante el método GET siempre • Desde un formulario: • La dirección del servlet debe ir en el action • El servlet se invoca al hacer Submit y lo hace mediante el método definido en el formulario • Al servlet se le pasan los valores de los campos http://hostname:port/servlet/Nombre_Servlet http://localhost:8080/servlet/SimpleHTML <FORM action=“http://hostname:port/servlet/Nombre_Servlet” method=“POST”> ... </FORM>
Ejemplo: ServletOpinion • Página HTML: • MiServlet.html • Servlet • ServletOpinion.java -> ServletOpinion.class • Arrancar Servletrunner.exe