Edited
with
em
acs
+LA
T EX
+pro
sper
Aplicaciones Web con Servlets y JSP (I)
Computación Web (Curso 2013/2014)
Jesus Arias Fisteus // [email protected]
Aplicaciones Web con Servlets y JSP (I)– p. 1
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de parámetros de formularios
Aplicaciones Web con Servlets y JSP (I)– p. 2
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de parámetros de formularios
El envío depende del método HTTP y lacodificación:
Método HTTP:Método GET.Método POST.
Codificación:application/x-www-form-urlencoded
multipart/form-data
Aplicaciones Web con Servlets y JSP (I)– p. 3
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de parámetros de formularios
Codificación URL–encoded:
Lista de parámetros separados por “&”.
Para cada parámetro se especifica nombre “=”valor.
Los caracteres especiales (no letras/dígitosASCII) se codifican en hexadecimal por sucódigo UTF-8.
Con método GET o POST.
No se usa para campos de tipo file.
usuario=juan&clave=juanpw&ssid=7fgxc&enviar=enviar
nombre=juan%20l%C3%B3pez%20l%C3%B3pez
Aplicaciones Web con Servlets y JSP (I)– p. 4
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de parámetros de formularios
Codificación URL–encoded con GET:
Los parámetros se codifican en la ruta (path)de la petición HTTP.
Sólo apto para operaciones idempotentes.
GET /jaf/cgi-bin/html2xhtml.cgi?tipo=auto&html=default.html HTTP/1.1
Host: www.ejemplo.es
(...)
Aplicaciones Web con Servlets y JSP (I)– p. 5
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de parámetros de formularios
Codificación URL–encoded con POST:
Los parámetros se codifican en el cuerpo de lapetición HTTP.
POST /jaf/cgi-bin/html2xhtml.cgi HTTP/1.1
(...)
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
tipo=auto&html=default.html
Aplicaciones Web con Servlets y JSP (I)– p. 6
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de parámetros de formularios
Codificación Multipart (RFC 2388):
Datos encapsulados con un mensaje multiparteMIME.
Sólo con método POST.
Necesario para enviar campos de tipo file.
No compatible conHttpServletRequest.getParameter(...)
Es necesario utilizar APIs adicionales desdeun Servlet/JSP.
Aplicaciones Web con Servlets y JSP (I)– p. 7
Edited
with
em
acs
+LA
T EX
+pro
sper
Ejemplo: multipart/form–data
POST /jaf/cgi-bin/html2xhtml.cgi HTTP/1.1
(...)
Content-Type: multipart/form-data; boundary=----------2qYzCGdatrpobJh4m5rz50
Content-Length: 972
------------2qYzCGdatrpobJh4m5rz50
Content-Disposition: form-data; name="tipo"
auto
------------2qYzCGdatrpobJh4m5rz50
Content-Disposition: form-data; name="html"; filename="readme.html"
Content-Type: text/html
<html xmlns="http://www.w3.org/1999/xhtml">
(...)
</html>
------------2qYzCGdatrpobJh4m5rz50--
Aplicaciones Web con Servlets y JSP (I)– p. 8
Edited
with
em
acs
+LA
T EX
+pro
sper
Servlets
Aplicaciones Web con Servlets y JSP (I)– p. 9
Edited
with
em
acs
+LA
T EX
+pro
sper
Introducción
Servlet:
Programa Java que se ejecuta en un servidor(normalmente de HTTP) y extiende sufuncionalidad.
Atiende peticiones recibidas desde los clientesy genera las respuestas.
Aplicaciones Web con Servlets y JSP (I)– p. 10
Edited
with
em
acs
+LA
T EX
+pro
sper
Introducción
Características principales:
Se ejecutan en una máquina virtual dentro delproceso del servidor.
Gestionados por un contenedor de servlets.
Cada petición HTTP recibida se procesa en unhilo, e invoca un método del servlet.
Además de servidores de HTTP, puedenextender cualquier tipo de servidor (porejemplo, FTP).
Aplicaciones Web con Servlets y JSP (I)– p. 11
Edited
with
em
acs
+LA
T EX
+pro
sper
¡Hola Mundo!
public class HolaMundo extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>¡Hola Mundo!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>¡Hola Mundo!</h1>");
out.println("</body>");
out.println("</html>");
}
}
Aplicaciones Web con Servlets y JSP (I)– p. 12
Edited
with
em
acs
+LA
T EX
+pro
sper
Concepto de aplicación Web
Conjunto de servlets, JSPs y otros recursos(ficheros HTML, imágenes, ficheros deconfiguración, etc.) relacionados entre sí porformar parte de la misma aplicación.
Los recursos de una aplicación Web comparten unprefijo de URL.
Una aplicación Web se puede empaquetar en unfichero WAR.
Aplicaciones Web con Servlets y JSP (I)– p. 13
Edited
with
em
acs
+LA
T EX
+pro
sper
Ciclo de vida de un servlet
Cuando arranca el servidor:
Se crea una instancia.
Se inicializa el servlet (método init())
Cuando llega una petición:
Se invoca el método service() sobre unnuevo hilo.
Cuando se cierra el servidor:
Se invoca el método destroy() y después sedestruye el servlet.
Aplicaciones Web con Servlets y JSP (I)– p. 14
Edited
with
em
acs
+LA
T EX
+pro
sper
Consecuencias del ciclo de vida (I)
Una única máquina virtual:
Compartición de datos entre servlets.
Persistencia de instancias:
Consumo reducido de memoria.
Eliminación del tiempo de instanciación einicialización.
Persistencia de estado, datos y recursos:Atributos del servlet persistentes.Conexiones permanentes a bases de datos.
Persistencia de hilos.
Aplicaciones Web con Servlets y JSP (I)– p. 15
Edited
with
em
acs
+LA
T EX
+pro
sper
Consecuencias del ciclo de vida (II)
Necesidad de sincronización:
Problemas si se accede a los mismos datosconcurrentemente desde distintos hilos(atributos de clase o instancia, base de datos,etc.)
SingleThreadModel : modo alternativo que evita elacceso concurrente a los atributos de instancia deun servlet manteniendo múltiples instancias decada uno. En general, su uso está desaconsejado.
Aplicaciones Web con Servlets y JSP (I)– p. 16
Edited
with
em
acs
+LA
T EX
+pro
sper
API de servlets
Conjunto de clases e interfaces que implementanla interfaz entre el servidor y los servlets.
Paquete javax.servlet: clases genéricas,válidas para cualquier protocolo.
Paquete javax.servlet.http: extiende laAPI y la concreta para el protocolo HTTP.
Estas APIs son comunes para todos losservidores capaces de ejecutar servlets.
La versión más reciente es API Servlet 3.1,aunque trabajaremos con la 3.0.
Aplicaciones Web con Servlets y JSP (I)– p. 17
Edited
with
em
acs
+LA
T EX
+pro
sper
La interfaz Servlet
Un servlet implementa la interfazjavax.servlet.Servlet.
Normalmente hereda la implementación de unade estas clases:
javax.servlet.GenericServletjavax.servlet.HttpServlet
Métodos importantes de la interfaz:
void service(ServletRequest req,ServletResponse res)
void init(ServletConfig config)
void destroy()
Aplicaciones Web con Servlets y JSP (I)– p. 18
Edited
with
em
acs
+LA
T EX
+pro
sper
El método service()
void service(ServletRequest req, ServletResponse res)
Service()
Implementado por la subclaseLeyenda:
Subclase de GenericServlet
solicitud
respuesta
Aplicaciones Web con Servlets y JSP (I)– p. 19
Edited
with
em
acs
+LA
T EX
+pro
sper
Servlets HTTP
Heredan de HttpServlet, que implementa elmétodo service() para que invoque a:
void doGet(HttpServletRequest req,HttpServletResponse resp)
void doPost(HttpServletRequest req,HttpServletResponse resp)
void do...(HttpServletRequest req,HttpServletResponse resp)
getLastModified(HttpServletRequest req)
Los servlets reescriben sólo los métodos doXXXque necesiten.
Aplicaciones Web con Servlets y JSP (I)– p. 20
Edited
with
em
acs
+LA
T EX
+pro
sper
Servlets HTTP
doPost()
doGet()solicitud GET
respuesta
respuesta
solicitud POSTService()
Subclase de HTTPServlet
Implementado por la subclaseLeyenda:
Implementado por HTTPServlet
Aplicaciones Web con Servlets y JSP (I)– p. 21
Edited
with
em
acs
+LA
T EX
+pro
sper
Clases e interfaces útiles
Interfaz ServletConfig
Interfaz ServletContext
Interfaz HttpServletRequest
Interfaz HttpServletResponse
Interfaz HttpSession
Clase Cookie
Aplicaciones Web con Servlets y JSP (I)– p. 22
Edited
with
em
acs
+LA
T EX
+pro
sper
Acceso a información útil (I)
Parámetros de inicio:
Se configuran en el fichero WEB-INF/web.xml
ServletConfig.getInitParameter()
Información acerca del servidor:
ServletRequest.getServerName()
ServletRequest.getServerPort()
ServletContext.getServerInfo()
Aplicaciones Web con Servlets y JSP (I)– p. 23
Edited
with
em
acs
+LA
T EX
+pro
sper
Acceso a información útil (II)
Información acerca del cliente:
ServletRequest.getRemoteAddr()
ServletRequest.getRemoteHost()
HttpServletRequest.getRemoteUser()
Aplicaciones Web con Servlets y JSP (I)– p. 24
Edited
with
em
acs
+LA
T EX
+pro
sper
Información de la petición (I)
Información general:
HttpServletRequest.getMethod()
HttpServletRequest.getQueryString()
HttpServletRequest.getHeader(. . . )
Aplicaciones Web con Servlets y JSP (I)– p. 25
Edited
with
em
acs
+LA
T EX
+pro
sper
Información de la petición (II)
Parámetros de la petición:
ServletRequest.getParameter(String name)
ServletRequest.getParameterValues(Stringname)
ServletRequest.getParameterNames()
Nota: esta API no funciona conmultipart/form-data.
Desde Servlet 3.0 es posible acceder aparámetros enviados con multipart/form-datamediante getParts() y getPart() enServletRequest.
Aplicaciones Web con Servlets y JSP (I)– p. 26
Edited
with
em
acs
+LA
T EX
+pro
sper
Información de la petición (III)
Cuerpo de la petición:
ServletRequest.getContentType()
ServletRequest.getContentLength()
ServletRequest.getInputStream()
ServletRequest.getReader()
Aplicaciones Web con Servlets y JSP (I)– p. 27
Edited
with
em
acs
+LA
T EX
+pro
sper
Respuesta (I)
El servlet puede escribir, en una respuesta HTTP:
Código de estado.
Cabeceras (incluidas cookies).
Cuerpo.
Código de estado:
HttpServletResponse.sendError(int sc)
HttpServletResponse.setStatus(int sc)
HttpServletResponse.sendRedirect(Stringlocation)
Aplicaciones Web con Servlets y JSP (I)– p. 28
Edited
with
em
acs
+LA
T EX
+pro
sper
Respuesta (II)
Cabeceras:
HttpServletResponse.setHeader(String name,String value)
HttpServletResponse.addCookie(Cookiecookie)
ServletResponse.setContentType(String type)
ServletResponse.setContentLength(int length)
Cuerpo:
ServletResponse.getOutputStream()
ServletResponse.getWriter()
Aplicaciones Web con Servlets y JSP (I)– p. 29
Edited
with
em
acs
+LA
T EX
+pro
sper
Sesiones (I)
Tomcat mantiene automáticamente las sesionesde usuario:
Por defecto, utiliza cookies para que el clienteenvíe su identificador de sesión en cadapetición.
Cada sesión se representa con un objetoHttpSession.
Una sesión caduca tras un tiempo(configurable) sin recibir peticionescorrespondientes a la misma.
Aplicaciones Web con Servlets y JSP (I)– p. 30
Edited
with
em
acs
+LA
T EX
+pro
sper
Sesiones (II)
Obtención del objeto sesión desde el servlet:
HttpServletRequest.getSession(booleancreate):
Devuelve el objeto de sesión correspondientea la petición.Con parámetro true, crea una nueva sesión sila petición no corresponde a ninguna sesión.
Se puede almacenar objetos en la sesión:
HttpSession.setAttribute(String name, Objectvalue)
HttpSession.getAttribute(String name)
Aplicaciones Web con Servlets y JSP (I)– p. 31
Edited
with
em
acs
+LA
T EX
+pro
sper
Contexto
Cada aplicación Web en cada JVM tiene asociadoun objeto ServletContext:
Todos los servlets y JSPs de una mismaaplicación Web en una misma JVM compartenel mismo objeto de contexto.
Da acceso a información y funciones delservidor.
Permite compartir objetos Java entre todos losrecursos de la misma aplicación Web:
ServletContext.setAttribute(String name,Object value)ServletContext.getAttribute(String name)
Aplicaciones Web con Servlets y JSP (I)– p. 32
Edited
with
em
acs
+LA
T EX
+pro
sper
Referencias
Marty Hall, Core Servlets and JavaServer Pages.Prentice Hall (2000).
JSR 315: Java Servlet 3.0 Specification
Aplicaciones Web con Servlets y JSP (I)– p. 33