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

Computación Web con Servlets y JSP (I) …...Edited with emacs + LAT E X+ prosper Computación Web con Servlets y JSP (I) Computación Web (Curso 2015/2016) Jesus Arias Fisteus

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

Edited

with

em

acs

+LA

T EX

+pro

sper

Servlets

Computacion Web con Servlets y JSP (I)– p. 2

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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