Cursos subvencionados para trabajadores
Realiza el curso gratis a través de tu empresa.
Cursos SubvencionadosTodo servlet implementa la interface Servlet del paquete javax.servlet, no directamente, sino heredando de la clase GenericServlet que la implementa por construcción, o heredando de la clase HttpServlet, que es subclase de GenericServlet.
Los servlets que se van a estudiar en el curso son los que admiten peticiones basadas en el protocolo http.
UN SERVLET HTTP SE CONSTRUIRÁ HEREDANDO DE LA CLASE HttpServlet y seguirá un modelo de ejecución basado en un ciclo de vida similar al de los applets y ejecutado por el servidor J2EE donde se hospede. Como esta clase implementa la interface citada anteriormente, todo servlet va a poder usar directamente los métodos de esta interface, los de la propia clase y los de su superclase GenericServlet.
La interface Servlet declara los métodos del ciclo de vida de un servlet, que son:
- void doPost(HttpServletRequest request, HttpServletResponse response) para gestionar peticiones post
y/o
- void doGet(HttpServletRequest request, HttpServletResponse response) para gestionar peticiones get
Se realiza una petición get a un recurso (un servlet, en nuestro caso) cuando se lleva a cabo una de las siguientes acciones:
- Teclear en la barra de direcciones del cliente el URL del recurso.
- Pulsar un enlace html que apunte al recurso.
- Enviar al recurso un formulario html cuyo atributo method de la etiqueta <form> tenga el valor de get.
Es decir, <form action="/servlets-examples/PrimerServlet" method="get"
También es válido <form action="/servlets-examples/PrimerServlet"> ya que, si no se especifica method, este atributo asume el valor get.
En cambio, se realiza una petición post si se envía al recurso un formulario html cuyo atributo method de la etiqueta <form> es post.
Es decir, <form action="…" method="post">
Consultar la API para verificar todo lo dicho hasta ahora.
Por tanto, un servlet se crea heredando de
o de
La declaración de la clase asociada a un servlet http genérico sería:

Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de J2EE y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
No importa si no se entiende muy bien ahora. Lo importante es tener una idea global de lo que ocurre. Conforme se vaya avanzando se comprenderá mejor.

|
NOTA SOBRE INSTANCIACIÓN Y CARGA EN MEMORIA DE UN SERVLET: Instanciación y carga en memoria: se produce tras levantar Tomcat y leer el descriptor de despliegue web.xml de la aplicación a la que pertenece. Implica la creación, por parte del contenedor, de un objeto servlet mediante el método estático de java.lang.Class forName(String s) y el método newInstance() de Class. Como argumento del método forName(..) se utiliza el nombre del class obtenido tras compilar el servlet. Esta información se obtiene del valor especificado en la etiqueta xml <servlet> del descriptor de despliegue. Por cada elemento <servlet> se instancia un objeto servlet diferente. Ejemplo: se muestra una parte del descriptor de despliegue web.xml de una aplicación que contiene un servlet.
|
|
NOTA SOBRE INICIALIZACIÓN DE UN SERVLET: Tras la instanciación y carga en memoria del servlet, viene su inicialización. Comienza cuando se realiza la primera petición al servlet. El proceso está regido por su ciclo de vida, que se basa en los métodos de la interface javax.servlet.Servlet:
Inicialización: implica la ejecución ÚNICA, por parte del contenedor, del método init(ServletConfig config). Se produce cuando se realiza la primera petición. El objeto javax.servlet.ServletConfig es creado por el contenedor durante la carga en memoria y “absorbe” multitud de información sobre el servlet, previa lectura del descriptor de despliegue. Usando métodos adecuados (consultar la API) de dicho objeto se pueden capturar los parámetros de inicialización del servlet especificados en las etiquetas <init-param>, así como obtener el nombre del servlet. En el ejemplo mostrado en la nota anterior hay dos parámetros: un nombre de usuario y una contraseña. Típicas tareas de inicialización son obtención de conexiones a bases de datos, carga de drivers previa obtención del nombre de su class en el descriptor, captura de nombres de usuario y passwords, etc. Este método no es necesario escribirlo (mejor dicho, redefinirlo) en el código del servlet. Lo habitual, si se opta por hacerlo, es redefinir el método init() de la clase GenericServlet. El contenedor garantiza que, después de invocar al init(ServletConfig config), invocará al init(). MODO DE TRABAJO HABITUAL. Para obtener el objeto ServletConfig, se utilizará el método getServletConfig() de GenericServlet. Si se redefine el init(ServletConfig config), el config está directamente disponible en el cuerpo del método pero, si se desea utilizar algún método de la clase GenericServlet, debe incluirse como primera línea super.init(config), con el fin de pasarle a GenericServlet la interface ServletConfig (recordar que la implementa por construcción). Si no se hace esto, se produce un error de ejecución, lanzándose una NullPointerException en la línea donde se intenta emplear el método de GenericServlet. Se verá en el ejemplo SegundoServlet. Tras la inicialización, el servlet ya está en disposición de recibir peticiones, gestionarlas y generar una respuesta, con el método de su ciclo de vida service(ServletRequest request, ServletResponse response). Los objetos asociados a los argumentos del service son creados también por el contenedor. Cuando se realiza una petición a un servlet, el contenedor invoca al método service(ServletRequest req, ServletResponse res) de javax.servlet.http.HttpServlet, que invoca al service(HttpServletRequest req, HttpServletResponse res) de la misma clase (está sobrecargado). Este service, en función del tipo de petición, delega automáticamente su procesamiento al doXXX(..) correspondiente. Si la petición es POST, al doPost(..), si es GET al doGET(..), etc. Si se redefine en el código del servlet cualquiera de los métodos service(..) anteriores, debe invocarse explícitamente al doXXX(..) correspondiente, o procesar la petición usando sólo el service redefinido. Lo habitual es no redefinir el service(..) y trabajar con los métodos doXXX(..). MODO DE TRABAJO HABITUAL. |
Explicación resumida del proceso: una vez levantado Tomcat, se carga la clase asociada al servlet, se instancia invocando a su constructor sin argumentos por defecto y se carga en memoria. Cuando se realiza la primera petición se inicializa: esta inicialización es única e implica la ejecución, por parte del contenedor, del método init(ServletConfig config) del ciclo de vida del servlet.
Este método no suele aparecer en el código del servlet. Lo habitual es redefinir el método init() y emplear el método getServletConfig() de GenericServlet para obtener un objeto ServletConfig.
Finalizada la inicialización, el servlet ya está en disposición de procesar las peticiones y generar una respuesta a las mismas, con el método service(ServletRequest request, ServletResponse response).
Una vez procesada la primera petición, el resto se gestiona mediante diferentes hilos de ejecución, tantos como peticiones, y sin que se ejecute más el método init(..).
|
CONCLUSIÓN: un objeto servlet en memoria procesando múltiples peticiones simultáneamente mediante hilos. |

Respecto al método destroy() del ciclo de vida, conviene decir lo siguiente: si se tumba el servidor, o se sobrepasa un tiempo límite de inactividad del servlet, o si el servidor está trabajando con insuficiente memoria, el contenedor podría eliminar el objeto servlet de la memoria. Su ejecución es competencia del contenedor.
Antes de que suceda, se garantiza la ejecución del método destroy(). No es muy habitual redefinirlo en el código del servlet, pero si se hace, su código típicamente se compondrá de líneas que permitan liberar los recursos empleados por el servlet. Ejemplo: cierre de conexiones a bases de datos, vaciado y cierre de flujos de lectura y escritura, etc.
Inscríbete ahora y accede a 3 unidades gratis
Evalua el curso de J2EE y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....
Copyright 2010© ADRInfor S.L. Logroño | Tel: 941250116 Fax: 941236805 |
Email |
Política de Privacidad |
Aviso Legal |
Área Privada
Descubre Educaplay: nuestra plataforma para la creación y disfrute de actividades y juegos educativos multimedia