stringtranslate.com

Servlet de Yakarta

Vida de un archivo JSP

Un Servlet de Jakarta , anteriormente Java Servlet , es un componente de software 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, califican como una API web de servlet del lado del servidor . Estos servlets web son la contraparte Java de otras tecnologías de contenido web dinámico como PHP y ASP.NET .

Introducción

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

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

A Servletes un objeto que recibe una solicitud y genera una respuesta basada en esa solicitud. El paquete básico Servletdefine objetos Java para representar solicitudes y respuestas de servlet, 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 del contenedor web y un servlet. [4]

El paquete javax.servlet.httpdefine subclases específicas de HTTPGenericServlet de . 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 de las variables de sesión en muchas transacciones del servidor mediante el uso de cookies HTTP o mapeo de URL . La aplicación puede realizar un seguimiento de la sesión y las cookies mediante el uso de sesiones y cookies. [6] Hay varias formas de crear y mapear URL para un servlet. Antes de la especificación del servlet 3.0 (Tomcat 7.0), la única opción era configurar web.xml para asignar un servlet a una URL. Para aplicaciones que utilizan la especificación servlet 3.0 o posterior, la @WebServletanotación se puede utilizar para asignar 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 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 gestionar 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.

El compilador de Jakarta Server Pages (JSP) puede generar servlets automáticamente desde Jakarta Server Pages . La diferencia entre los servlets y JSP es que los servlets normalmente incorporan HTML dentro del código Java, mientras que los JSP incorporan código Java en HTML. En general, cuando se utilizan 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 archivo Servlet. [8] Esto garantiza que JSP Servletsolo sea responsable del procesamiento y que JSP solo sea responsable de presentar el HTML, [8] permitiendo una clara separación de preocupaciones y 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 raro, el marco web MVC de nivel superior en Yakarta EE ( Faces ) todavía usa explícitamente la tecnología de servlet 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 versión 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. Este fue el primer alfa del servidor web Java (JWS; entonces conocido por su nombre en clave Jeeves ) [11] que eventualmente se enviaría como producto el 5 de junio de 1997. [12]

En su blog en java.net , el veterano de Sun y líder de GlassFish , Jim Driscoll, 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 el EE de Yakarta se convirtiera en una especificación.

La especificación Servlet1 fue creada por Pavni Diwanji [17] [18] mientras trabajaba en Sun Microsystems , con la versión 1.0 finalizada 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(). Son implementados por cada servlet 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 .
    • Luego, el navegador genera una solicitud HTTP para esta URL.
    • Luego, esta solicitud se envía al servidor apropiado.
  2. La solicitud HTTP es recibida por el servidor web y reenviada al contenedor de servlets.
    • El contenedor asigna esta solicitud a un servlet particular.
    • El servlet se recupera y carga dinámicamente en el espacio de direcciones del contenedor.
  3. El contenedor invoca el init()método del servlet.
    • Este método se invoca sólo 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 solo.
  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 de cada contenedor.
  7. El contenedor llama al método del servlet destroy()para ceder cualquier recurso, como los identificadores de archivos, asignados al servlet; Los datos importantes se pueden guardar en un almacén persistente.
  8. La memoria asignada para el servlet y sus objetos se puede recolectar 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 clase HttpServletenvía solicitudes a los métodos ,,,, doGet()etc .; según la solicitud HTTP. En el siguiente ejemplo se anula y no distingue qué método de solicitud HTTP sirve.doPost()doPut()doDelete()service()

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 { entero privado contador compartido ;         @Override public void init ( configuración final de ServletConfig ) lanza ServletException { super . inicio ( configuración ); getServletContext (). log ( "init() llamado" ); contadorcompartido = 0 ; }               @Override servicio anulado protegido ( solicitud HttpServletRequest final , respuesta HttpServletResponse final ) arroja ServletException , IOException { getServletContext (). log ( "servicio() llamado" ); int contador local ; sincronizado ( Contador compartido ) { Contador compartido ++ ; contador local = contador compartido ; } respuesta . obtener escritor (). escribir ( "Incrementando el recuento a " + localCounter ); // accediendo a una respuesta de variable local . obtener escritor (). rubor (); // respuesta de descarga }                               @Override public void destroy () { getServletContext (). log ( "destruir() llamado" ); } }      

Servidores de contenedores

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

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

Citas

  1. ^ ab Murach & Urban 2014, págs. 170-171, §2 Habilidades esenciales de servlet 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 & Urban 2014, págs. 128–129, §2 Habilidades esenciales de servlet y JSP: cómo crear y asignar un servlet.
  4. ^ ab "Conceptos básicos de Servlet: 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 Urbano 2014, pag. 87, §2 Habilidades esenciales de servlet y JSP.
  7. ^ Murach y Urbano 2014, pag. 74, §1 Empezar bien: otras habilidades para trabajar con aplicaciones web.
  8. ^ abc Murach & Urban 2014, págs. 46–47, §1 Comience bien: el JSP de la segunda página.
  9. ^ Freedman, Matt (26 de junio de 1996). "Informe de la conferencia JavaOne". Mundo Java .
  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) 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 explica la información". Mundo Java . Consultado el 25 de julio de 2018 .
  12. ^ Chang, Phil Inje (1 de junio de 1997). "¡Java Web Server se envía!". Mundo Java . Consultado el 25 de julio de 2018 .
  13. ^ "Historial de servlets | community.oracle.com". Weblogs.java.net. 2005-12-10. Archivado desde el original el 15 de agosto de 2020 . Consultado el 14 de junio de 2013 .
  14. ^ ab Hunter, Jason (marzo de 2000). "Cronología de servlet". Más allá de la programación de servlets Java . Conferencia O'Reilly sobre Java. Medios O'Reilly .
  15. ^ "Servidor web Java". Javasoft . Microsistemas solares . Archivado desde el original el 11 de enero de 1998 . Consultado el 1 de febrero de 2020 .
  16. ^ "Servidor web Java (tm)". Microsistemas solares . 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 línea . 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 & Connelly, David W., "Aparato y método para generar información dinámicamente con objetos de software del lado del servidor", publicado el 27 de julio de 1999, publicado el 27 de julio de 1999, asignado 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. ^ Crawford, William; Hunter, Jason (noviembre de 1998). "Prefacio". Programación de servlets Java (1ª ed.). Medios O'Reilly . pag. ix–x. ISBN 978-1-56592-391-1. Cubrimos 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 del Java Servlet Development Kit 2.0 en abril de 1998.
  21. ^ Murach & Urban 2014, págs. 160–163, §15 Cómo desarrollar servlets: más habilidades para trabajar con servlets.

Referencias

enlaces externos