06 - Servlets
Un Servlet es una clase Java que se ejecuta dentro de un contenedor de servlets (por ejemplo, Tomcat o 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 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("<h1>Hola desde un Servlet</h1>"); } }
Contenedor de servlets
Ejemplos de contenedores:
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.