stringtranslate.com

Servlet de Yakarta

Vida de un archivo JSP

Un servlet de Jakarta , anteriormente llamado servlet de Java, es un componente de software de Java que amplía las capacidades de un servidor . Aunque los servlets pueden responder a muchos tipos de solicitudes, lo más común es que implementen contenedores web para alojar aplicaciones web en servidores web y, por lo tanto, se los califica como una API web de servlet del lado del servidor . Dichos servlets web son la contraparte de Java de 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 cumple con 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, hablando de manera realista, todos los servlets extienden la HttpServletclase. [3] Por lo tanto, "servlet" se utiliza a menudo como abreviatura de "servlet HTTP". [4] Por lo tanto, un servlet se puede utilizar para agregar contenido dinámico a un servidor web utilizando la plataforma Java . [5] El contenido generado es comúnmente HTML , pero puede ser otros datos como XML y, más comúnmente, JSON .

La API de Servlet de Jakarta ha sido reemplazada, hasta cierto punto [ cita requerida ], por dos tecnologías Java estándar para servicios web:

Un objeto recibe una solicitud y genera una respuesta en función de esa solicitud. El paquete básico define objetos Java para representar solicitudes y respuestas Servletde servlets, así como objetos para reflejar los parámetros de configuración y el entorno de ejecución del servlet.Servlet

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

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

Los servlets pueden mantener el estado de las variables de sesión en muchas transacciones del 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 las 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 necesita un contenedor web para implementar 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 es responsable de administrar el ciclo de vida de los servlets, asignar una URL a un servlet en particular y garantizar que el solicitante de la URL tenga los derechos 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 los servlets y JSP es que los servlets normalmente incorporan HTML dentro del código Java, mientras que las JSP incorporan código Java en HTML. En general, cuando se utilizan JSP, la incorporación de código Java en JSP se considera una mala práctica. [8] En cambio, un mejor enfoque sería trasladar la lógica de back-end de JSP al código Java en Servlet. [8] Esto garantiza que Servletsolo sea responsable del procesamiento, y que JSP solo sea responsable de presentar el HTML, [8] lo que permite una clara separación de preocupaciones y la conformidad con el principio de responsabilidad única .

Si bien el uso directo de servlets para generar HTML (como se muestra en el ejemplo a continuación) se ha vuelto poco común, el marco web MVC de nivel superior en Jakarta EE ( Faces ) aún 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 es utilizar servlets junto con JSP 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 se puso a disposición en el sitio web de JavaSoft. Esta fue la primera versión alfa del servidor web Java (JWS; entonces conocido por su nombre en código 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 Java Community Process .

Ciclo de vida de un servlet

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

El siguiente es un escenario de usuario 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.
    • Luego, esta solicitud se envía al servidor apropiado.
  2. El servidor web recibe la solicitud HTTP y la reenvía al contenedor de servlets.
    • El contenedor asigna esta solicitud a un servlet particular.
    • 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 solo 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 llama para procesar la solicitud HTTP.
    • El servlet puede leer 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.
    • El service()método se llama para cada solicitud HTTP.
  6. El contenedor puede, en algún momento, 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 destroy()método del servlet para ceder cualquier recurso, como controladores de archivos, que estén asignados para el servlet; los datos importantes se pueden guardar en un almacén persistente.
  8. La memoria asignada para el servlet y sus objetos puede luego ser recolectada como basura.

Ejemplo

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

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

El service()método de HttpServletla clase envía solicitudes a los métodos doGet(), doPost(), doPut(), doDelete(), etc., según la solicitud HTTP. En el ejemplo siguiente, service()se reemplaza y no distingue a qué método de solicitud HTTP sirve.

importar java.io.IOException ; importar jakarta.servlet.ServletConfig ; importar jakarta.servlet.ServletException ; importar jakarta.servlet.http.HttpServlet ; importar jakarta.servlet.http.HttpServletRequest ; importar jakarta.servlet.http.HttpServletResponse ;     clase pública ServletLifeCycleExample extiende HttpServlet { private Integer sharedCounter ;         @Override public void init ( final ServletConfig config ) lanza ServletException { super.init ( config ); getServletContext (). log ( " init ( ) llamado" ); sharedCounter = 0 ; }               @Override protected void service ( final HttpServletRequest request , final HttpServletResponse response ) lanza ServletException , IOException { getServletContext (). log ( "service() called" ); int localCounter ; synchronousd ( sharedCounter ) { sharedCounter ++ ; localCounter = sharedCounter ; } response.getWriter (). write ( " Incrementando el conteo a " + localCounter ); // accediendo a una variable local response.getWriter (). flush (); // vaciando la respuesta }                               @Override public void destroy () { getServletContext (). log ( "destroy() llamado" ); } }      

Servidores de contenedores

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

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

Véase también

Citas

  1. ^ ab Murach & Urban 2014, pp. 170–171, §2 Habilidades esenciales de servlets y JSP - Perspectiva - Resumen.
  2. ^ "Servlet (API de especificación Java(TM) EE 7)". oracle.com . Consultado el 25 de julio de 2018 .
  3. ^ Murach y Urban 2014, págs. 128-129, §2 Habilidades esenciales sobre servlets y JSP: cómo crear y mapear un servlet.
  4. ^ ab "Servlet Essentials - Capítulo 1". novocode.com . Archivado desde el original el 18 de diciembre de 2017.
  5. ^ Murach & Urban 2014, págs. 40–42, §1 Comience bien: el servlet para el procesamiento back-end.
  6. ^ Murach y Urban 2014, p. 87, §2 Habilidades esenciales de servlets y JSP.
  7. ^ Murach & Urban 2014, p. 74, §1 Empezar bien: otras habilidades para trabajar con aplicaciones web.
  8. ^ abc 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 desde el original el 26 de julio de 2018. Consultado el 25 de julio de 2018 .
  10. ^ Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (29 de mayo de 1996). "Java Server and Servlets" (PDF) . Servidores y extensiones de servidor . JavaOne 1996. Archivado (PDF) desde el original el 16 de agosto de 2000 . Consultado el 1 de febrero de 2020 .
  11. ^ Chang, Phil Inje (1 de julio de 1997). "Entrevista: El equipo de Java Web Server te da la información". JavaWorld . Archivado desde el original el 2018-07-26 . Consultado el 2018-07-25 .
  12. ^ Chang, Phil Inje (1 de junio de 1997). "¡Ya está disponible Java Web Server!". JavaWorld . Archivado desde el 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 desde el original el 15 de agosto de 2020. Consultado el 14 de junio de 2013 .
  14. ^ ab Hunter, Jason (marzo de 2000). "Servlet Timeline". Más allá de la programación con servlets en Java . Conferencia O'Reilly sobre Java. O'Reilly Media .[ enlace muerto permanente ]
  15. ^ "Java Web Server". Javasoft . Sun Microsystems . Archivado desde el original el 11 de enero de 1998 . Consultado el 1 de febrero de 2020 .
  16. ^ "Java Web Server(tm)". Sun Microsystems . Archivado desde el original el 6 de febrero de 2002. Consultado el 1 de febrero de 2020 .
  17. ^ "Pavni Diwanji". Instituto de Seguridad Familiar en Internet . Archivado desde el 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, expedida el 27 de julio de 1999, asignada a Sun Microsystems 
  19. ^ "¿Qué novedades hay en Servlet 3.1? - Java EE 7 avanza (Arun Gupta, Miles to go ...)". oracle.com . Consultado el 22 de noviembre de 2016 .
  20. ^ Crawford, William; Hunter, Jason (noviembre de 1998). "Prefacio". Programación de servlets en Java (1.ª ed.). O'Reilly Media . pág. ix–x. ISBN 978-1-56592-391-1Cubrimos la versión 2.0 de la API de Servlet, que se introdujo como parte de Java Web Server 1.1 en diciembre de 1997 y se aclaró con el lanzamiento de Java Servlet Development Kit 2.0 en abril de 1998.
  21. ^ Murach y Urban 2014, págs. 160-163, §15 Cómo desarrollar servlets: más habilidades para trabajar con servlets.

Referencias

Enlaces externos