Download SERVLETS Páginas web estáticas
Document related concepts
no text concepts found
Transcript
SERVLETS Dr. Raúl Perez Páginas web estáticas Como se despliega una página web en un browser Normalmente la página se crea usando HTML y se almacena como un archivo en el servidor de web. El usuario escribe el URL del archivo en el browser. El browser se comunica con el servidor de web y solicita el archivo archivo. El servidor localiza el archivo y se lo envía al browser. El browser despliega el archivo. La información estática se almacena en archivos HTML. Estos archivos hi pueden d ser actualizados t li d pero en un momento t d dado, d cada petición del mismo archivo regresa exactamente el mismo contenido. El contenido no cambia, no importa quien solicite el archivo. Arquitectura estática HTTP requestt Web Browser Web Server HTTP response espo se HTML HTML HTML Sistema de archivos Páginas web dinámicas No toda la información es de naturaleza estática. La mayoría de las veces las páginas HTML deben ser generadas dinámicamente veces, dinámicamente. Las páginas web dinámicas son generadas en el servidor de web. El servidor de web ejecuta ciertos programas para procesar las peticiones de los usuarios y produce una respuesta dinámica (customizada). Entre las tecnologías utilizadas para generar páginas dinámicas, se pueden nombrar: Servlets, JSP, PHP, ASP, CGI Arquitectura Servlet Container HTTP request Web Browser HTTP request Web Server HTTP response Servlet Servlet HTTP response Base de datos Otros programas Servlets z z Los servlets son tecnología basada en Java para generación de páginas dinámicas de manera similar a los CGI’s. Estos programas se ejecutan en un servidor Web y f fungen como una capa intermedia i t di entre t una petición ti ió proveniente de un navegador Web u otro cliente HTTP, y las bases de datos o aplicaciones del servidor HTTP. Finalidad de los servlets z z z z z Leer datos enviados por el usuario. Buscar cualquier otra información respecto a la petición incrustada en la petición HTTP. Establecer los parámetros HTTP de respuesta adecuados. adecuados Generar resultados en forma dinámica al comunicarse con una base de datos, ejecutar una llamada RMI o CORBA o invocar una aplicación. aplicación Regresar el documento al cliente, como HTML, en formato binario (imágenes GIF) o incluso en un formato comprimido como gzip. gzip Ventajas sobre el CGI tradicional z z z z Cada petición HTTP es administrada mediante un subproceso de Java y no mediante un proceso pesado del sistema operativo. El conocimiento ya existente de Java lo hace más adecuado. d d Comunicación directa con el servidor Web. Están escritos en el lenguaje de programación Java y siguen una API estándar JSDK (javax.servlet / javax.servlet.http). Motor de servlets z Se requiere un motor de servlets asociado a un servidor id d de web b – – z Puede ser un servidor que incluya el soporte para servlets Puede ser una extensión de un servidor de web Ejemplo – – Tomcat http://jakarta.apache.org/tomcat/ p j p g API de los Servlets z El JSDK cuenta con dos paquetes que son una extensión estándar: – – z javax.servlet: tiene las clases que soportan servlets genéricos e independientes de algún protocolo. javax.servlet.http: extiende estas clases agregando funcionalidad específica para HTTP. Para crear un servlet se implementa la interfaz javax.servlet.Servlet y puede ser a través de dos clases: – javax.servlet.GenericServlet – javax.servlet.http.HttpServlet. Clases Servlet y HTTPServlet Servlet void init (ServletConfig config) void service(ServletRequest request, ServletResponse response) Void destroy() HTTPServletServlet void doGet(HttpServletRequest request, HttpServletResponse response) void doPost(HttpServletRequest request, HttpServletResponse response) void doPut(HttpServletRequest request request, HttpServletResponse response) ... API de los Servlets z z El resto de las clases son de soporte. HttpServletRequest y HttpServletResponse son para accesar las peticiones y respuestas respectivamente. La clase HttpSession provee la funcionalidad para llevar el registro de una sesión y la clase Cookie para facilitar el proceso de escribir y procesar cookies. El ciclo de vida de un servlet Creation Init Service Destroy Ciclo vital de los Servlets public void init (ServletConfig config) throws ServletException z Éste método se ejecuta cuando el servlet se carga por primera vez y no vuelve a ejecutarse en cada petición del usuario. Para leer los parámetros de carga inicial se utiliza getInitParameter, con el que puede buscar parámetros de carga inicial asociados con el servlet. (en el caso del servidor Tomcat ver el archivo web.xml). Service() public void service (ServletRequest request, ServletResponse response) throws ServletException, IOException z z z Cuando llega una petición, el servidor invoca el método service() del servlet. Este método acepta dos parámetros: un objeto petición y un objeto respuesta. Cuando se trata de un servlet genérico, el método service() debe sobreescribirse, sobreescribirse como puede verse a continuación: Manejo de petición de un servlet genérico Servidor petición respuesta GenericServlet service() Manejo de petición de un servlet http z En el caso de un servlet http, dicho método no debe sobrescribirse, debido a que éste es el encargado de invocar los métodos doGet() o doPost(), dependiendo del tipo de petición. Y son estos dos últimos los que deben sobrescribirse. z Un servlet http también puede sobrescribir los métodos doPut() y doDelete(), pero normalmente no sobrescribe los métodos doTrace() y doOptions() porque su implementación es suficiente. Esto puede observarse a continuación: Manejo de petición de un servlet http Servidor Petición GET respuesta Petición POST respuesta HttpServlet doGet() service() doPost() Ciclo vital de los Servlets public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException public void doPost(HttpServletRequest request, request HttpServletResponse response) throws ServletException, IOException z Manejan las peticiones GET y POST. Se sobre-escribe para programar su funcionalidad. Ciclo vital de los Servlets doPut, doTrace, doDelete, etc. z Manejan las peticiones HTTP poco comunes de PUT, PUT TRACE, etc. public void destroy() z Se ejecuta sólo cuando el servidor elimina una instancia del servlet. servlet No se ejecuta luego de cada petición petición. Los Métodos GET y POST z Los 2 tipos de peticiones mas comunes en HTTP (también llamados métodos), ), son GET y yPOST. z Si la petición se invoca mediante una forma se puede especificar cualquiera de los 2 métodos. z Si la invocación se hace escribiendo directamente el URL se utiliza el método GET. En este caso, el URL se conoce como ”query string”. z El URL “query string” incluye el url del servlet, los nombres de los parámetros, y sus valores respectivos. Invocando mediante formas z Una forma especifica explicitamente cual de los 2 métodos utilizar. z Si se utiliza el método GET, Los datos de la forma se anexan al URL “query string”. z Si se utiliza el método POST, los datos de la forma se empacan junto con el resto de la petición. El servidor obtiene y el cuerpo p del mensaje j HTTP los datos leyendo Estructura básica de un Servlet import java.io.*; import p jjavax.servlet.*; import javax.servlet.http.*; p public class HolaMundo extends HttpServlet p { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, p , IOException p { PrintWriter out = response.getWriter(); out.println("Hola p ( mundo"); ); } } Manejo de las peticiones del Cliente z z z Una de las motivaciones para generar páginas Web de forma dinámica es que el resultado esté basado en los datos proporcionados por el usuario. Con los servlets, dicha operación es automática, utilizando el método getParameter() de HttpServletRequest. Enseguida se muestra un servlet que lee el nombre del usuario usua o y lo o incluye c uye e en la a respuesta. espues a Ejemplo, forma HTML <HTML> <HEAD> <TITLE>Introductions</TITLE> </HEAD> <BODY> <FORM METHOD=GET ACTION="http://server/servlet/HelloName"> If you don't mind me asking, what is your name? <INPUT INPUT TYPE=TEXT TYPE TEXT NAME NAME="name"><P> name P <INPUT TYPE=SUBMIT> </FORM> </BODY> </HTML> Ejemplo, forma HTML (Cont) Ejemplo, código del servlet import java.io.*; import javax.servlet. javax servlet *;; import javax.servlet.http.*; public class HelloName extends HttpServlet { public void doGet(HttpServletRequest req, req HttpServletResponse res) throws ServletException, IOException { // Set the Content-Type header res.setContentType("text/html"); Ejemplo, código del servlet-2 PrintWriter out = res.getWriter(); String name = req.getParameter( req getParameter("name"); name ); out.println("<HTML>"); out.println("<HEAD><TITLE>Hello, out.println( HEAD TITLE Hello, " + name + "</TITLE></HEAD>"); out.println("<BODY>"); p ( ) out.println("Hello, " + name); out.println("</BODY></HTML>"); } Ejemplo, código del servlet-3 public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException ServletException, IOException { doGet(req, res); } } Resultado del Programa