Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Edited
with
em
acs
+LA
T EX
+pro
sper
Computación Web con Servlets y JSP (I)
Computación Web (Curso 2015/2016)
Jesus Arias Fisteus // [email protected]
Computacion Web con Servlets y JSP (I)– p. 1
Edited
with
em
acs
+LA
T EX
+pro
sper
Servlets
Computacion Web con Servlets y JSP (I)– p. 2
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.
Computacion Web con Servlets y JSP (I)– p. 3
Edited
with
em
acs
+LA
T EX
+pro
sper
Introducción
Características principales:
Se ejecutan en una máquina virtual de Java(JVM) dentro del proceso 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).
Computacion Web con Servlets y JSP (I)– p. 4
Edited
with
em
acs
+LA
T EX
+pro
sper
¡Hola Mundo!
1 public class HolaMundo extends HttpServlet {2
3 public void doGet(HttpServletRequest request,4 HttpServletResponse response)5 throws IOException, ServletException {6
7 response.setContentType("text/html; charset=UTF-8");8 PrintWriter out = response.getWriter();9
10 out.println("<!DOCTYPE html>");11 out.println("<html>");12 out.println("<head>");13 out.println("<title>¡Hola Mundo!</title>");14 out.println("</head>");15 out.println("<body>");16 out.println("<h1>¡Hola Mundo!</h1>");17 out.println("</body>");18 out.println("</html>");19 }20 }
Computacion Web con Servlets y JSP (I)– p. 5
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.
Computacion Web con Servlets y JSP (I)– p. 6
Edited
with
em
acs
+LA
T EX
+pro
sper
Ciclo de vida de un servlet
Cuando arranca el servidor:
1. Se crea una instancia.
2. Se inicializa el servlet (método init())
Cuando llega una petición:
1. Se invoca el método service() sobre unnuevo hilo.
Cuando se cierra el servidor:
1. Se invoca el método destroy() y después sedestruye el servlet.
Computacion Web con Servlets y JSP (I)– p. 7
Edited
with
em
acs
+LA
T EX
+pro
sper
Consecuencias del ciclo de vida (I)
Una única JVM:
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.
Computacion Web con Servlets y JSP (I)– p. 8
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.)
Computacion Web con Servlets y JSP (I)– p. 9
Edited
with
em
acs
+LA
T EX
+pro
sper
API de servlets
Conjunto de clases e interfaces que permiten lainteracción entre el contenedor de servlets y losservlets:
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 loscontenedores de servlets.
La versión estable más reciente es API Servlet3.1.
Computacion Web con Servlets y JSP (I)– p. 10
Edited
with
em
acs
+LA
T EX
+pro
sper
La interfaz Servlet
Un servlet debe implementar 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()
Computacion Web con Servlets y JSP (I)– p. 11
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
Computacion Web con Servlets y JSP (I)– p. 12
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.
Computacion Web con Servlets y JSP (I)– p. 13
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
Computacion Web con Servlets y JSP (I)– p. 14
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
Computacion Web con Servlets y JSP (I)– p. 15
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()
Computacion Web con Servlets y JSP (I)– p. 16
Edited
with
em
acs
+LA
T EX
+pro
sper
Acceso a información útil (II)
Información acerca del cliente:
ServletRequest.getRemoteAddr()
ServletRequest.getRemoteHost()
Computacion Web con Servlets y JSP (I)– p. 17
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(. . . )
Computacion Web con Servlets y JSP (I)– p. 18
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.
Computacion Web con Servlets y JSP (I)– p. 19
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()
Computacion Web con Servlets y JSP (I)– p. 20
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)
Computacion Web con Servlets y JSP (I)– p. 21
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()
Computacion Web con Servlets y JSP (I)– p. 22
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.
Computacion Web con Servlets y JSP (I)– p. 23
Edited
with
em
acs
+LA
T EX
+pro
sper
Sesiones (II)
Obtención del objeto sesión desde el servlet:
HttpServletRequest.getSession():Devuelve el objeto de sesión correspondientea la petición.
Se puede almacenar objetos en la sesión:
HttpSession.setAttribute(String name, Objectvalue)
HttpSession.getAttribute(String name)
Computacion Web con Servlets y JSP (I)– p. 24
Edited
with
em
acs
+LA
T EX
+pro
sper
Contexto
Cada aplicación Web en un contenedor deservlets tiene asociado un objetoServletContext:
Todos los servlets y JSPs de una mismaaplicación Web comparten el mismo objeto decontexto.
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)
Computacion Web con Servlets y JSP (I)– p. 25
Edited
with
em
acs
+LA
T EX
+pro
sper
Referencias
Marty Hall, Core Servlets and JavaServer Pages.Prentice Hall (2000).
JSR 340: Java Servlet 3.1 Specification
Computacion Web con Servlets y JSP (I)– p. 26
Edited
with
em
acs
+LA
T EX
+pro
sper
Envío de parámetros de formularios
Computacion Web con Servlets y JSP (I)– p. 27
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
Computacion Web con Servlets y JSP (I)– p. 28
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
Computacion Web con Servlets y JSP (I)– p. 29
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
(...)
Computacion Web con Servlets y JSP (I)– p. 30
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
Computacion Web con Servlets y JSP (I)– p. 31
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.
Computacion Web con Servlets y JSP (I)– p. 32
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--
Computacion Web con Servlets y JSP (I)– p. 33