Articulo de referencia

Servlet de Yakarta

Ciclo de vida de un archivo JSP Un Jakarta Servlet , anteriormente conocido como Java Servlet, es un componente de software Java que amplía las capacidades de un servidor . Si b...

Ciclo de vida de un archivo JSP

Un Jakarta Servlet , anteriormente conocido como Java Servlet, es un componente de software Java que amplía las capacidades de un servidor . Si bien los servlets pueden responder a diversos tipos de solicitudes, suelen implementar contenedores web para alojar aplicaciones web en servidores web , por lo que se consideran una API web de servlet del lado del servidor . Estos servlets web son el equivalente en Java a otras tecnologías de contenido web dinámico como PHP y ASP.NET .

Introducción

Un Jakarta Servlet es una clase Java [ 1 ] en Jakarta EE que se ajusta a la API de Jakarta Servlet, [ 2 ] un estándar para implementar clases Java que responden a solicitudes. Los servlets podrían en principio comunicarse a través de cualquier protocolo cliente-servidor , pero se utilizan con mayor frecuencia con HTTP . En principio, cualquier servlet puede extender la GenericServletclase; sin embargo, en la práctica, todos los servlets extienden la HttpServletclase. [ 3 ] Por lo tanto, "servlet" se usa a menudo como abreviatura de "servlet HTTP". [ 4 ] Así, un servlet se puede usar para agregar contenido dinámico a un servidor web usando la plataforma Java . [ 5 ] El contenido generado suele ser HTML , pero puede ser otros datos como XML y, más comúnmente, JSON .

La API de servlets de Jakarta ha sido, en cierta medida, reemplazada por dos tecnologías Java estándar para servicios web:

Un Servletobjeto recibe una solicitud y genera una respuesta basada en ella. El paquete básico define objetos Java para representar las solicitudes y respuestas deServlet los servlets, así como objetos para reflejar los parámetros de configuración y el entorno de ejecución del servlet.

La API de Servlet , contenida en la jerarquía de paquetes de Javajavax.servlet , define las interacciones esperadas entre el contenedor web y un servlet. [ 4 ]

El paquete javax.servlet.httpdefine subclases específicas de HTTPGenericServlet . Este paquete incluye objetos de gestión de sesiones que rastrean múltiples solicitudes y respuestas entre el servidor web y un cliente.

Los servlets pueden mantener el estado en variables de sesión a través de múltiples transacciones de servidor mediante el uso de cookies HTTP o mapeo de URL . [ 6 ] Existen varias formas de crear un servlet y utilizar el mapeo de URL con un servlet. Antes de la especificación Servlet 3.0 (Tomcat 7.0), configurar el web.xml para mapear un servlet a una URL era la única opción. Para aplicaciones que utilizan la especificación Servlet 3.0 o posterior, la @WebServletanotación se puede utilizar para mapear cualquier servlet a uno o más patrones de URL.

Los servlets pueden empaquetarse en un archivo WAR como una aplicación web . [ 7 ]

Se requiere un contenedor web para desplegar y ejecutar un servlet. Un contenedor web (también conocido como contenedor de servlets) es esencialmente el componente de un servidor web que interactúa con los servlets. [ 1 ] El contenedor web se encarga de gestionar el ciclo de vida de los servlets, asignar una URL a un servlet específico y garantizar que el solicitante de la URL tenga los permisos de acceso correctos.

Los servlets se pueden generar automáticamente a partir de Jakarta Server Pages (JSP) mediante el compilador de Jakarta Server Pages . La diferencia entre servlets y JSP es que los servlets normalmente incrustan HTML dentro del código Java, mientras que los JSP incrustan el código Java en HTML. En general, al usar JSP, incrustar código Java en JSP se considera una mala práctica. [ 8 ] En cambio, un mejor enfoque sería mover la lógica de back-end del JSP al código Java en el Servlet. [ 8 ] Esto garantiza que el Servletsea solo responsable del procesamiento, y el JSP solo sea responsable de presentar el HTML, [ 8 ] permitiendo una clara separación de responsabilidades y conformidad con el principio de responsabilidad única .

Aunque el uso directo de servlets para generar HTML (como se muestra en el ejemplo siguiente) se ha vuelto poco común, el marco web MVC de nivel superior en Jakarta EE ( Faces ) todavía utiliza explícitamente la tecnología de servlets para el manejo de solicitudes/respuestas de bajo nivel a través de FacesServlet.

Un uso algo más antiguo consiste en utilizar servlets junto con JSPs en un patrón llamado " Modelo 2 ", que es una variante del modelo-vista-controlador .

Historia

La API de Java Servlet se anunció públicamente por primera vez en la conferencia inaugural JavaOne en mayo de 1996. [ 9 ] [ 10 ] Aproximadamente dos meses después de los anuncios en la conferencia, la primera implementación pública estuvo disponible en el sitio web de JavaSoft. Esta fue la primera versión alfa del Java Web Server (JWS; entonces conocido por su nombre en clave Jeeves ) [ 11 ] que finalmente se lanzaría como producto el 5 de junio de 1997. [ 12 ]

En su blog en java.net , Jim Driscoll, veterano de Sun y líder de GlassFish, detalla la historia de la tecnología de servlets. [ 13 ] James Gosling pensó por primera vez en los servlets en los primeros días de Java , pero el concepto no se convirtió en un producto hasta diciembre de 1996, cuando Sun lanzó JWS. [ 14 ] [ 15 ] [ 16 ] Esto fue antes de que lo que ahora es Jakarta EE se convirtiera en una especificación.

La especificación Servlet1 fue creada por Pavni Diwanji [ 17 ] [ 18 ] mientras trabajaba en Sun Microsystems , y la versión 1.0 se finalizó en junio de 1997. A partir de la versión 2.2, la especificación se desarrolló bajo el Proceso de la Comunidad Java .

Ciclo de vida de un servlet

Tres métodos son fundamentales para el ciclo de vida de un servlet. Estos son init(), service(), y destroy(). Todos los servlets los implementan y el servidor los invoca en momentos específicos.

  • Durante la etapa de inicialización del ciclo de vida del servlet , el contenedor web inicializa la instancia del servlet llamando al init()método [ 27 ] y pasando un objeto que implementa la javax.servlet.ServletConfiginterfaz. Este objeto de configuración permite que el servlet acceda a los parámetros de inicialización de nombre-valor de la aplicación web.
  • Tras su inicialización, la instancia del servlet puede atender las solicitudes de los clientes. Cada solicitud se procesa en un hilo independiente. El contenedor web llama al service()método del servlet para cada solicitud. Este service()método determina el tipo de solicitud y la dirige al método apropiado para su procesamiento. El desarrollador del servlet debe proporcionar una implementación para estos métodos. Si se solicita un método que no está implementado por el servlet, se llama al método de la clase padre, lo que generalmente resulta en un error para el solicitante.
  • Finalmente, el contenedor web llama al destroy()método que desactiva el servlet. Este destroy()método, al igual que init(), se llama solo una vez en el ciclo de vida de un servlet.

A continuación se describe un escenario de uso típico de estos métodos.

  1. Supongamos que un usuario solicita visitar una URL .
    • A continuación, el navegador genera una solicitud HTTP para esta URL.
    • Esta solicitud se envía entonces al servidor correspondiente.
  2. La solicitud HTTP es recibida por el servidor web y reenviada al contenedor de servlets.
    • El contenedor asigna esta solicitud a un servlet específico.
    • El servlet se recupera dinámicamente y se carga en el espacio de direcciones del contenedor.
  3. El contenedor invoca el init()método del servlet.
    • Este método se invoca únicamente cuando el servlet se carga por primera vez en la memoria.
    • Es posible pasar parámetros de inicialización al servlet para que pueda configurarse a sí mismo.
  4. El contenedor invoca el service()método del servlet.
    • Este método se utiliza para procesar la solicitud HTTP.
    • El servlet puede leer los datos que se han proporcionado en la solicitud HTTP.
    • El servlet también puede formular una respuesta HTTP para el cliente.
  5. El servlet permanece en el espacio de direcciones del contenedor y está disponible para procesar cualquier otra solicitud HTTP recibida de los clientes.
    • Este service()método se llama para cada solicitud HTTP.
  6. En algún momento, el contenedor puede decidir descargar el servlet de su memoria.
    • Los algoritmos mediante los cuales se toma esta decisión son específicos para cada contenedor.
  7. El contenedor llama al método del servlet destroy()para liberar cualquier recurso, como los identificadores de archivo, que se hayan asignado al servlet; los datos importantes pueden guardarse en un almacenamiento persistente.
  8. Posteriormente, la memoria asignada al servlet y sus objetos puede ser eliminada por el recolector de basura.

Ejemplo

El siguiente ejemplo de servlet imprime cuántas veces service()se ha llamado a su método.

Tenga en cuenta que HttpServletes una subclase de GenericServlet, una implementación de la Servletinterfaz.

El service()método de la HttpServletclase distribuye las solicitudes a los métodos doGet(), doPost(), doPut(), doDelete(), etc., según la solicitud HTTP. En el ejemplo siguiente service(), se sobrescribe y no distingue qué método de solicitud HTTP atiende.

paquete org.wikipedia.examples ;import java.io.IOException ;import jakarta.servlet.ServletConfig ; import jakarta.servlet.ServletException ; import jakarta.servlet.http.HttpServlet ; import jakarta.servlet.http.HttpServletRequest ; import jakarta.servlet.http.HttpServletResponse ;public class ServletLifeCycleExample extends HttpServlet { private Integer sharedCounter ;@Override public void init ( final ServletConfig config ) throws ServletException { super.init ( config ) ; getServletContext (). log ( "init() llamado" ) ; sharedCounter = 0 ; }@Override protected void service ( final HttpServletRequest request , final HttpServletResponse response ) throws ServletException , IOException { getServletContext (). log ( "service() called" ); int localCounter ; synchronized ( sharedCounter ) { sharedCounter ++ ; localCounter = sharedCounter ; } response.getWriter (). write ( "Incrementing the count to " + localCounter ) ; // acceding a local variable response.getWriter ( ). flush (); // flush response }@Override public void destroy () { getServletContext (). log ( "destroy() llamado" ); } }

Servidores de contenedores

La especificación para la tecnología Servlet se ha implementado en muchos productos. Consulte la lista de implementaciones en la página del contenedor web .

También existen otros tipos de contenedores de servlets, como los utilizados para los servlets SIP, por ejemplo, SailFin .

Véase también

Citas

  1. 1 2 Murach y Urban 2014 , págs. 170–171, §2 Habilidades esenciales de servlet y JSP - Perspectiva - Resumen.
  2. "Servlet (API de la especificación Java(TM) EE 7)" . oracle.com . Consultado el 25 de julio de 2018 .
  3. Murach & Urban 2014 , pp. 128–129, §2 Habilidades esenciales de servlet y JSP: cómo crear y mapear un servlet.
  4. 1 2 "Fundamentos de Servlet - Capítulo 1" . novocode.com . Archivado del original el 18 de diciembre de 2017.
  5. Murach y Urban 2014 , págs. 40–42, §1 Comience bien: el servlet para el procesamiento de back-end.
  6. Murach & Urban 2014 , pág. 87, §2 Habilidades esenciales de servlets y JSP.
  7. Murach & Urban 2014 , p. 74, §1 Comience bien: otras habilidades para trabajar con aplicaciones web.
  8. 1 2 3 Murach & Urban 2014 , pp. 46–47, §1 Comience bien: el JSP para la segunda página.
  9. Freedman, Matt (26 de junio de 1996). "Informe de la conferencia JavaOne" . JavaWorld . Archivado del original el 26 de julio de 2018. Recuperado el 25 de julio de 2018 .
  10. Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (29 de mayo de 1996). "Servidor Java y servlets" (PDF) . Servidores y extensiones de servidor . JavaOne 1996. Archivado (PDF) del original el 16 de agosto de 2000. Recuperado el 1 de febrero de 2020 .
  11. Chang, Phil Inje (1 de julio de 1997). "Entrevista: El equipo de Java Web Server te cuenta todos los detalles" . JavaWorld . Archivado del original el 26 de julio de 2018. Consultado el 25 de julio de 2018 .
  12. Chang, Phil Inje (1 de junio de 1997). "¡Ya está disponible el servidor web Java!" . JavaWorld . Archivado del original el 26 de julio de 2018. Consultado el 25 de julio de 2018 .
  13. "Historial de Servlets | community.oracle.com" . Weblogs.java.net. 10 de diciembre de 2005. Archivado del original el 15 de agosto de 2020. Consultado el 14 de junio de 2013 .
  14. 1 2 Hunter, Jason (marzo de 2000). "Cronología de los servlets" . Más allá de la programación de servlets en Java . Conferencia de O'Reilly sobre Java. O'Reilly Media vía SlidePlayer.com.
  15. "Servidor web Java" . Javasoft . Sun Microsystems . Archivado del original el 11 de enero de 1998. Consultado el 1 de febrero de 2020 .
  16. "Servidor web Java" . Sun Microsystems . Archivado del original el 6 de febrero de 2002. Consultado el 1 de febrero de 2020 .
  17. "Pavni Diwanji" . Instituto de Seguridad Familiar en Línea . Archivado del original el 26 de julio de 2018. Consultado el 12 de noviembre de 2016 .
  18. ↑ Patente estadounidense 5928323 , Gosling, James A.; Diwanji, Pavni y Connelly, David W., "Aparato y método para generar información dinámicamente con objetos de software del lado del servidor", publicada el 27 de julio de 1999, emitida el 27 de julio de 1999, asignada a Sun Microsystems. 
  19. "¿Qué hay de nuevo en Servlet 3.1 ? - Java EE 7 avanza (Arun Gupta, Miles to go ...)" . oracle.com . Consultado el 22 de noviembre de 2016 . 
  20. Liu, Xinyu (19 de febrero de 2009). "Soporte para procesamiento asíncrono en Servlet 3.0" . InfoWorld . Recuperado el 27 de diciembre de 2025 .
  21. Hunter, Jason (2 de enero de 2006). "Nuevas características añadidas a Servlet 2.5" . InfoWorld . Consultado el 27 de diciembre de 2025 .
  22. Hunter, Jason (28 de marzo de 2003). "Servlet 2.4: ¿Qué nos depara?" . InfoWorld . Consultado el 27 de diciembre de 2025 .
  23. Hunter, Jason (26 de enero de 2001). "Servlet 2.3: Nuevas características expuestas" . InfoWorld . Recuperado el 27 de diciembre de 2025 .
  24. Hunter, Jason (15 de octubre de 1999). "¿Qué hay de nuevo en la API de Java Servlet 2.2?" . InfoWorld . Consultado el 27 de diciembre de 2025 .
  25. Hunter, Jason (1 de diciembre de 1998). "Presentación de la nueva API de Servlet 2.1" . InfoWorld . Consultado el 27 de diciembre de 2025 .
  26. Crawford, William; Hunter, Jason (noviembre de 1998). «Prefacio». Java Servlet Programming (1.ª ed.). O'Reilly Media . págs. ix–x. ISBN   978-1-56592-391-1En este artículo , analizamos la versión 2.0 de la API de Servlets, que se introdujo como parte del Java Web Server 1.1 en diciembre de 1997 y se clarificó con el lanzamiento del Java Servlet Development Kit 2.0 en abril de 1998.
  27. Murach y Urban 2014 , págs. 160–163, §15 Cómo desarrollar servlets: más habilidades para trabajar con servlets.

Referencias

  • Murach, Joel; Urban, Michael (2014). Servlets Java y JSP de Murach . ISBN 978-1-890774-78-3.

Tutoriales

  • Cómo empezar a usar servlets con Jakarta EE 10 | Jakarta EE | The Eclipse Foundation
  • Explicación del servlet de Yakarta, las caras de Jakarta y las páginas del servidor de Yakarta | Yakarta EE | La Fundación Eclipse
  • Servlet de Yakarta  :: Tutorial de Jakarta EE  :: Documentación de Jakarta EE
Obtenido de " https://en.wikipedia.org/w/index.php?title=Jakarta_Servlet&oldid=1335543657 "