Servlets. Qué es un Servlet Los Servlets son módulos que extienden los servidores orientados a...

57
Servlets Servlets

Transcript of Servlets. Qué es un Servlet Los Servlets son módulos que extienden los servidores orientados a...

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

ServletsServlets

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

Qué es un ServletQué es un Servlet

Los Servlets son módulos que extienden los Los Servlets son módulos que extienden los servidores orientados a petición-respuestaservidores orientados a petición-respuesta

Como los servidores web compatibles con Java. Como los servidores web compatibles con Java. Por ejemplo, un servlet podría ser responsable Por ejemplo, un servlet podría ser responsable de tomar los datos de un formulario de entrada de tomar los datos de un formulario de entrada de pedidos en HTML y aplicarle la lógica de de pedidos en HTML y aplicarle la lógica de negocios utilizada para actualizar la base de negocios utilizada para actualizar la base de datos de pedidos de la compañia.datos de pedidos de la compañia.

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

Que es un ServletQue es un Servlet

Programas en Java que se ejecutan en un Programas en Java que se ejecutan en un servidor HTTP (servidor Web)servidor HTTP (servidor Web)

Actúan como capa intermedia entre:Actúan como capa intermedia entre: Petición provPetición proveeniente de un Navegador Web u niente de un Navegador Web u

otro cliente HTTPotro cliente HTTP Bases de Datos o Aplicaciones en el servidor Bases de Datos o Aplicaciones en el servidor

HTTPHTTP

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

Qué puede hacer un servletQué puede hacer un servlet

Leer los datos enviados por un usuarioLeer los datos enviados por un usuario Usualmente de formularios en páginas WebUsualmente de formularios en páginas Web Pueden venir de applets de Java o programas Pueden venir de applets de Java o programas

cliente HTTP.cliente HTTP.

Buscar cualquier otra información sobre la Buscar cualquier otra información sobre la petición que venga incluida en estapetición que venga incluida en esta Detalles de las capacidades del navegador, Detalles de las capacidades del navegador,

cookies, nombre del host del cliente, etc.cookies, nombre del host del cliente, etc.

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

Qué puede hacer un servletQué puede hacer un servlet

Generar los resultadosGenerar los resultados Puede requerir consults a Base de Datos, invocar a Puede requerir consults a Base de Datos, invocar a

otras aplicaciones, computar directamente la otras aplicaciones, computar directamente la respuesta, etc.respuesta, etc.

Dar formato a los resultados en un documentoDar formato a los resultados en un documento Incluir la información en una página HTMLIncluir la información en una página HTML

Establecer los parámetros de la respuesta HTTPEstablecer los parámetros de la respuesta HTTP Decirle al navegador el tipo de documento que se va Decirle al navegador el tipo de documento que se va

a devolver, establecer las cookies, etc.a devolver, establecer las cookies, etc.

Enviar el documento al clienteEnviar el documento al cliente

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

Cuándo y por qué usar ServletsCuándo y por qué usar Servlets

Muchas peticiones desde navegador se satisfacen retornando Muchas peticiones desde navegador se satisfacen retornando documentos HTML estáticosdocumentos HTML estáticos, es decir, que están en ficheros, es decir, que están en ficherosEn ciertos casos, es necesario generar las páginas HTML para En ciertos casos, es necesario generar las páginas HTML para cada petición:cada petición:

Página Web basada en datos enviados por el clientePágina Web basada en datos enviados por el clienteMotores de búsqueda, confirmación de pedidosMotores de búsqueda, confirmación de pedidos

Página Web derivada de datos que cambian con frecuenciaPágina Web derivada de datos que cambian con frecuenciaInforme del tiempo o noticias de última horaInforme del tiempo o noticias de última hora

Página Web que usa información de bases de datos Página Web que usa información de bases de datos corporativas u otras fuentes del la parte del servidorcorporativas u otras fuentes del la parte del servidor

Comercio electrónico: precios y disponibilidadesComercio electrónico: precios y disponibilidades

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

Ventajas sobre CGIVentajas sobre CGI

EficienciaEficiencia CGI corto: el proceso de arranque de cada proceso puede dominar el CGI corto: el proceso de arranque de cada proceso puede dominar el

tiempo de ejecucióntiempo de ejecución N peticiones simultáneas: el código del CGI se carga en memoria N N peticiones simultáneas: el código del CGI se carga en memoria N

vecesveces Al terminar el proceso, el CGI se cierra: difícil persistencia de datos Al terminar el proceso, el CGI se cierra: difícil persistencia de datos

(conexiones a BD, caché...)(conexiones a BD, caché...)ConvenienciaConveniencia

Los Servlets tienen una infraestructura muy amplia para la tratar Los Servlets tienen una infraestructura muy amplia para la tratar automáticamente datos de formularios HTML, gestionar sesiones y automáticamente datos de formularios HTML, gestionar sesiones y otras utilidades de alto nivel.otras utilidades de alto nivel.

PotenciaPotencia Los Servlets pueden comunicar directamente con el navegador WebLos Servlets pueden comunicar directamente con el navegador Web Pueden mantener datos entre peticiones, simplificando el seguimiento Pueden mantener datos entre peticiones, simplificando el seguimiento

de sesiones y operaciones de cachéde sesiones y operaciones de caché Varios Servlets pueden compartir datosVarios Servlets pueden compartir datos

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

Ventajas sobre CGIVentajas sobre CGI

PortabilidadPortabilidad 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 servidoresPueden funcionar sin ningún cambio en diferentes servidores

SeguridadSeguridad CGI adolecen de vulnerabilidades porque:CGI adolecen de vulnerabilidades porque:

Se ejecutan en el shell del SOSe ejecutan en el shell del SOPueden sufrir overflows por el lenguaje (C, C++, ...)Pueden sufrir overflows por el lenguaje (C, C++, ...)

Los Servlets no sufren estos problemasLos Servlets no sufren estos problemasEconomíaEconomía

Añadir soporte para Servlet a un servidor Web ya disponible Añadir soporte para Servlet a un servidor Web ya disponible tiene muy poco coste extratiene muy poco coste extra

Existen ciertos servidores web y servidores de servlet gratuitos Existen ciertos servidores web y servidores de servlet gratuitos para tráficos pequeñospara tráficos pequeños

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

Arquitectura De Contenedor Arquitectura De Contenedor WebWeb

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

Funcionamiento de un ServletFuncionamiento de un Servlet

Recibir Petición

¿Está el Servidor

Cargado?

¿Es el servidor

reciente?

Procesar Petición

Enviar Respuesta

Cargar Servlet

NO

NO

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

Arquitectura de Contenedor Arquitectura de Contenedor WebWeb

El Web Container puede ser usado en El Web Container puede ser usado en conjunto con un servicio HTTP o puede conjunto con un servicio HTTP o puede ser usado como standalone Web Serveser usado como standalone Web Serve

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

Modo de ComunicacionModo de Comunicacion

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

Modo de ComunicaciónModo de Comunicación

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

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

Estructura de un HttpServletEstructura de un HttpServletimport java.io.*;import java.io.*;//Se importan los paquetes con las clases para Servlets y HttpServlets//Se importan los paquetes con las clases para Servlets y HttpServletsimport javax.servlet.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.http.*;

public class ServletTemplate extends HttpServlet{public class ServletTemplate extends HttpServlet{

//El método //El método doGetdoGet responde a peticiones mediante el método GET 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 “// El objeto “requestrequest” se usa para leer los “HTTP headers” que llegan” 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 “// El objeto “responseresponse” se usa para especificar “HTTP status codes” y ” 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 “// El objeto “outout” se usa para enviar contenido al navegador” se usa para enviar contenido al navegador

}}

//El método //El método doPostdoPost responde a peticiones mediante el método POST 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); }}}}

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

Estructura de un HttpServletEstructura de un HttpServlet

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

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

HttpServletHttpServlet

Hereda de Hereda de GenericServletGenericServletTiene 6 métodos Tiene 6 métodos doXXXdoXXX que son invocados que son invocados cada vez que el correspondiente comando cada vez que el correspondiente comando HTTP es recibido:HTTP es recibido: doPostdoPost doPutdoPut doGetdoGet doDeletedoDelete doOptionsdoOptions doTracedoTrace

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

Invocacion de un ServletInvocacion de un ServletInvocación de un ServletInvocación de un Servlet

Desde la barra de direcciones del navegadorDesde la barra de direcciones del navegador::

http://http://hostnamehostname::portport/servlet//servlet/Nombre_ServletNombre_ServletEjemplo:Ejemplo:

De esta forma se invoca el servlet mediante el método GET siempreDe esta forma se invoca el servlet mediante el método GET siempre

Desde un formularioDesde un formulario::La dirección del servlet debe ir en el La dirección del servlet debe ir en el actionaction

<FORM action=“http://<FORM action=“http://hostnamehostname::portport/servlet//servlet/Nombre_Servlet” Nombre_Servlet” method=“POST”>method=“POST”>......</FORM></FORM>

El servlet se invoca al hacer Submit y lo hace mediante el método El servlet se invoca al hacer Submit y lo hace mediante el método definido en el formulario definido en el formulario Al servlet se le pasan los valores de los camposAl servlet se le pasan los valores de los campos

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

MetodosMetodos

Los métodos en los que delega el método Los métodos en los que delega el método service las peticiones HTTP, incluyenservice las peticiones HTTP, incluyen

* doGet, para manejar GET, GET condicional, * doGet, para manejar GET, GET condicional, y peticiones de HEADy 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

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

Manejar peticiones GETManejar peticiones GET

Manejar peticiones GET implica sobreescribir el método doGet. El siguiente ejemplo Manejar peticiones GET implica sobreescribir el método doGet. El siguiente ejemplo muestra a BookDetailServlet haciendo esto. Los métodos explicados en Peticiones y muestra a BookDetailServlet haciendo esto. Los métodos explicados en Peticiones y Respuestas se muestran en negrita.Respuestas se muestran en negrita.

El servlet extiende la clase HttpServlet y sobreescribe el método doGet. Dentro del 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 método doGet, el método getParameter obtiene los argumentos esperados por el servlet.servlet.

Para responder al cliente, el método doGet utiliza un Writer del objeto Para responder al cliente, el método doGet utiliza un Writer del objeto HttpServletResponse para devolver datos en formato texto al cliente. Antes de 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 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. método doGet, después de haber enviado la respuesta, el Writer se cierra.

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

Manejar Peticiones GETManejar Peticiones GETpublic class BookDetailServlet extends HttpServlet {public class BookDetailServlet extends HttpServlet {

public void doGet (HttpServletRequest request,public void doGet (HttpServletRequest request, HttpServletResponse response)HttpServletResponse response) throws ServletException, IOExceptionthrows ServletException, IOException {{ ......

// selecciona el tipo de contenido en la cabecera antes de acceder a Writer// 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// Luego escribe la respuesta out.println("<html>" +out.println("<html>" + "<head><title>Book Description</title></head>" +"<head><title>Book Description</title></head>" + ...);...);

//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("</body></html>");out.println("</body></html>"); out.close();out.close(); }} ......}}

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

Manejar Peticiones POSTManejar Peticiones POST

Manejar peticiones POST implica sobreescribir el método doPost. Manejar peticiones POST implica sobreescribir el método doPost. El siguiente ejemplo muestra a ReceiptServlet haciendo esto. De El siguiente ejemplo muestra a ReceiptServlet haciendo esto. De nuevo, los métodos explicados en Peticiones y Respuestas se nuevo, los métodos explicados en Peticiones y Respuestas se muestran en negrita.muestran en negrita.

El servlet extiende la clase HttpServlet y sobreescribe el método El servlet extiende la clase HttpServlet y sobreescribe el método doPost. Dentro del método doPost, el método getParameter obtiene doPost. Dentro del método doPost, el método getParameter obtiene los argumentos esperados por el servlet.los argumentos esperados por el servlet.

Para responder al cliente, el método doPost utiliza un Writer del Para responder al cliente, el método doPost utiliza un Writer del objeto HttpServletResponse para devolver datos en formato texto al objeto HttpServletResponse para devolver datos en formato texto al cliente. Antes de acceder al writer, el ejemplo selecciona la cliente. Antes de acceder al writer, el ejemplo selecciona la cabecera del tipo de contenido. Al final del método doPost, después cabecera del tipo de contenido. Al final del método doPost, después de haber enviado la respuesta, el Writer se cierra. de haber enviado la respuesta, el Writer se cierra.

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

Manejar Peticiones POSTManejar Peticiones POSTpublic class ReceiptServlet extends HttpServlet { public class ReceiptServlet extends HttpServlet {

public void doPost(HttpServletRequest request,public void doPost(HttpServletRequest request, HttpServletResponse response)HttpServletResponse response)

throws ServletException, IOExceptionthrows 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("<html>" +out.println("<html>" + "<head><title> Receipt </title>" +"<head><title> Receipt </title>" + ...);...); out.println("<h3>Thank you for purchasing your books from us " +out.println("<h3>Thank you for purchasing your books from us " + request.getParameter("cardname") +request.getParameter("cardname") + ...);...); out.close();out.close(); }} ......}}

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

Ciclo de Vida de un servletCiclo de Vida de un servlet

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

Ciclo de Vida de un ServletCiclo de Vida de un Servlet

Viene dado por tres métodos: Viene dado por tres métodos: initinit, , serviceservice y y destroydestroyINICIALIZACIÓNINICIALIZACIÓN: Una única llamada al método “: Una única llamada al método “initinit” ” por parte del servidor. Incluso se pueden recoger unos por parte del servidor. Incluso se pueden recoger unos parametros concretos con “parametros concretos con “getInitParametergetInitParameter” de ” de ““ServletConfigServletConfig”.”.SERVICIOSERVICIO: una llamada a : una llamada a service()service() por cada por cada invocación al servletinvocación al servlet

¡Cuidado!¡Cuidado! El contenedor es multihilo El contenedor es multihilo

DESTRUCCIÓNDESTRUCCIÓN: Cuando todas las llamadas desde el : Cuando todas las llamadas desde el cliente cesen o un temporizador del servidor así lo cliente cesen o un temporizador del servidor así lo indique. Se usa el método “indique. Se usa el método “destroydestroy””Revisar documentación de la clase Revisar documentación de la clase javax.servlet.Servletjavax.servlet.Servlet

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

Servlets: JerarquíaServlets: Jerarquía

La jerarquía de clases java es...La jerarquía de clases java es...

Únicamente hay que hacer Únicamente hay que hacer polimorfismo de los métodos que se polimorfismo de los métodos que se quieran tratar.quieran tratar.

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

Las APIsLas APIs

Dos paquetes permiten la programación Dos paquetes permiten la programación de servlets:de servlets: javax.servletjavax.servlet javax.servlet.httpjavax.servlet.http

Revisar documentación:Revisar documentación: Arrancar TomcatArrancar Tomcat Visitar: Visitar: http://http://localhostlocalhost:8080:8080

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

Servlets: Operaciones Servlets: Operaciones duraderasduraderas

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

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

Servlets: Operaciones Servlets: Operaciones duraderasduraderas

Necesitaremos por tanto:Necesitaremos por tanto: Mantener un seguimiento de las tareas (threads) que Mantener un seguimiento de las tareas (threads) que

se estén ejecutando en el método “se estén ejecutando en el método “serviceservice”” Proporcionar una finalización correcta haciendo que Proporcionar una finalización correcta haciendo que

los procesos largos que aun no hayan concluido los procesos largos que aun no hayan concluido puedan terminar correctamente en el método puedan terminar correctamente en el método ““destroydestroy” del servlet.” del servlet.

En ciertos casos poder terminar los procesos que aun En ciertos casos poder terminar los procesos que aun siguen en ejecución si es necesario.siguen en ejecución si es necesario.

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

Clase Clase GenericServletGenericServlet

El uso de la interfaz El uso de la interfaz ServletServlet tiene dos tiene dos inconvenientes:inconvenientes: Hay que proveer implementaciones de los Hay que proveer implementaciones de los

cinco métodos de cinco métodos de ServletServlet Hay que cachear la referencia a Hay que cachear la referencia a ServletConfigServletConfig pasada como parámetro pasada como parámetro

La clase La clase GenericServletGenericServlet provee una provee una implementación vacía de los 5 métodos de implementación vacía de los 5 métodos de Servlet y recuerda Servlet y recuerda ServletConfigServletConfig

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

Paquete Paquete javax.servlet.httpjavax.servlet.http

Normalmente siempre vamos a trabajar con él Normalmente siempre vamos a trabajar con él cuando programemos servlets.cuando programemos servlets.Sus miembros y métodos son más convenientes Sus miembros y métodos son más convenientes y ofrecen más funcionalidady ofrecen más funcionalidadPrincipalmente vamos a tratar con tres clases:Principalmente vamos a tratar con tres clases: HttpServletHttpServlet HttpServletRequestHttpServletRequest HttpServletResponseHttpServletResponse

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

Servlets: MétodosServlets: Métodos

Por defecto retornan Por defecto retornan BAD_REQUEST(400)BAD_REQUEST(400)

Son llamados desde el método Son llamados desde el método ““serviceservice”.”.Reciben interfaces instanciadas:Reciben interfaces instanciadas: ““HttpServletRequestHttpServletRequest” para manejo de la ” para manejo de la

informacion enviada por el usuario.informacion enviada por el usuario. ““HttpServletResponseHttpServletResponse” para poder enviar ” para poder enviar

una respuesta en forma de pagina web.una respuesta en forma de pagina web.

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

Peticiónes y RespuestasPeticiónes y Respuestas

En el método En el método service()service() los parámetros: los parámetros: ServletRequestServletRequest representa la petición del cliente y representa la petición del cliente y ServletResponseServletResponse la respuesta del servidor la respuesta del servidorServletRequestServletRequest tiene los siguientes métodos: tiene los siguientes métodos:

getParameterNamesgetParameterNames getParametergetParameter getRemoteAddressgetRemoteAddress getRemoteHostgetRemoteHostServletResponseServletResponse tiene entre otros el método: tiene entre otros el método:

getWritergetWriterRevisar Revisar examples\servlets\examples\servlets\ej5_requestresponse_servletej5_requestresponse_servlet

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

Servlets: Respondiendo en Servlets: Respondiendo en HTMLHTML

2 pasos:2 pasos: Indicar una cabecera de respuesta de contenido Indicar una cabecera de respuesta de contenido

(antes de cualquier tipo de respuesta)(antes de cualquier tipo de respuesta)Una manera es usando el método “Una manera es usando el método “setHeadersetHeader” de ” de ““HttpServletResponseHttpServletResponse”.”.Al ser un proceso tan común existe un método que nos lo Al ser un proceso tan común existe un método que nos lo soluciona directamente: “soluciona directamente: “setContentTypesetContentType” de ” de ““HttpServletResponseHttpServletResponse”.”.

Crear y enviar código HTML válido.Crear y enviar código HTML válido.

Revisar Revisar examples\servlets\examples\servlets\ej6_dogetdopost_servletej6_dogetdopost_servlet

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

Ejemplo Ejemplo doGet()doGet() y y doPost()doPost()

// compile: javac -classpath %TOMCAT_HOME%\common\lib\servlet-api.jar // compile: javac -classpath %TOMCAT_HOME%\common\lib\servlet-api.jar DoGetDoPostServlet.javaDoGetDoPostServlet.java

import javax.servlet.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.http.*;import java.io.*;import java.io.*;

public class DoGetDoPostServlet extends HttpServlet {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("<HTML>");out.println("<HTML>"); out.println("<HEAD>");out.println("<HEAD>"); out.println("<TITLE>The GET method</TITLE>");out.println("<TITLE>The GET method</TITLE>"); out.println("</HEAD>");out.println("</HEAD>"); out.println("<BODY>");out.println("<BODY>"); 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("<BR>");out.println("<BR>"); out.println("<FORM METHOD=POST>");out.println("<FORM METHOD=POST>"); out.println("<INPUT TYPE=SUBMIT VALUE=Submit>");out.println("<INPUT TYPE=SUBMIT VALUE=Submit>"); out.println("</FORM>");out.println("</FORM>"); out.println("</BODY>");out.println("</BODY>"); out.println("</HTML>");out.println("</HTML>");

}}

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

Ejemplo Ejemplo doGet()doGet() y y doPost()doPost()public void 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("<HTML>");out.println("<HTML>"); out.println("<HEAD>");out.println("<HEAD>"); out.println("<TITLE>The POST method</TITLE>");out.println("<TITLE>The POST method</TITLE>"); out.println("</HEAD>");out.println("</HEAD>"); out.println("<BODY>");out.println("<BODY>"); out.println("The servlet has received a POST. Thank you.");out.println("The servlet has received a POST. Thank you."); out.println("</BODY>");out.println("</BODY>"); out.println("</HTML>");out.println("</HTML>"); }}}}

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

Servlets: Recogiendo la Servlets: Recogiendo la información de usuario.información de usuario.

2 formas de envío de información: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 En los antiguos CGIs el parseo era muy complejo. En Servlets usar complejo. En Servlets usar ““getParametergetParameter” de ” de ““HttpServletRequestHttpServletRequest” que devuelve “” ” que devuelve “” (si no hay valor) o (si no hay valor) o nullnull (si no existe). (si no existe).

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

Servlets: Recogiendo la Servlets: Recogiendo la información de usuarioinformación de usuario

Si el parametro tiene mas de un valor se usa Si el parametro tiene mas de un valor se usa ““getParameterValuesgetParameterValues” de “” de “HttpServletRequestHttpServletRequest” ” que devuelve un array de strings.que devuelve un array de strings.Los nombres de los parametros son accesibles mediante Los nombres de los parametros son accesibles mediante ““getParameterNamesgetParameterNames” de “” de “HttpServletRequestHttpServletRequest” ” que devuelve un Enumeration de strings.que devuelve un Enumeration de strings.Se puede leer la línea directamente con “Se puede leer la línea directamente con “getReadergetReader” o ” o ““getInputStreamgetInputStream” de “” de “HttpServletRequestHttpServletRequest”.”.Revisar: Revisar: examples\servlets\examples\servlets\ej7_listparams_servletej7_listparams_servlet

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

Servlets: Recogiendo la Servlets: Recogiendo la información de usuarioinformación de usuario

CabecerasCabeceras: Además de la información de la : Además de la información de la línea de petición, datos añadidos opcionales línea de petición, datos añadidos opcionales (excepto “(excepto “Content-LengthContent-Length” en los métodos ” en los métodos POST).POST).

AcceptAccept Los tipos del formato MIME que acepta el navegador cliente. Los tipos del formato MIME que acepta el navegador cliente. Accept-CharsetAccept-Charset Los sets de caracteres que el navegador cliente Los sets de caracteres que el navegador cliente

espera.espera.Accept-EncodingAccept-Encoding Las codificaciónes de datos (por ejemplo gzip) Las codificaciónes de datos (por ejemplo gzip)

que el navegador cliente soporta y conoce. Así el servlet puede que el navegador cliente soporta y conoce. Así el servlet puede consultar explícitamente información de codificación y así consultar explícitamente información de codificación y así aprovechar las ventajas de HTML gzipeado indicándolo en la aprovechar las ventajas de HTML gzipeado indicándolo en la cabecera de respuesta cabecera de respuesta Content-Encoding.Content-Encoding.

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

Servlets: Recogiendo la Servlets: Recogiendo la información de usuarioinformación de usuario

Accept-LanguageAccept-Language El lenguaje que el navegador cliente espera. El lenguaje que el navegador cliente espera.AuthorizationAuthorization Información de autentificación, que generalmente se Información de autentificación, que generalmente se

crea como respuesta a una cabecera crea como respuesta a una cabecera WWW AuthenticateWWW Authenticate enviada enviada desde el servidor. desde el servidor.

ConnectionConnection Indica si se va a usar conexión persistente. Si un servlet Indica si se va a usar conexión persistente. Si un servlet recibe el valor recibe el valor Keep-AliveKeep-Alive o una petición con una línea indicando o una petición con una línea indicando HTTP 1.1 podrá hacer uso de las ventajas que estas ofrecen HTTP 1.1 podrá hacer uso de las ventajas que estas ofrecen ahorrando tiempo en páginas con muchos elementos pequeños ahorrando tiempo en páginas con muchos elementos pequeños como imágenes o applets. El servlet ha de indicar el tamaño del como imágenes o applets. El servlet ha de indicar el tamaño del contenido a enviar como respuesta mediante la cabecera contenido a enviar como respuesta mediante la cabecera Content-LengthContent-Length. Para ello se puede usar la clase . Para ello se puede usar la clase ByteArrayOutputStreamByteArrayOutputStream y al final enviar todos los datos. y al final enviar todos los datos.Content-LengthContent-Length Usada en los mensajes POST para indicar el Usada en los mensajes POST para indicar el tamaño de los datos.tamaño de los datos.

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

Servlets: Recogiendo la Servlets: Recogiendo la información de usuarioinformación de usuario

CookieCookie Una cabecera muy importante para envío de información. Una cabecera muy importante para envío de información.FromFrom La dirección de email del cliente. La dirección de email del cliente. HostHost El host y el puerto sacados de la URL original. El host y el puerto sacados de la URL original.If-Modified-SinceIf-Modified-Since Para indicar que solo han de enviarse Para indicar que solo han de enviarse

documentos posteriores al actual. Si no es así, se envía una documentos posteriores al actual. Si no es así, se envía una respuesta respuesta 304 "Not Modified"304 "Not Modified". .

PragmaPragma Si contiene el valor Si contiene el valor no-cacheno-cache indica que el servidor ha de indica que el servidor ha de enviar una nueva copia del documento.enviar una nueva copia del documento.

RefererReferer La URL de la página que contenía el link que el cliente siguió La URL de la página que contenía el link que el cliente siguió para llegar a la pagina actual.para llegar a la pagina actual.

User-AgentUser-Agent El tipo de navegador que usa el cliente. Es útil si se va El tipo de navegador que usa el cliente. Es útil si se va enviar contenido especifico para un tipo de navegador.enviar contenido especifico para un tipo de navegador.

UA-PixelsUA-Pixels, , UA-ColorUA-Color, , UA-OSUA-OS, , UA-CPUUA-CPU Cabeceras no estándar Cabeceras no estándar enviadas desde IE indicando el tamaño de pantalla, la profundidad enviadas desde IE indicando el tamaño de pantalla, la profundidad de color, el SO y el tipo de cpu usado en el cliente.de color, el SO y el tipo de cpu usado en el cliente.

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

Servlets: Recogiendo la Servlets: Recogiendo la información de usuarioinformación de usuario

Los métodos para acceder a estas cabeceras son:Los métodos para acceder a estas cabeceras son: ““getHeadergetHeader” de “” de “HttpServletRequestHttpServletRequest” que ” que

devuelve un String.devuelve un String. ““getHeaderNamesgetHeaderNames” de “” de “HttpServletsRequestHttpServletsRequest” ”

que devuelve un que devuelve un EnumerationEnumeration de strings. de strings.Puede que algunos clientes recojan información de un Puede que algunos clientes recojan información de un servlet. Para ello se puede hacer polimorfismo del método servlet. Para ello se puede hacer polimorfismo del método ““getServletInfogetServletInfo” que debe devolver un String.” que debe devolver un String.Revisar: Revisar: examples\servlets\examples\servlets\ej8_listheaders_servletej8_listheaders_servlet

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

Servlets: Políticas de acceso Servlets: Políticas de acceso concurrente (threading)concurrente (threading)

Los servlets están diseñados para soportar Los servlets están diseñados para soportar múltiples accesos simultáneos por defecto.múltiples accesos simultáneos por defecto.

El problema puede surgir cuando se hace uso El problema puede surgir cuando se hace uso de un recurso compartido.de un recurso compartido.

Se exponen soluciones a poder considerar:Se exponen soluciones a poder considerar: Hacer que el servlet permita un único acceso cada Hacer que el servlet permita un único acceso cada

vez.vez. Hacer que el recurso sea el que posea la política de Hacer que el recurso sea el que posea la política de

acceso concurrente.acceso concurrente.

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

Servlets: Políticas de acceso Servlets: Políticas de acceso concurrente (threading)concurrente (threading)

Para hacer que el servlet trate a un cliente Para hacer que el servlet trate a un cliente cada vez, únicamente hay que hacer que cada vez, únicamente hay que hacer que nuestra clase, además de heredar de nuestra clase, además de heredar de ““HttpServletHttpServlet”, implemente la interfaz ”, implemente la interfaz ““SingleThreadModelSingleThreadModel” que es una ” que es una interfaz sin métodos.interfaz sin métodos.

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

La respuesta esta compuesta por:La respuesta esta compuesta por: Una línea de estado (Una línea de estado (200 OK200 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 La línea de estado indica la versión del protocolo http y un código de estado para protocolo http y un código de estado para indicar diferente información al cliente: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.

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

La línea de estado consta de:La línea de estado consta de: Versión del protocolo HTTP:Versión del protocolo HTTP: La suministra el La suministra el

servidor.servidor. El código de estado: El código de estado: Lo podemos indicar Lo podemos indicar

nosotros. Usar el método nosotros. Usar el método ““setStatussetStatus” de ” de ““HttpServletResponseHttpServletResponse”.”.

Un mensaje: Un mensaje: Suele estar relacionado con el Suele estar relacionado con el código de estado.código de estado.

El código debe indicarse antes de cualquier El código debe indicarse antes de cualquier acceso al acceso al PrintWriterPrintWriter..

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

Ejemplo HTTP ResponseEjemplo HTTP Response

HTTP/1.1 200 OK HTTP/1.1 200 OK Date: Thu, 06 Aug 1998 12:00:15 GMT Date: Thu, 06 Aug 1998 12:00:15 GMT Server: Apache/1.3.0 (Unix) Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998 09:23:24 GMT Last-Modified: Mon, 22 Jun 1998 09:23:24 GMT Content-Length: 6821 Content-Length: 6821 Connection: close Connection: close Content-Type: text/html Content-Type: text/html

Cuerpo de la respuesta ... Cuerpo de la respuesta ...

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

Aunque “Aunque “setStatussetStatus” es la manera más ” es la manera más flexible, hay unos códigos muy comunes y unos flexible, hay unos códigos muy comunes y unos métodos para usarlos:métodos para usarlos: ““sendErrorsendError” envía un mensaje de error 404.” envía un mensaje de error 404. ““sendRedirectsendRedirect” que se usa para enviar un mensaje ” que se usa para enviar un mensaje

302 conjuntamente con la cabecera de respuesta 302 conjuntamente con la cabecera de respuesta ““LocationLocation” indicando la nueva URL.” indicando la nueva URL.

Es importante conocer la versión de protocolo Es importante conocer la versión de protocolo HTTP soportado con HTTP soportado con ““getProtocolgetProtocol” de ” de ““HttpServletRequestHttpServletRequest”.”.

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

100 100

Continue Continue

Continuar con la petición parcial. Continuar con la petición parcial. (HTTP 1.1) (HTTP 1.1)

101 101

Switching Protocols Switching Protocols

El servidor deberá responder con la cabecera El servidor deberá responder con la cabecera UpgradeUpgrade y así cambiar de protocolo. y así cambiar de protocolo. (HTTP 1.1) (HTTP 1.1)

200 200

OK OK

Todo correcto. Por defecto en los servlets. Todo correcto. Por defecto en los servlets.

201 201

Created Created

El servidor ha creado un documento. En la cabecera El servidor ha creado un documento. En la cabecera LocationLocation se incluye la URL. se incluye la URL.

202 202

Accepted Accepted

La petición ha sido aceptada pero el procesamiento no ha terminado. La petición ha sido aceptada pero el procesamiento no ha terminado.

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

203 203 Non-Authoritative Information Non-Authoritative Information El documento ha sido devuelto correctamente pero alguna cabecera es incorrecta (HTTP 1.1) El documento ha sido devuelto correctamente pero alguna cabecera es incorrecta (HTTP 1.1)

204 204 No Content No Content No hay nuevo documento. El cliente debe presentar el actual. No hay nuevo documento. El cliente debe presentar el actual.

205 205 Reset Content Reset Content No hay nuevo documento pero el cliente debe refrescar el actual. Para resetear las variables No hay nuevo documento pero el cliente debe refrescar el actual. Para resetear las variables CGI de los formularios (HTTP 1.1) CGI de los formularios (HTTP 1.1)

206 206 Partial Content Partial Content El cliente envio una petición parcial con una cabecera El cliente envio una petición parcial con una cabecera RangeRange y el servidor la ha rellenado. y el servidor la ha rellenado. (HTTP (HTTP 1.1) 1.1)

300 300 Multiple Choices Multiple Choices El documento que se ha solicitado se puede encontrar en múltiples sitios. La preferida o por 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 defecto del servidor se ha de indicar en la cabecera LocationLocation. .

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

301 301 Moved Permanently Moved Permanently El documento solicitado está en otro sitio. Se indica la URL en la cabecera El documento solicitado está en otro sitio. Se indica la URL en la cabecera LocationLocation. El navegador . El navegador debería ir directamente.debería ir directamente.

302 302 Found Found Similar a 301, pero la nueva URL debe entenderse como temporal. "Moved Temporarily" en HTTP 1.0, Similar a 301, pero la nueva URL debe entenderse como temporal. "Moved Temporarily" en HTTP 1.0, con la constante con la constante SC_MOVED_TEMPORARILY SC_MOVED_TEMPORARILY de de HttpServletResponseHttpServletResponse, (no , (no SC_FOUND)SC_FOUND). Tambien . Tambien se puede usar el método directo se puede usar el método directo response.sendRedirect(url)response.sendRedirect(url). .

303 303 See Other See Other Lo mismo que 301/302. Lo mismo que 301/302. (HTTP 1.1) (HTTP 1.1)

304 304 Not Modified Not Modified Cuando se determina que el cliente hace una petición condicional y se quiere indicar que el 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 documento que actualmente posee es el correcto (e.i. como respuesta a una cabecera If-If-Modified-SinceModified-Since). ).

305 305 Use Proxy Use Proxy El documento solicitado debería ser accedido por el proxy indicado en la cabecera El documento solicitado debería ser accedido por el proxy indicado en la cabecera LocationLocation. . (HTTP (HTTP 1.1) 1.1)

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

307 307 Temporary Redirect Temporary Redirect Identico a 302. No hay una variable en Identico a 302. No hay una variable en HttpServletResponseHttpServletResponse. . (HTTP 1.1) (HTTP 1.1)

400 400 Bad Request Bad Request petición con sintaxis errónea. petición con sintaxis errónea.

401 401 Unauthorized Unauthorized El cliente intento acceder a una pagina protegida con password sin la autorizacion necesaria. La El cliente intento acceder a una pagina protegida con password sin la autorizacion necesaria. La respuesta incluye una cabecera respuesta incluye una cabecera WWW-AuthenticateWWW-Authenticate para que el cliente introduzca los datos en para que el cliente introduzca los datos en un dialogo que envia sus datos en la cabecera un dialogo que envia sus datos en la cabecera AuthorizationAuthorization. .

403 403 Forbidden Forbidden El recurso no esta disponible por un error en el servidor (permisos, acceso erroneo…). El recurso no esta disponible por un error en el servidor (permisos, acceso erroneo…).

404 404 Not Found Not Found El recurso no pudo ser accedido. Posee un método propio El recurso no pudo ser accedido. Posee un método propio HttpServletResponseHttpServletResponse: : sendError(message).sendError(message).

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

405 405 Method Not Allowed Method Not Allowed El método de petición (El método de petición (GETGET, , POSTPOST, , HEADHEAD, , DELETEDELETE, , PUTPUT, , TRACETRACE, etc.) no es permitido para el , etc.) no es permitido para el recurso solicitado. recurso solicitado. (HTTP 1.1) (HTTP 1.1)

406 406 Not Acceptable Not Acceptable Incompatibilidad de tipo MIME. Incompatibilidad de tipo MIME. (HTTP 1.1) (HTTP 1.1)

407 407 Proxy Authentication Required Proxy Authentication Required Lo mismo que 401, pero se obliga a usar una cabecera Lo mismo que 401, pero se obliga a usar una cabecera Proxy-AuthenticateProxy-Authenticate por parte del por parte del servidor. servidor. (HTTP 1.1) (HTTP 1.1)

408 408 Request Timeout Request Timeout El cliente tardo demasiado en enviar una petición. El cliente tardo demasiado en enviar una petición. (HTTP 1.1) (HTTP 1.1)

409 409 Conflict Conflict Generalmente en método PUT. Suele enviarse si se ha solicitado una versión incorrecta de un Generalmente en método PUT. Suele enviarse si se ha solicitado una versión incorrecta de un recurso. recurso. (HTTP 1.1) (HTTP 1.1)

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

410 410 Gone Gone El documento no esta disponible. La diferencia con 404 es que tiene carácter temporal. El documento no esta disponible. La diferencia con 404 es que tiene carácter temporal. (HTTP (HTTP 1.1) 1.1)

411 411 Length Required Length Required El servidor no puede procesar la petición si el usuario no envía una cabecera El servidor no puede procesar la petición si el usuario no envía una cabecera Content-LengthContent-Length. . (HTTP 1.1) (HTTP 1.1)

412 412 Precondition Failed Precondition Failed Alguna precondición especificada en las cabeceras de petición era falsa. Alguna precondición especificada en las cabeceras de petición era falsa. (HTTP 1.1) (HTTP 1.1)

413 413 Request Entity Too Large Request Entity Too Large El documento solicitado es mayor de lo que el servidor esta dispuesto a gestionar. Si el servidor 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 estará dispuesto de gestionarlo mas tarde deberá incluir una cabecera de respuesta Retry-Retry-AfterAfter. (. (HTTP 1.1) HTTP 1.1)

414 414 Request URI Too Long Request URI Too Long La URL es demasiado larga. La URL es demasiado larga. (HTTP 1.1) (HTTP 1.1)

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

415 415 Unsupported Media Type Unsupported Media Type La petición esta en un formato desconocido. La petición esta en un formato desconocido. (HTTP 1.1) (HTTP 1.1)

416 416 Requested Range Not Satisfiable Requested Range Not Satisfiable El cliente introdujo una cabecera El cliente introdujo una cabecera RangeRange inadecuada en su petición. inadecuada en su petición. (HTTP 1.1) (HTTP 1.1)

417 417 Expectation Failed Expectation Failed El valor de la cabecera de petición El valor de la cabecera de petición ExpectExpect no se ha podido contrastar. no se ha podido contrastar. (HTTP 1.1) (HTTP 1.1)

500 500 Internal Server Error Internal Server Error Un mensaje genérico para indicar que el servidor está confuso. Un mensaje genérico para indicar que el servidor está confuso.

501 501 Not Implemented Not Implemented El servidor no posee la funcionalidad para completar la petición. El servidor no posee la funcionalidad para completar la petición. Por ejemplo si el usuario ha Por ejemplo si el usuario ha hecho una petición PUT que el servlet no es capaz de procesar. hecho una petición PUT que el servlet no es capaz de procesar.

502 502 Bad Gateway Bad Gateway Usado por servidores que funcionan como proxies o puertas de enlace para indicar que recibió Usado por servidores que funcionan como proxies o puertas de enlace para indicar que recibió una respuesta incorrecta por el servidor remoto. una respuesta incorrecta por el servidor remoto.

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

Servlets: Respondiendo: Servlets: Respondiendo: Códigos de estadoCódigos de estado

503 503

Service Unavailable Service Unavailable

El servidor no puede responder por mantenimiento o colapso de conexiones. Se El servidor no puede responder por mantenimiento o colapso de conexiones. Se puede enviar conjuntamente a una cabecera puede enviar conjuntamente a una cabecera Retry-AfterRetry-After. .

504 504

Gateway Timeout Gateway Timeout

Usado por servidores que funcionan como proxies o puestas de enlace para indicar Usado por servidores que funcionan como proxies o puestas de enlace para indicar que no recibido respuesta del servidor remoto en un tiempo adecuado. que no recibido respuesta del servidor remoto en un tiempo adecuado. (HTTP 1.1) (HTTP 1.1)

505 505

HTTP Version Not Supported HTTP Version Not Supported

El servidor no es capaz de responder a la version del protocolo http indicado en la El servidor no es capaz de responder a la version del protocolo http indicado en la petición. petición. (HTTP 1.1) (HTTP 1.1)

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

Estructura de DirectorioEstructura de Directorio

El directorio raíz contiene un directorio especial llamado WEB-INF. Este directorio no 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 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 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: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 * 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 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 (CLASSPATH). Puede incluir subdirectorios que correspondan a la estructura de paquetes.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 * web.xml - Es un documento XML llamado descriptor de despliegue. Tiene una estructura rigurosamente definida que se usa para configurar los servlets y otros estructura rigurosamente definida que se usa para configurar los servlets y otros recursos que forman parte de una aplicación web.recursos que forman parte de una aplicación web.

(ver aplicacion y ejemplo para mayor claridad)(ver aplicacion y ejemplo para mayor claridad)

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

ServletServlet

Son flexibles y muy potentesSon flexibles y muy potentes

Sin embargo, es muy lioso mezclar código Sin embargo, es muy lioso mezclar código de marcado y código Javade marcado y código Java A menudo hay más código de marcado que A menudo hay más código de marcado que

código Javacódigo JavaSOLUCIÓN SOLUCIÓN JSP JSP