Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper...

33
Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jes ´ us Arias Fisteus // [email protected] Aplicaciones Web con Servlets y JSP (I)– p. 1

Transcript of Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper...

Page 1: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

Edited

with

em

acs

+LA

T EX

+pro

sper

Aplicaciones Web con Servlets y JSP (I)

Computación Web (Curso 2014/2015)

Jesus Arias Fisteus // [email protected]

Aplicaciones Web con Servlets y JSP (I)– p. 1

Page 2: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 3: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 4: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 5: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 6: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 7: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 8: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 9: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

Edited

with

em

acs

+LA

T EX

+pro

sper

Servlets

Aplicaciones Web con Servlets y JSP (I)– p. 9

Page 10: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 11: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Aplicaciones Web con Servlets y JSP (I)– p. 11

Page 12: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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 }

Aplicaciones Web con Servlets y JSP (I)– p. 12

Page 13: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 14: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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.

Aplicaciones Web con Servlets y JSP (I)– p. 14

Page 15: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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.

Aplicaciones Web con Servlets y JSP (I)– p. 15

Page 16: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Aplicaciones Web con Servlets y JSP (I)– p. 16

Page 17: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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 más reciente es API Servlet 3.1.

Aplicaciones Web con Servlets y JSP (I)– p. 17

Page 18: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Aplicaciones Web con Servlets y JSP (I)– p. 18

Page 19: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 20: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 21: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 22: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 23: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 24: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

Edited

with

em

acs

+LA

T EX

+pro

sper

Acceso a información útil (II)

Información acerca del cliente:

ServletRequest.getRemoteAddr()

ServletRequest.getRemoteHost()

Aplicaciones Web con Servlets y JSP (I)– p. 24

Page 25: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 26: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 27: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 28: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 29: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 30: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 31: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Page 32: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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)

Aplicaciones Web con Servlets y JSP (I)– p. 32

Page 33: Aplicaciones Web con Servlets y JSP (I) Computación Web ......Edited with emacs + LAT E X+ prosper Aplicaciones Web con Servlets y JSP (I) Computación Web (Curso 2014/2015) Jesus

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

Aplicaciones Web con Servlets y JSP (I)– p. 33