====== 06 - Servlets ====== Un **Servlet** es una clase Java que se ejecuta dentro de un contenedor de servlets (por ejemplo, [[https://tomcat.apache.org/|Tomcat]] o [[https://jetty.org/|Jetty]]) y que procesa peticiones HTTP. **No puede ejecutarse de forma independiente**. El contenedor se encarga de: * Abrir el socket TCP.\\ \\ * Interpretar el protocolo HTTP.\\ \\ * Crear los objetos HttpServletRequest y HttpServletResponse.\\ \\ * Llamar al método apropiado de nuestro servlet (doGet, doPost, etc.).\\ \\ Forma parte de la especificación [[https://jakarta.ee/specifications/servlet/|Jakarta Servlet API]] (antes Java Servlet API). ===== Ciclo de vida de un servlet ===== * **Carga y creación**: El contenedor carga la clase y crea una instancia cuando es necesario.\\ \\ * **Inicialización**: Llama a init(ServletConfig config).\\ \\ * **Atender peticiones**: Cada solicitud HTTP invoca service(HttpServletRequest, HttpServletResponse), que delega en doGet, doPost, etc.\\ \\ * **Destrucción**: Llama a destroy() antes de descargar la clase para liberar recursos.\\ \\ ===== Métodos importantes ===== * **init()** → Inicialización (se ejecuta una vez).\\ \\ * **doGet()** → Responde a peticiones HTTP GET.\\ \\ * **doPost()** → Responde a peticiones HTTP POST.\\ \\ * **doPut()**, **doDelete()** → Para otros métodos HTTP.\\ \\ * **destroy()** → Liberar recursos antes de descargar el servlet.\\ \\ ===== Ejemplo ===== **Para que funcione, debe desplegarse en un contenedor de servlets.** package es.cesguiro.servlet; import java.io.IOException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/hola") public class HolaServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); response.getWriter().println("

Hola desde un Servlet

"); } }
===== Contenedor de servlets ===== Ejemplos de contenedores: * [[https://tomcat.apache.org/|Apache Tomcat]]\\ \\ * [[https://www.eclipse.org/jetty/|Eclipse Jetty]]\\ \\ * [[https://undertow.io/|Undertow]]\\ \\ Funciones clave: * Manejar la red y el protocolo HTTP.\\ \\ * Crear y gestionar instancias de servlets.\\ \\ * Pasar los objetos HttpServletRequest y HttpServletResponse.\\ \\ * Aplicar filtros y listeners.\\ \\