La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Servlets. Qué es un Servlet Los Servlets son módulos que extienden los servidores orientados a petición-respuesta Como los servidores web compatibles.

Presentaciones similares


Presentación del tema: "Servlets. Qué es un Servlet Los Servlets son módulos que extienden los servidores orientados a petición-respuesta Como los servidores web compatibles."— Transcripción de la presentación:

1 Servlets

2 Qué es un Servlet Los Servlets son módulos que extienden los servidores orientados a petición-respuesta Como los servidores web compatibles con Java. Por ejemplo, un servlet podría ser responsable de tomar los datos de un formulario de entrada de pedidos en HTML y aplicarle la lógica de negocios utilizada para actualizar la base de datos de pedidos de la compañia.

3 Que es un Servlet Programas en Java que se ejecutan en un servidor HTTP (servidor Web) Actúan como capa intermedia entre: Petición proveniente de un Navegador Web u otro cliente HTTP Petición proveniente de un Navegador Web u otro cliente HTTP Bases de Datos o Aplicaciones en el servidor HTTP Bases de Datos o Aplicaciones en el servidor HTTP

4 Qué puede hacer un servlet Leer los datos enviados por un usuario Usualmente de formularios en páginas Web Usualmente de formularios en páginas Web Pueden venir de applets de Java o programas cliente HTTP. 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. Detalles de las capacidades del navegador, cookies, nombre del host del cliente, etc.

5 Qué puede hacer un servlet Generar los resultados Puede requerir consults a Base de Datos, invocar a otras aplicaciones, computar directamente la respuesta, etc. 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 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. Decirle al navegador el tipo de documento que se va a devolver, establecer las cookies, etc. Enviar el documento al cliente

6 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 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 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 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

7 Ventajas sobre CGI Eficiencia CGI corto: el proceso de arranque de cada proceso puede dominar el tiempo de ejecución 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 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é...) 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. 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 Los Servlets pueden comunicar directamente con el navegador Web Pueden mantener datos entre peticiones, simplificando el seguimiento de sesiones y operaciones de caché Pueden mantener datos entre peticiones, simplificando el seguimiento de sesiones y operaciones de caché Varios Servlets pueden compartir datos Varios Servlets pueden compartir datos

8 Ventajas sobre CGI Portabilidad Los Servlets están escritos en Java y siguen una API estándar. Los Servlets están escritos en Java y siguen una API estándar. Pueden funcionar sin ningún cambio en diferentes servidores Pueden funcionar sin ningún cambio en diferentes servidoresSeguridad CGI adolecen de vulnerabilidades porque: 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 Los Servlets no sufren estos problemasEconomía Añadir soporte para Servlet a un servidor Web ya disponible tiene muy poco coste extra 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 Existen ciertos servidores web y servidores de servlet gratuitos para tráficos pequeños

9 Arquitectura De Contenedor Web

10 Funcionamiento de un Servlet

11 Arquitectura de Contenedor Web El Web Container puede ser usado en conjunto con un servicio HTTP o puede ser usado como standalone Web Serve

12 Modo de Comunicacion

13 Modo de Comunicación El primer paso en este proceso es que el cliente envía una petición HTTP al servicio HTTP. El segundo paso es que el servicio HTTP transmite los datos de la petición el Contenedor Web. En el tercer paso, el Contenedor Web crea un objeto que encapsule los datos del request stream. El Web Container además crea un objeto que encapsule el Stream Response. En el cuarto paso, el WebContainer ejecuta el método de servicio del servlet solicitado. Los objetos de la petición y de la respuesta se pasan como argumentos a este método. La ejecución del método de servicio ocurre en un hilo separado. En el cuarto paso, el WebContainer ejecuta el método de servicio del servlet solicitado. Los objetos de la petición y de la respuesta se pasan como argumentos a este método. La ejecución del método de servicio ocurre en un hilo separado. Finalmente, el texto de la respuesta generada por el servlet se empaqueta en una HTTP response Stream, que se envía al servicio HTTP y se remite al cliente.

14 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 //El método doGet responde a peticiones mediante el método GET public void doGet(HttpServletRequest request, HttpServletResponse response) public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { throws ServletException, IOException { // El objeto request se usa para leer los HTTP headers que llegan // 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 // (p.e. Cookies) y los datos de formularios HTML enviados por el usuario // El objeto response se usa para especificar HTTP status codes y // El objeto response se usa para especificar HTTP status codes y // HTTP headers de la respuesta (p.e. El tipo de contenido, cookies, etc.) // HTTP headers de la respuesta (p.e. El tipo de contenido, cookies, etc.) PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); // El objeto out se usa para enviar contenido al navegador // El objeto out se usa para enviar contenido al navegador } //El método doPost responde a peticiones mediante el método POST //El método doPost responde a peticiones mediante el método POST public void doPost(HttpServletRequest request, HttpServletResponse response) public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { throws ServletException, IOException { doGet(request, response); doGet(request, response); }}

15 Estructura de un HttpServlet Al desarrollar servlets genéricos, se debe crear una subclase de GenericServlet y sobreescribir el método service. Sin embargo, para los servicios HTTP, la API servlet proporciona una clase especial llamada HttpServlet que se puede extender. Esta clase reemplaza la implementación por defecto del método service, así que no se debe sobreescribir este método.

16 HttpServlet Hereda de GenericServlet Tiene 6 métodos doXXX que son invocados cada vez que el correspondiente comando HTTP es recibido: doPost doPost doPut doPut doGet doGet doDelete doDelete doOptions doOptions doTrace doTrace

17 Invocacion de un Servlet Invocación de un Servlet Desde la barra de direcciones del navegador: Desde la barra de direcciones del navegador: Ejemplo: De esta forma se invoca el servlet mediante el método GET siempre Desde un formulario: 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

18 Metodos Los métodos en los que delega el método service las peticiones HTTP, incluyen * doGet, para manejar GET, GET condicional, y peticiones de HEAD * doGet, para manejar GET, GET condicional, y peticiones de HEAD * doPost, para menajar peticiones POST * doPost, para menajar peticiones POST * doPut, para manejar peticiones PUT * doPut, para manejar peticiones PUT * doDelete, para manejar peticiones DELETE * doDelete, para manejar peticiones DELETE

19 Manejar peticiones GET Manejar peticiones GET implica sobreescribir el método doGet. El siguiente ejemplo muestra a BookDetailServlet haciendo esto. Los métodos explicados en Peticiones y Respuestas se muestran en negrita. El servlet extiende la clase HttpServlet y sobreescribe el método doGet. Dentro del método doGet, el método getParameter obtiene los argumentos esperados por el servlet. Para responder al cliente, el método doGet utiliza un Writer del objeto HttpServletResponse para devolver datos en formato texto al cliente. Antes de acceder al writer, el ejemplo selecciona la cabecera del tipo del contenido. Al final del método doGet, después de haber enviado la respuesta, el Writer se cierra.

20 Manejar Peticiones GET public class BookDetailServlet extends HttpServlet { public void doGet (HttpServletRequest request, public void doGet (HttpServletRequest request, HttpServletResponse response) HttpServletResponse response) throws ServletException, IOException throws ServletException, IOException { // selecciona el tipo de contenido en la cabecera antes de acceder a Writer response.setContentType("text/html"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); // Luego escribe la respuesta out.println(" " + out.println(" " + " Book Description " + " Book Description " +...);...); //Obtiene el identificador del libro a mostrar //Obtiene el identificador del libro a mostrar String bookId = request.getParameter("bookId"); String bookId = request.getParameter("bookId"); if (bookId != null) { if (bookId != null) { // Y la información sobre el libro y la imprime // Y la información sobre el libro y la imprime } out.println(" "); out.println(" "); out.close(); out.close(); }......}

21 Manejar Peticiones POST Manejar Peticiones POST Manejar peticiones POST implica sobreescribir el método doPost. El siguiente ejemplo muestra a ReceiptServlet haciendo esto. De nuevo, los métodos explicados en Peticiones y Respuestas se muestran en negrita. El servlet extiende la clase HttpServlet y sobreescribe el método doPost. Dentro del método doPost, el método getParameter obtiene los argumentos esperados por el servlet. Para responder al cliente, el método doPost utiliza un Writer del objeto HttpServletResponse para devolver datos en formato texto al cliente. Antes de acceder al writer, el ejemplo selecciona la cabecera del tipo de contenido. Al final del método doPost, después de haber enviado la respuesta, el Writer se cierra.

22 Manejar Peticiones POST Manejar Peticiones POST public class ReceiptServlet extends HttpServlet { public void doPost(HttpServletRequest request, public void doPost(HttpServletRequest request, HttpServletResponse response) HttpServletResponse response) throws ServletException, IOException { // selecciona la cabecera de tipo de contenido antes de acceder a Writer // selecciona la cabecera de tipo de contenido antes de acceder a Writer response.setContentType("text/html"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); // Luego escribe la respuesta // Luego escribe la respuesta out.println(" " + out.println(" " + " Receipt " + " Receipt " +...);...); out.println(" Thank you for purchasing your books from us " + out.println(" Thank you for purchasing your books from us " + request.getParameter("cardname") + request.getParameter("cardname") +...);...); out.close(); out.close(); }......}

23 Ciclo de Vida de un servlet

24 Ciclo de Vida de un Servlet Viene dado por tres métodos: init, service y destroy INICIALIZACIÓN: Una única llamada al método init por parte del servidor. Incluso se pueden recoger unos parametros concretos con getInitParameter de ServletConfig. SERVICIO: una llamada a service() por cada invocación al servlet ¡Cuidado! El contenedor es multihilo ¡Cuidado! El contenedor es multihilo DESTRUCCIÓN: Cuando todas las llamadas desde el cliente cesen o un temporizador del servidor así lo indique. Se usa el método destroy DESTRUCCIÓN: Cuando todas las llamadas desde el cliente cesen o un temporizador del servidor así lo indique. Se usa el método destroy Revisar documentación de la clase javax.servlet.Servlet

25 Servlets: Jerarquía La jerarquía de clases java es... Únicamente hay que hacer polimorfismo de los métodos que se quieran tratar.

26 Las APIs Dos paquetes permiten la programación de servlets: javax.servlet javax.servlet javax.servlet.http javax.servlet.http Revisar documentación: Arrancar Tomcat Arrancar Tomcat Visitar: Visitar:

27 Servlets: Operaciones duraderas Respuestas a peticiónes de clientes que requieran de un tiempo de proceso muy largo. Puede que el servlet deba destruirse y estas operaciones aun no hayan concluido. Es responsabilidad del programador encargarse de su gestión.

28 Servlets: Operaciones duraderas Necesitaremos por tanto: Mantener un seguimiento de las tareas (threads) que se est é n ejecutando en el m é todo service Mantener un seguimiento de las tareas (threads) que se est é n ejecutando en el m é todo service Proporcionar una finalizaci ó n correcta haciendo que los procesos largos que aun no hayan concluido puedan terminar correctamente en el m é todo destroy del servlet. Proporcionar una finalizaci ó n correcta haciendo que los procesos largos que aun no hayan concluido puedan terminar correctamente en el m é todo destroy del servlet. En ciertos casos poder terminar los procesos que aun siguen en ejecuci ó n si es necesario. En ciertos casos poder terminar los procesos que aun siguen en ejecuci ó n si es necesario.

29 Clase GenericServlet El uso de la interfaz Servlet tiene dos inconvenientes: Hay que proveer implementaciones de los cinco métodos de Servlet Hay que proveer implementaciones de los cinco métodos de Servlet Hay que cachear la referencia a ServletConfig pasada como parámetro Hay que cachear la referencia a ServletConfig pasada como parámetro La clase GenericServlet provee una implementación vacía de los 5 métodos de Servlet y recuerda ServletConfig

30 Paquete javax.servlet.http Normalmente siempre vamos a trabajar con él cuando programemos servlets. Sus miembros y métodos son más convenientes y ofrecen más funcionalidad Principalmente vamos a tratar con tres clases: HttpServlet HttpServlet HttpServletRequest HttpServletRequest HttpServletResponse HttpServletResponse

31 Servlets: Métodos Por defecto retornan BAD_REQUEST(400) Son llamados desde el método service. Reciben interfaces instanciadas: HttpServletRequest para manejo de la informacion enviada por el usuario. HttpServletRequest para manejo de la informacion enviada por el usuario. HttpServletResponse para poder enviar una respuesta en forma de pagina web. HttpServletResponse para poder enviar una respuesta en forma de pagina web.

32 Peticiónes y Respuestas En el método service() los parámetros: ServletRequest representa la petición del cliente y ServletRequest representa la petición del cliente y ServletResponse la respuesta del servidor ServletResponse la respuesta del servidor ServletRequest tiene los siguientes métodos: getParameterNames getParameterNames getParameter getParameter getRemoteAddress getRemoteAddress getRemoteHost getRemoteHost ServletResponse tiene entre otros el método: getWriter getWriter Revisar examples\servlets\ej5_requestresponse_servlet

33 Servlets: Respondiendo en HTML 2 pasos: Indicar una cabecera de respuesta de contenido (antes de cualquier tipo de respuesta) Indicar una cabecera de respuesta de contenido (antes de cualquier tipo de respuesta) Una manera es usando el método setHeader de HttpServletResponse. 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. Crear y enviar código HTML válido. Revisar examples\servlets\ej6_dogetdopost_se rvlet

34 Ejemplo doGet() y doPost() // compile: javac -classpath %TOMCAT_HOME%\common\lib\servlet-api.jar DoGetDoPostServlet.java import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class DoGetDoPostServlet extends HttpServlet { public void doGet(HttpServletRequest request, public void doGet(HttpServletRequest request, HttpServletResponse response) HttpServletResponse response) throws ServletException, IOException { throws ServletException, IOException { response.setContentType("text/html"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); out.println(" "); out.println(" "); out.println(" The GET method "); out.println(" The GET method "); out.println(" "); out.println(" "); out.println("The servlet has received a GET. " + out.println("The servlet has received a GET. " + "Now, click the button below."); "Now, click the button below."); out.println(" "); out.println(" "); }

35 Ejemplo doGet() y doPost() public void doPost( HttpServletRequest request, HttpServletResponse response) HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { throws ServletException, IOException { response.setContentType("text/html"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); out.println(" "); out.println(" "); out.println(" The POST method "); out.println(" The POST method "); out.println(" "); out.println(" "); out.println("The servlet has received a POST. Thank you."); out.println("The servlet has received a POST. Thank you."); out.println(" "); out.println(" "); }}

36 Servlets: Recogiendo la información de usuario. 2 formas de envío de información: En la línea URL mediante una ? En la línea URL mediante una ? En una línea separada. En una línea separada. En los antiguos CGIs el parseo era muy complejo. En Servlets usar getParameter de HttpServletRequest que devuelve (si no hay valor) o null (si no existe).

37 Servlets: Recogiendo la información de usuario Si el parametro tiene mas de un valor se usa getParameterValues de HttpServletRequest que devuelve un array de strings. Los nombres de los parametros son accesibles mediante getParameterNames de HttpServletRequest que devuelve un Enumeration de strings. Se puede leer la línea directamente con getReader o getInputStream de HttpServletRequest. Revisar: examples\servlets\ej7_listparams_servlet

38 Servlets: Recogiendo la información de usuario Cabeceras: Además de la información de la línea de petición, datos añadidos opcionales (excepto Content-Length en los métodos POST). Accept Los tipos del formato MIME que acepta el navegador cliente. Accept-Charset Los sets de caracteres que el navegador cliente espera. Accept-Encoding Las codificaciónes de datos (por ejemplo gzip) que el navegador cliente soporta y conoce. Así el servlet puede consultar explícitamente información de codificación y así aprovechar las ventajas de HTML gzipeado indicándolo en la cabecera de respuesta Content-Encoding.

39 Servlets: Recogiendo la información de usuario Accept-Language El lenguaje que el navegador cliente espera. Authorization Información de autentificación, que generalmente se crea como respuesta a una cabecera WWW Authenticate enviada desde el servidor. Connection Indica si se va a usar conexión persistente. Si un servlet recibe el valor Keep-Alive o una petición con una línea indicando HTTP 1.1 podrá hacer uso de las ventajas que estas ofrecen ahorrando tiempo en páginas con muchos elementos pequeños como imágenes o applets. El servlet ha de indicar el tamaño del contenido a enviar como respuesta mediante la cabecera Content-Length. Para ello se puede usar la clase ByteArrayOutputStream y al final enviar todos los datos. Content-Length Usada en los mensajes POST para indicar el tamaño de los datos.

40 Servlets: Recogiendo la información de usuario Cookie Una cabecera muy importante para envío de información. From La dirección de del cliente. Host El host y el puerto sacados de la URL original. If-Modified-Since Para indicar que solo han de enviarse documentos posteriores al actual. Si no es así, se envía una respuesta 304 "Not Modified". Pragma Si contiene el valor no-cache indica que el servidor ha de enviar una nueva copia del documento. Referer La URL de la página que contenía el link que el cliente siguió para llegar a la pagina actual. User-Agent El tipo de navegador que usa el cliente. Es útil si se va enviar contenido especifico para un tipo de navegador. UA-Pixels, UA-Color, UA-OS, UA-CPU Cabeceras no estándar enviadas desde IE indicando el tamaño de pantalla, la profundidad de color, el SO y el tipo de cpu usado en el cliente.

41 Servlets: Recogiendo la información de usuario Los métodos para acceder a estas cabeceras son: getHeader de HttpServletRequest que devuelve un String. getHeader de HttpServletRequest que devuelve un String. getHeaderNames de HttpServletsRequest que devuelve un Enumeration de strings. getHeaderNames de HttpServletsRequest que devuelve un Enumeration de strings. Puede que algunos clientes recojan información de un servlet. Para ello se puede hacer polimorfismo del método getServletInfo que debe devolver un String. Revisar: examples\servlets\ej8_listheaders_servlet

42 Servlets: Políticas de acceso concurrente (threading) Los servlets están diseñados para soportar múltiples accesos simultáneos por defecto. El problema puede surgir cuando se hace uso de un recurso compartido. Se exponen soluciones a poder considerar: Hacer que el servlet permita un único acceso cada vez. Hacer que el servlet permita un único acceso cada vez. Hacer que el recurso sea el que posea la política de acceso concurrente. Hacer que el recurso sea el que posea la política de acceso concurrente.

43 Servlets: Políticas de acceso concurrente (threading) Para hacer que el servlet trate a un cliente cada vez, únicamente hay que hacer que nuestra clase, además de heredar de HttpServlet, implemente la interfaz SingleThreadModel que es una interfaz sin métodos.

44 Servlets: Respondiendo: Códigos de estado La respuesta esta compuesta por: Una línea de estado ( 200 OK ). Una línea de estado ( 200 OK ). Cabeceras de respuesta. Cabeceras de respuesta. Una línea en blanco. Una línea en blanco. Un documento. Un documento. La línea de estado indica la versión del protocolo http y un código de estado para indicar diferente información al cliente: Enviar al usuario a otros enlaces. Enviar al usuario a otros enlaces. Indicar que el contenido es una imagen, PDF... Indicar que el contenido es una imagen, PDF... Requerir un password. Requerir un password.

45 Servlets: Respondiendo: Códigos de estado La línea de estado consta de: Versión del protocolo HTTP: La suministra el servidor. Versión del protocolo HTTP: La suministra el servidor. El código de estado: Lo podemos indicar nosotros. Usar el método setStatus de HttpServletResponse. El código de estado: Lo podemos indicar nosotros. Usar el método setStatus de HttpServletResponse. Un mensaje: Suele estar relacionado con el código de estado. Un mensaje: Suele estar relacionado con el código de estado. El código debe indicarse antes de cualquier acceso al PrintWriter.

46 Ejemplo HTTP Response HTTP/ OK Date: Thu, 06 Aug :00:15 GMT Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun :23:24 GMT Content-Length: 6821 Connection: close Content-Type: text/html Cuerpo de la respuesta...

47 Servlets: Respondiendo: Códigos de estado Aunque setStatus es la manera más flexible, hay unos códigos muy comunes y unos métodos para usarlos: sendError envía un mensaje de error 404. sendError envía un mensaje de error 404. sendRedirect que se usa para enviar un mensaje 302 conjuntamente con la cabecera de respuesta Location indicando la nueva URL. sendRedirect que se usa para enviar un mensaje 302 conjuntamente con la cabecera de respuesta Location indicando la nueva URL. Es importante conocer la versión de protocolo HTTP soportado con getProtocol de HttpServletRequest.

48 Servlets: Respondiendo: Códigos de estado 100Continue Continuar con la petición parcial. (HTTP 1.1) 101 Switching Protocols El servidor deberá responder con la cabecera Upgrade y así cambiar de protocolo. (HTTP 1.1) 200OK Todo correcto. Por defecto en los servlets. 201Created El servidor ha creado un documento. En la cabecera Location se incluye la URL. 202Accepted La petición ha sido aceptada pero el procesamiento no ha terminado.

49 Servlets: Respondiendo: Códigos de estado 203 Non-Authoritative Information El documento ha sido devuelto correctamente pero alguna cabecera es incorrecta (HTTP 1.1) 204 No Content No hay nuevo documento. El cliente debe presentar el actual. 205 Reset Content No hay nuevo documento pero el cliente debe refrescar el actual. Para resetear las variables CGI de los formularios (HTTP 1.1) 206 Partial Content El cliente envio una petición parcial con una cabecera Range y el servidor la ha rellenado. (HTTP 1.1) 300 Multiple Choices El documento que se ha solicitado se puede encontrar en múltiples sitios. La preferida o por defecto del servidor se ha de indicar en la cabecera Location.

50 Servlets: Respondiendo: Códigos de estado 301 Moved Permanently El documento solicitado está en otro sitio. Se indica la URL en la cabecera Location. El navegador debería ir directamente. 302Found Similar a 301, pero la nueva URL debe entenderse como temporal. "Moved Temporarily" en HTTP 1.0, con la constante SC_MOVED_TEMPORARILY de HttpServletResponse, (no SC_FOUND). Tambien se puede usar el método directo response.sendRedirect(url). 303 See Other Lo mismo que 301/302. (HTTP 1.1) 304 Not Modified Cuando se determina que el cliente hace una petición condicional y se quiere indicar que el documento que actualmente posee es el correcto (e.i. como respuesta a una cabecera If- Modified-Since ). 305 Use Proxy El documento solicitado debería ser accedido por el proxy indicado en la cabecera Location. (HTTP 1.1)

51 Servlets: Respondiendo: Códigos de estado 307 Temporary Redirect Identico a 302. No hay una variable en HttpServletResponse. (HTTP 1.1) 400 Bad Request petición con sintaxis errónea. 401Unauthorized El cliente intento acceder a una pagina protegida con password sin la autorizacion necesaria. La respuesta incluye una cabecera WWW-Authenticate para que el cliente introduzca los datos en un dialogo que envia sus datos en la cabecera Authorization. 403Forbidden El recurso no esta disponible por un error en el servidor (permisos, acceso erroneo…). 404 Not Found El recurso no pudo ser accedido. Posee un método propio HttpServletResponse : sendError(message).

52 Servlets: Respondiendo: Códigos de estado 405 Method Not Allowed El método de petición ( GET, POST, HEAD, DELETE, PUT, TRACE, etc.) no es permitido para el recurso solicitado. (HTTP 1.1) 406 Not Acceptable Incompatibilidad de tipo MIME. (HTTP 1.1) 407 Proxy Authentication Required Lo mismo que 401, pero se obliga a usar una cabecera Proxy-Authenticate por parte del servidor. (HTTP 1.1) 408 Request Timeout El cliente tardo demasiado en enviar una petición. (HTTP 1.1) 409Conflict Generalmente en método PUT. Suele enviarse si se ha solicitado una versión incorrecta de un recurso. (HTTP 1.1)

53 Servlets: Respondiendo: Códigos de estado 410Gone El documento no esta disponible. La diferencia con 404 es que tiene carácter temporal. (HTTP 1.1) 411 Length Required El servidor no puede procesar la petición si el usuario no envía una cabecera Content-Length. (HTTP 1.1) 412 Precondition Failed Alguna precondición especificada en las cabeceras de petición era falsa. (HTTP 1.1) 413 Request Entity Too Large El documento solicitado es mayor de lo que el servidor esta dispuesto a gestionar. Si el servidor estará dispuesto de gestionarlo mas tarde deberá incluir una cabecera de respuesta Retry- After. (HTTP 1.1) 414 Request URI Too Long La URL es demasiado larga. (HTTP 1.1)

54 Servlets: Respondiendo: Códigos de estado 415 Unsupported Media Type La petición esta en un formato desconocido. (HTTP 1.1) 416 Requested Range Not Satisfiable El cliente introdujo una cabecera Range inadecuada en su petición. (HTTP 1.1) 417 Expectation Failed El valor de la cabecera de petición Expect no se ha podido contrastar. (HTTP 1.1) 500 Internal Server Error Un mensaje genérico para indicar que el servidor está confuso. 501 Not Implemented El servidor no posee la funcionalidad para completar la petición. Por ejemplo si el usuario ha hecho una petición PUT que el servlet no es capaz de procesar. 502 Bad Gateway Usado por servidores que funcionan como proxies o puertas de enlace para indicar que recibió una respuesta incorrecta por el servidor remoto.

55 Servlets: Respondiendo: Códigos de estado 503 Service Unavailable El servidor no puede responder por mantenimiento o colapso de conexiones. Se puede enviar conjuntamente a una cabecera Retry-After. 504 Gateway Timeout Usado por servidores que funcionan como proxies o puestas de enlace para indicar que no recibido respuesta del servidor remoto en un tiempo adecuado. (HTTP 1.1) 505 HTTP Version Not Supported El servidor no es capaz de responder a la version del protocolo http indicado en la petición. (HTTP 1.1)

56 Estructura de Directorio El directorio raíz contiene un directorio especial llamado WEB-INF. Este directorio no es visible para los usuarios de la aplicación, sin embargo, aquí se guardan todas las clases, servlets y archivos JAR de los que conste una aplicación web. Dentro del directorio WEB-INF hay dos subdirectorios y un archivo que son de especial interés: * classes - Este directorio contiene servlets y otras clases. Estas clases se hayan automáticamente por el cargador de servlets como si estuvieran en la ruta de clases (CLASSPATH). Puede incluir subdirectorios que correspondan a la estructura de paquetes. * classes - Este directorio contiene servlets y otras clases. Estas clases se hayan automáticamente por el cargador de servlets como si estuvieran en la ruta de clases (CLASSPATH). Puede incluir subdirectorios que correspondan a la estructura de paquetes. * lib - Es similar al directorio anterior, pero contiene únicamente archivos JAR. * lib - Es similar al directorio anterior, pero contiene únicamente archivos JAR. * web.xml - Es un documento XML llamado descriptor de despliegue. Tiene una estructura rigurosamente definida que se usa para configurar los servlets y otros recursos que forman parte de una aplicación web. * web.xml - Es un documento XML llamado descriptor de despliegue. Tiene una estructura rigurosamente definida que se usa para configurar los servlets y otros recursos que forman parte de una aplicación web. (ver aplicacion y ejemplo para mayor claridad)

57 Servlet Son flexibles y muy potentes Sin embargo, es muy lioso mezclar código de marcado y código Java A menudo hay más código de marcado que código Java A menudo hay más código de marcado que código Java SOLUCIÓN JSP


Descargar ppt "Servlets. Qué es un Servlet Los Servlets son módulos que extienden los servidores orientados a petición-respuesta Como los servidores web compatibles."

Presentaciones similares


Anuncios Google