Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Servlets
Germán Parra
Servlet
• En servlet es una clase Java que puede recibir peticiones
(normalmente HTTP) y generar una salida (normalmente HTML o
XML)
• Los servlets se ejecutan en un contenedor web
• Paquetes javax.servlet y javax.servlet.http
Servlets - tareas
Estructura básica de un Servlet
• Debe heredar la clase javax.servlet.http.HttpServlet.
• Es una clase abstracta que representa a los servlets
HTTP.
• Esta clase ofrece una serie de métodos como pueden
ser doGet(), doDelete() o doPost() que podrá
sobrescribir el servlet.
• Los servlets son invocados a través de peticiones HTTP
mediante el método GET o POST.
Estructura básica de un Servlet – cont.
• Los métodos doPost() y doGet() poseen dos parámetros
que son interfaces del paquete javax.servlet.http:
• Un objeto HttpServletRequest petición HTTP
• Un objeto HttpServletResponse respuesta HTTP
• URL:
• http://localhost:8080/<dir>/servlet/<nombre-servlet>
• http://127.0.0.1/ej_servlets/HolaMundo2?nombre=Pepe&apellidos=Garcia
Clase HttpServlet
• void doGet(HttpServletRequest req, HttpServletResponse res): este
método será invocado por el servidor a través del método
service(), para permitir que el servlet trate una petición GET del
protocolo HTTP.
• void doPost(HttpServletRequest req, HttpServletResponse res):
método invocado por el servidor a través del método service(),
para permitir que el servlet trate una petición POST.
Clase HttpServlet – cont.
• void service(HttpServletRequest req, HttpServletResponse res): recibe
las peticiones estándar del protocolo HTTP y las redirecciona a los
métodos doXXX adecuados definidos en la clase del servlet.
Desde el método service() se invocarán los distintos métodos doXXX
de la clase HttpServlet.
• No es necesario ni recomendable sobrescribir este método.
Clase HttpServlet – cont.
• void doDelete(HttpServletRequest req, HttpServletResponse res)
• void doOptions(HttpServletRequest req, HttpServletResponseres):
• void doPut(HttpServletRequest req, HttpServletResponse res)
• void doTrace(HttpServletRequest req, HttpServletResponse res)
• long getLastModified(HttpServletRequest req)
Arquitectura del paquete Servlet
Servlet
GenericServlet
HttpServlet
HttpServletRequest HttpServletResponse
Clase GenericServlet
• Esta clase abstracta perteneciente al paquete javax.servlet,
representa a los servlets de forma genérica de forma independiente
al protocolo utilizado para recibir y responder las peticiones de los
clientes.
• La clase GenericServlet implementa las interfaces Servlet y
ServletConfig, también pertenecientes al paquete javax.servlet.
• De esta clase hereda la clase HttpServlet, ya que debe acomodar las
especificaciones de los servlets genéricos a los servlets HTTP.
Clase GenericServlet – cont.
• void destroy():
• String getInitParameter(String nombre)
• Enumeration getInitParameterNames()
• ServletConfig getServletConfig()
• ServletContext getServletContext()
• String getServletInfo()
• String getServletName()
• void init(ServletConfig config)
• void init()
• void log(String mensaje)
• void log(String mensaje, Throwable t)
• void service(ServletRequest req, ServletResponse res)
Ciclo de vida de un servlet
• Cuando se crea un servlet, va a existir una única instancia de este
servlet, y un hilo de ejecución (thread) por cada invocación, donde se
tratará el método doGet() o doPost() correspondiente.
Ciclo de vida de un servlet
• Los métodos doGet() y doPost() deben sincronizar el
acceso a datos compartidos (p.ej.: atributos de un
servlet), ya que múltiples hilos de ejecución pueden
acceder a los mismos datos de manera simultánea.
• Usar la sentencia synchronized para acceder a objetos o
información compartida.
public class MiServlet extends HttpServlet implements
SingleThreadModel{
Método init()
• Únicamente se invoca cuando el servlet es creado, y no es llamado
de nuevo por cada petición de usuario.
• Se crea en la primera invocación, o al arrancar el servidor (debe
estar registrado en el servidor web).
public void init() throws ServletException{
//Código de inicialización
}
http://localhost:8080/ej_servlets/ServletNavegador
Leyendo cabeceras de petición
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletNavegador extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
PrintWriter out = response.getWriter();
response.setContentType("text/html");
out.println("<html><body><h1>Navegador:"+
request.getHeader("User-Agent")+"</h1></body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
doGet(request,response);
}
}
Leyendo cabeceras de petición - cont.
import java.io.*;
import java.net.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
formulario.html
Formularios y Servlets – cont.
Formularios y Servlets – cont.
Uso de Cookies
• Es un archivo que se escribe en la máquina del cliente y mantiene
información entre diferentes conexiones HTTP.
• Consideraciones:
• Las cookies se pueden perder inf. almacenada
• Las cookies pueden ser modificados por el cliente autenticidad de
información guardada en la cookie.
• Las cookies pueden ser copiadas sin requerir consentimiento.
• Muchos usuarios deshabilitan su uso en los browsers.
• Navegadores aceptan unos 20 cookies por sitio, y 300 como máximo.
• Cada cookie puede tener máximo 4KB
Clase Cookie
• Pertenece a javax.servlet.http
• Cookie(String nombre, String valor)
• String getComment(): devuelve el comentario que describe el propósito de la
cookie.
• String getDomain()
• int getMaxAge(): caducidad.
• String getName()
• boolean getSecure(): indica si el navegador ha enviado la cookie a través de un
protocolo seguro.
• String getValue()
• void setDomain(String patrón)
• void setMaxAge(int caducidad)
• void setValue(String valor)
Clase Cookie (cont.)
• Un servlet envía cookies al navegador Web utilizando el método
addCookie() del interfaz HttpServletResponse, este método añadirá
las cabeceras de respuesta HTTP necesarias para enviar las cookies al
navegador.
• Las cookies se puede obtener de una petición utilizando el método
getCookies() del interfaz HttpServletRequest.
Cookies: http://localhost:8080/ej_servlets/cookies.html
<!DOCTYPE html>
<html>
<head>
<title>Cookies en Servlet</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div>Ejemplo de uso de cookies</div>
<form action="DatosCookie" method="GET">
<b>Datos personales</b><br>
Nombre del cookie: <input type="text" id="nomb" name="nombre" size="50" placeholder="Ingrese un nombre del cookie"
minlength="3" maxlength="50" required><p>
Valor del cookie: <input type="text" name="valor" size="50" placeholder="Valor del cookie"
minlength="3" maxlength="50" required><p>
<input type="submit" name="aceptar" value="Enviar">
<input type="reset" name="cancelar" value="Cancelar">
</form>
</body>
</html>
Cookies: http://localhost:8080/ej_servlets/cookies.html