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 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()
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