Introducción a los Servlets

Los Servlets son clases de Java que implementan la clase HttpServlet de Java. Dichos servlets no contienen parte gráfica, por lo que su funcionamiento en el momento de recibir una petición no tiene por qué ser dar salida a código HTML en el cliente.
Un servlet se puede definir como un conjunto de acciones capturadas desde un cliente y que pueden derivar en una respuesta http o pueden realizar un flujo de trabajo.
El cliente, mediante el navegador, hace una solicitud al contenedor web, que captura dicha solicitud en un servlet mediante un request.
El servlet puede enviar una respuesta mediante un objeto response, y dicha respuesta puede ser implementada mediante un objeto PrintWriter para devolver código HTML que se generará de nuevo en el cliente.
La llamada a un servlet se debe realizar a través de contenidos estáticos HTML, tales como páginas HTML o jsp.
Las páginas JSP contienen lógica de servidor y lenguaje HTML en un mismo conjunto. Teniendo en cuenta esto, las páginas jsp contienen parte gráfica y lógica de servidor. En realidad, las páginas JSP utilizan un servlet interno al que se accede mediante etiquetas de servidor y que también implementan el diseño HTML. Las páginas JSP son la evolución de los servlets y permiten realizar acciones más dinámicas que un servlet, ya que podemos utilizar la lógica del servidor separada del diseño, pero en un mismo conjunto.

Estructura de un servlet

Los servlets heredan de la clase HttpServlet y sobreescriben el método doPost o doGet, dependiendo de si los datos han sido enviados por el método POST o GET.
Podemos realizar la misma acción tanto para peticiones GET y POST simplemente llamando a doGet desde doPost o viceversa.
Ambos métodos, doPost y doGet, ofrecen dos argumentos:
  • Un objeto HttpServletRequest: Encapsula la petición http
  • Un objeto HttpServletResponse: Encapsula la respuesta HTTP.
El objeto HttpServletRequest nos permite acceder tanto a los datos como a las cabeceras de la petición HTTP.
El objeto HttpServletResponse nos permite modificar la información de salida, como los códigos de estado HTTP o las cabeceras de respuesta.
Además podemos obtener un objeto PrintWriter sobre el que generar el contenido dinámico del documento al cliente.
Los métodos doGet y doPost pueden lanzar las excepciones ServletException e IOexception por lo que deben controlar dichas excepciones, ya sea mediante throws o mediante try-catch.

Clases principales de servlets

Para poder trabajar con servlets, debemos importar los paquetes java.io (para el PrintWriter), javax.servlet (para el HttpServlet) y javax.servlet.http (para el HttpServletRequest y HttpServletResponse).
Los objetos para la definición de servlets se encuentran divididos en dos paquetes: javax.servlet.*, que proporciona clases necesarias para crear servlets genéricos, independientes del protocolo utilizado, y javax.servlet.http.*, que proporciona las clases que definen un servlet específico para el protocolo HTTP.
Servlet define la funcionalidad básica que tiene un servlet como es su ciclo de vida (métodos init, destroy) y procesar requests (método service).
Es implementado por la clase GenericServlet.
SingleThreadModel es una interfaz utilizada para marcar los servlets que se desea que se ejecuten en forma secuencial por requests simultáneos, evitando posibles problemas de procesamiento paralelo.
HttpServlet agrega la funcionalidad para procesar los variados tipos de request HTTP (principalmente los métodos doGet, doPost para procesar formularios GET y POST, respectivamente).
HttpServletRequest proporciona información del request del cliente al servlet a través del protocolo HTTP. Se pueden obtener datos como encabezados, cookies y características genéricas como dirección del cliente y parámetros recibidos desde él (getParameter). Permite también asociar objetos (setAttribute) y acceder al objeto HttpSession.
HttpServletResponse asiste a un servlet para enviar una respuesta al cliente a través de un canal de comunicación binario o de texto (getWriter). Provee también funcionalidad específica para respuestas HTTP como enviar encabezados, cookies (addCookie) y errores con códigos numéricos como 403 (sendError).
HttpSession permite identificar un usuario a través de más de una página, para esto se le asigna un identificador único que se mantiene mientras el usuario navega en el sitio (getId). Permite asignar un tiempo máximo de inactividad y se le pueden asociar objetos para compartir entre servlets (setAttribute y getAttribute).
El código completo de cualquier servlet sería el siguiente:
 
package NOMBREPAQUETE;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NewServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
}
 

Métodos de información del servidor con servlets

Los servlets pueden obtener información del servidor, ya sean datos propios del servidor o mediante el envío de información desde un formulario HTML. Tenemos los siguientes métodos:
  • Nombre del servidor: request.getServerName()
  • Número de puerto: request.getServerPort()
  • Software del servidor: getServletContext().getServerInfo()
  • Obtener la dirección IP del cliente: request.getRemoteAddr()
  • Obtener el nombre del cliente Host: request.getRemoteHost()
O mediante formularios HTML por medio de GET como una cadena añadida a la URL o POST:
El método String getParameter("nombreParámetro") devuelve el valor asociado al objeto que se ha denominado como nombreParámetro en la petición. Tenemos que tener en cuenta que se diferencia entre mayúsculas y minúsculas. Devuelve null si no aparece dicho parámetro en la petición.
  • Método getParameterValues("NombreParametros"): devuelve un array de valores. Se utiliza para capturar objetos que forman conjuntos en un formulario, como puede ser un grupo de radiobutton HTML.
  • GetParameterNames( ): devuelve una enumeración de los parámetros de petición sin ningún orden.

No hay comentarios:

Publicar un comentario