Un Servlet es una instancia de una clase que implementa javax.servlet.Servlet. Sin embargo, la mayoría de los servlets se extienden a una de las implementaciones estándar de esa interfaz, como javax.servlet.GenericServle t y javax.servlet.http.HttpServlet. Los desarrolladores usan esto como modelo cuando elaboran su código de Servlets. La implementación de la interfaz del Servlet o la ampliación de la clase GenericServlet/HttpServlet proporciona un marco para crear un Servlet, así como una importante funcionalidad predeterminada. La especificación de código del Servlet debe anular al menos un método cuando se implementa cualquier funcionalidad personalizada.
Para inicializar el Servlet, el servidor Web:
- Carga la clase Servlet [y probablemente otras clases a las que hace referencia el Servlet] y crea una instancia llamando al constructor sin argumentos
- Llama al init del Servlet (ServletConfig config) . init() se llama solo una vez cuando el Servlet se carga en la memoria por primera vez y se almacena en el objeto ServletConfig. El creador del Servlet puede encapsular cualquier código que deba ejecutarse antes de que se ejecute la especificación del código principal del Servlet, como por ejemplo conectarse a una base de datos. El objeto ServletConfig proporciona a los servlets información sobre sus parámetros de inicialización. Estos parámetros se le dan al propio Servlet y no están asociados con ninguna solicitud individual. El objeto ServletConfig se puede recuperar llamando a getServletConfig() de un Servlet, y esto lo maneja GenericServlet
Cualquier servidor web habilitado para Java invoca automáticamente el servicio() del servlet en respuesta a una solicitud del cliente. Esto significa que cuando se inicializa un Servlet, se llama a su servicio (solicitud de ServletRequest, respuesta de ServletResponse) para cada solicitud al Servlet. Por lo tanto, service() debe anularse para proporcionar una funcionalidad personalizada en el momento en que se invoca un Servlet. Sin embargo, si el desarrollador del servlet elige no anular el servicio(), existen otros métodos que se pueden invocar en respuesta a la solicitud de un cliente. Cuando es necesario descargar el Servlet, por ejemplo, porque se debe cargar una nueva versión o porque el servidor se está cerrando, se llama a destroy(). En base a esta breve Explicación, se ha construido un esqueleto de un Servlet común. Por simplicidad,
Java
pubic dass SkeletonServet extends HttpServiet { public void init() { // Initialization code goes here } pubicvoid service() { // Meaningful work happens here } public void destroy() { // Free resources here } }
Cada motor de Servlet debe adherirse al ciclo de vida de Servlet.
Inicialización
Para inicializar el Servlet, el motor del Servlet primero localiza su clase. Una clase de servlet puede residir en el sistema de archivos local y en un sistema de archivos remoto o estar en algún otro recurso de red. El motor del Servlet utiliza una clase Java habitual para cargar instalaciones para cargar la clase Servlet en la JVM. Una vez cargado, el motor Servlet instancia una instancia de esa clase de servlet [y las otras clases a las que hace referencia el Servlet]. Después de eso, será Calls Servlet init (ServletConfig config). El init() se llama inmediatamente después de que los servidores construyen la instancia del servlet. Por lo tanto, dependiendo del servidor y su configuración, se puede llamar en cualquiera de los siguientes casos:
- Cuando se inicia el servidor
- Cuando se solicita el servlet por primera vez, justo antes de que se invoque el servicio()
- A petición del administrador del servidor
El método init()
init() se declara de la siguiente manera:
public void init(ServletConfig config) throws ServletException
Durante la inicialización, el Servlet tiene que acceder a dos objetos:
- ServletConfig
- ServletContext
Esto se debe a que a init() se le pasa un objeto de ServletConfig como parámetro. Cuando se configura un Servlet por primera vez, los datos de configuración, como la información sobre los parámetros y las referencias al ServletContext, se almacenan en el objeto ServletConfig. Las siguientes son las tareas comunes que se pueden implementar anulando init() de la interfaz Servlet:
- Lectura de parámetros de inicialización usando el objeto ServletConfig
- Leer los datos de configuración de los recursos persistentes como un archivo de configuración
- Al inicializar un controlador de base de datos, luego un grupo de conexiones o un servicio de registro
- Apertura de una conexión JDBC
- Escribir información de registro en un recurso de red
Un servlet que no puede completar su proceso de inicialización arroja una excepción no disponible, por lo tanto, solo después de completar la inicialización, el servidor estará listo para que las requests del cliente se manejen [es decir, antes de que se llame al servicio()] o se destruya un servlet.
tiempo de ejecución
Después de que el servidor carga e inicializa un Servlet, entonces el Servlet puede manejar las requests del cliente. Los procesa en servicio(). La solicitud de servicio de cada cliente) se ejecuta por separado en el subproceso Servlet. service() se declara de la siguiente manera:
public void service(ServletRequest request, ServletResponse response)
El servicio de anulación pública del Método (solicitud de ServletRequest, respuesta de ServletResponse) arroja ServletException y IOException. Para cada solicitud al Servlet, se llama a su servicio(). Dos objetos, es decir, ServletRequest y The ServletResponse, se pasan como parámetros al servicio(). el objeto ServletRequest ayuda a acceder a los datos de la solicitud original y el objeto ServletResponse proporciona métodos que ayudarán al Servlet a generar una respuesta.
Los servlets pueden ejecutar múltiples servicios() a la vez. Por lo tanto, es importante que service() se haya escrito de manera segura para subprocesos. Por ejemplo, si service() actualiza algunos datos cruciales en el objeto Servlet, el acceso a este subproceso debe sincronizarse. si por alguna razón, el servidor no debe ejecutar otro servicio() al mismo tiempo, el servlet debe implementar SingleThreadModel . Esta interfaz garantiza que no habrá dos subprocesos que ejecuten el servicio() del servlet al mismo tiempo.
Destrucción
Cuando se le indica que descargue el Servlet Por lo tanto, tal vez por el administrador del servidor o mediante programación por el propio Servlet, el motor de Servlet llama a los Servlets para destruir(). El Servlet entonces es elegible para la recolección de basura. Todos los recursos que se asignaron en init() deben liberarse en destroy(). destroy() se declara de la siguiente manera:
public void destroy()
El método se ejecuta una vez. El servidor no se volverá a ejecutar hasta después de que se vuelva a cargar y reinicie el Servlet. Las tareas comunes implementadas en destroy() son:
- Sincronizar tareas de limpieza, como cerrar cualquier recurso abierto, cerrar un grupo de conexiones
- Informar a otra aplicación que Servlet ya no estará en el servicio
Se garantiza que destroy() se llamará solo una vez durante el ciclo de vida del Servlet. Durante el ciclo de vida de un Servlet, es importante escribir un código seguro para subprocesos para destruir el Servlet y, a menos que el Servlet implemente SingleThreadModel , atender las requests de los clientes. Todavía puede haber subprocesos que ejecutan service() cuando se llama a destroy(), por lo que destroy() tiene que ser seguro para subprocesos. Estos pasos ilustran el ciclo de vida completo de un Servlet y también se representan en forma de diagrama como se muestra en el Diagrama 1.
Publicación traducida automáticamente
Artículo escrito por khurpaderushi143 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA