Servlet (Java)

Un servlet es una interfaz Java cuya implementación amplía la funcionalidad de un servidor . Un servlet interactúa con los clientes a través del principio de solicitud-respuesta.

Si bien los servlets pueden atender cualquier solicitud, se usan comúnmente para extender servidores web . Para tales aplicaciones, la tecnología Java Servlet define clases de servlet específicas de HTTP.

Empaqueta javax.servlety javax.servlet.httpproporciona interfaces y clases para construir servlets.

La primera especificación de servlet fue creada por Sun Microsystems (la versión 1.0 se completó en junio de 1997 ). Desde la versión 2.3, la especificación del servlet se ha desarrollado bajo la guía del Proceso de la comunidad Java . El estándar JSR 53 definió tanto el Servlet 2.3 como la especificación JavaServer Page 1.2. JSR 154 incluye las especificaciones Servlet 2.4 y 2.5. La especificación actual a partir del 2 de marzo de 2021 es Servlet 4.0 (descrito en JSR-369 ).

Cronología de la API de Servlet

Cronología de la API de servlet
Versión de la API del servlet Liberar Plataforma Cambios principales
Servidor 4.0 septiembre 2017 Java EE 8 Empuje del servidor HTTP/2
Servlet 3.1 Mayo de 2013  (inglés) JavaEE7 JavaSE7 E/S sin bloqueo, compatibilidad con protocolos no estándar a través de HTTP
Servidor 3.0 Diciembre de 2009 Archivado el 6 de agosto de 2011 en Wayback Machine . JavaEE6, JavaSE6 Capacidad de conexión, facilidad de desarrollo, servlets asíncronos, seguridad, carga de archivos
servidor 2.5 Septiembre de 2005 Archivado el 9 de junio de 2008 en Wayback Machine . Java EE 5, J2SE 5.0 Requiere J2SE 5.0, compatibilidad con anotaciones
Servidor 2.4 Noviembre de 2003 Archivado el 9 de junio de 2008 en Wayback Machine . J2EE 1.4, J2SE 1.3 web.xml utiliza un esquema XML
Servidor 2.3 Agosto de 2001 Archivado el 16 de mayo de 2008 en Wayback Machine . J2EE 1.3, J2SE 1.2 AparienciaFilter
Servidor 2.2 Agosto de 1999 Archivado el 11 de junio de 2008 en Wayback Machine . J2EE 1.2, J2SE 1.2 Pasa a formar parte de J2EE , ofrece aplicaciones web independientes en archivos .war
Servidor 2.1 Noviembre de 1998 Archivado el 11 de junio de 2008 en Wayback Machine . no especificado Primera especificación oficial, añadida RequestDispatcher.ServletContext
Servidor 2.0 JDK 1.1 Parte del kit de desarrollo de Java Servlet 2.0
Servidor 1.0 junio de 1997

Ciclo de vida del servlet

El ciclo de vida de un servlet consta de los siguientes pasos:

  1. En caso de que no haya servlet en el contenedor.
    1. El contenedor carga la clase de servlet.
    2. El contenedor crea una instancia de la clase de servlet.
    3. El contenedor llama al init(). Este método inicializa el servlet y se llama primero, antes de que el servlet pueda atender las solicitudes. Para todo el ciclo de vida, el método init()se llama solo una vez.
  2. Atender la solicitud de un cliente. Cada solicitud se procesa en su propio hilo. El contenedor llama al método service()para cada solicitud. Este método determina el tipo de la solicitud entrante y la distribuye al método correspondiente a este tipo para procesar la solicitud. El desarrollador del servlet debe proporcionar una implementación para estos métodos. Si se recibe una solicitud para la cual no se implementó un método, se llama al método de la clase principal y, por lo general, finaliza con la devolución de un error al solicitante.
  3. En caso de que el contenedor necesite eliminar el servlet, llama al método destroy(), que retira el servlet. Al igual que el método init(), este método también se llama una vez en todo el ciclo del servlet.

Ejemplo

importar java.io.IOException ; importar java.io.PrintWriter ; importar javax.servlet.ServletException ; importar javax.servlet.http.HttpServlet ; importar javax.servlet.http.HttpServletRequest ; importar javax.servlet.http.HttpServletResponse ; importar javax.servlet.http.HttpSession ; clase pública NewServlet extiende HttpServlet { @Override protected void doGet ( solicitud HttpServletRequest , respuesta HttpServletResponse ) lanza ServletException , IOException { // Parámetro de cadena = solicitud . getParameter ( "parámetro" ); // Iniciar sesión HTTP HttpSession session = request . getSession ( verdadero ); sesión _ setAttribute ( "parámetro" , parámetro ); respuesta _ setContentType ( "texto/html;juego de caracteres=UTF-8" ); PrintWriter out = respuesta . obtenerEscritor (); probar { a cabo . println ( "<html>" ); fuera _ println ( "<cabeza>" ); fuera _ println ( "<título>Título</título>" ); fuera _ println ( "</cabeza>" ); fuera _ println ( "<cuerpo>" ); fuera _ println ( "<h1>Ejemplo de servlet" + parámetro + "</h1>" ); fuera _ println ( "</cuerpo>" ); fuera _ println ( "</html>" ); } finalmente { fuera . cerrar (); } } @Override public String getServletInfo () { return "Servlet Example)" ; } }

Véase también

Enlaces