Aplicaciones Web con Servlets y JSP (I) · Introducci on I Servlet: I Programa Java que se ejecuta...

36
Aplicaciones Web con Servlets y JSP (I) Jes us Arias Fisteus Aplicaciones Web (2017/18) Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 1

Transcript of Aplicaciones Web con Servlets y JSP (I) · Introducci on I Servlet: I Programa Java que se ejecuta...

Aplicaciones Web con Servlets y JSP (I)

Jesus Arias Fisteus

Aplicaciones Web (2017/18)

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 1

Parte I

Servlets

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 2

Introduccion

I Servlet:I Programa Java que se ejecuta en un servidor (normalmente de

HTTP) y extiende su funcionalidad.I Atiende peticiones recibidas desde los clientes y genera las

respuestas.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 3

Introduccion

I Caracterısticas principales:I Se ejecutan en una maquina virtual de Java (JVM) dentro del

proceso del servidor.I Gestionados por un contenedor de servlets.I Cada peticion HTTP recibida se procesa en un hilo, e invoca

un metodo del servlet.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 4

¡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 out.println("<!DOCTYPE html >");

10 out.println("<html >");11 out.println("<head >");12 out.println("<title >¡Hola Mundo!</title >");13 out.println("</head >");14 out.println("<body >");15 out.println("<h1 >¡Hola Mundo!</h1 >");16 out.println("</body >");17 out.println("</html >");18 }19 }

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 5

Concepto de aplicacion Web

I Conjunto de servlets, JSPs y otros recursos (ficheros HTML,imagenes, ficheros de configuracion, etc.) relacionados entre sıpor formar parte de la misma aplicacion.

I Los recursos de una aplicacion Web comparten un prefijo deURL.

I Una aplicacion Web se puede empaquetar en un fichero WARpara ser desplegada en otros contenedores de servlets.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 6

API de servlets

I Conjunto de clases e interfaces que permiten la interaccionentre el contenedor de servlets y los servlets:

I Paquete javax.servlet: clases genericas, validas paracualquier protocolo.

I Paquete javax.servlet.http: extiende la API y la concretapara el protocolo HTTP.

I Estas APIs son comunes para todos los contenedores deservlets.

I La version publicada mas reciente es API Servlet 3.1.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 7

La interfaz Servlet

I Un servlet debe implementar la interfaz javax.servlet.Servlet:I Normalmente hereda la implementacion de una de estas clases

en vez de implementar directamente la interfaz:I javax.servlet.GenericServletI javax.servlet.HttpServlet

I Metodos importantes de la interfaz:I void service(ServletRequest req, ServletResponse res)I void init(ServletConfig config)I void destroy()

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 8

Ciclo de vida de un servlet

I Cuando arranca el servidor:

1. Se crea una instancia.2. Se inicializa el servlet (metodo init())

I Cuando llega una peticion:

1. Se invoca el metodo service() sobre un nuevo hilo.

I Cuando se cierra el servidor:

1. Se invoca el metodo destroy() y despues se destruye elservlet.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 9

Consecuencias del ciclo de vida (I)

I Una unica JVM:I Comparticion de datos entre servlets.

I Persistencia de instancias:I Consumo reducido de memoria.I Eliminacion del tiempo de instanciacion e inicializacion.I Persistencia de estado, datos y recursos:

I Atributos del servlet persistentes.I Conexiones permanentes a bases de datos.

I Persistencia de hilos.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 10

Consecuencias del ciclo de vida (II)

I Necesidad de sincronizacion:I Problemas si se accede a los mismos datos concurrentemente

desde distintos hilos (atributos de clase o instancia, conexionJDBC con la base de datos, etc.)

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 11

El metodo service()

void service(ServletRequest req, ServletResponse res)

service()

Implementado por la subclaseLeyenda:

Subclase de GenericServlet

solicitud

respuesta

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 12

Servlets HTTP

I Heredan de HttpServlet, que implementa el metodoservice() para que invoque a:

I void doGet(HttpServletRequest req, HttpServletResponse resp)I void doPost(HttpServletRequest req, HttpServletResponse

resp)I void do...(HttpServletRequest req, HttpServletResponse resp)I getLastModified(HttpServletRequest req)

I Los servlets reescriben solo los metodos doXXX que necesiten.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 13

Servlets HTTP

doPost()

doGet()solicitud GET

respuesta

respuesta

solicitud POSTservice()

Subclase de HTTPServlet

Implementado por la subclaseLeyenda:

Implementado por HTTPServlet

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 14

Ejercicios

I Practica 6:I Ejercicio 1.I Ejercicio 2.I Ejercicio 3.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 15

Clases e interfaces utiles

I Interfaz ServletConfig

I Interfaz ServletContext

I Interfaz HttpServletRequest

I Interfaz HttpServletResponse

I Interfaz HttpSession

I Clase Cookie

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 16

Acceso a informacion util (I)

I Parametros de inicio:I Se configuran en el fichero WEB-INF/web.xmlI getServletConfig().getInitParameter(String name)

I Informacion acerca del servidor:I request.getServerName()I request.getServerPort()I getServletContext().getServerInfo()

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 17

Acceso a informacion util (II)

I Informacion acerca del cliente:I request.getRemoteAddr()I request.getRemoteHost()

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 18

Informacion de la peticion (I)

I Informacion general:I request.getMethod()I request.getQueryString()I request.getHeader(String name)

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 19

Informacion de la peticion (II)

I Parametros de la peticion:I request.getParameter(String name)I request.getParameterValues(String name)I request.getParameterNames()I Nota: esta API no funciona con multipart/form-data.

I Desde Servlet 3.0 es posible acceder a parametros enviadoscon multipart/form-data mediante request.getParts() yrequest.getPart().

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 20

Informacion de la peticion (III)

I Cuerpo de la peticion:I request.getContentType()I request.getContentLength()I request.getInputStream()I request.getReader()

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 21

Respuesta (I)

I El servlet puede escribir, en una respuesta HTTP:I Codigo de estado.I Cabeceras (incluidas cookies).I Cuerpo.

I Codigo de estado:I response.sendError(int sc)I response.setStatus(int sc)I response.sendRedirect(String location)

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 22

Respuesta (II)

I Cabeceras:I response.setHeader(String name, String value)I response.addCookie(Cookie cookie)I response.setContentType(String type)I response.setContentLength(int length)

I Cuerpo:I response.getOutputStream()I response.getWriter()

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 23

Sesiones (I)

I Tomcat mantiene automaticamente las sesiones de usuario:I Asigna un token de sesion a cada nueva sesion.I Por defecto, utiliza cookies para que el cliente envıe su token

de sesion en cada peticion.I Cada sesion se representa en el servlet con un objeto

HttpSession.I Una sesion caduca tras un tiempo (configurable) sin recibir

peticiones correspondientes a la misma.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 24

Sesiones (II)

I Obtencion del objeto sesion desde el servlet:I request.getSession():

I Devuelve el objeto de sesion correspondiente a la peticion.

I Se puede almacenar objetos en la sesion:I session.setAttribute(String name, Object value)I session.getAttribute(String name)

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 25

Contexto

I Cada aplicacion Web en un contenedor de servlets tieneasociado un objeto ServletContext:

I Todos los servlets y JSPs de una misma aplicacion Webcomparten el mismo objeto de contexto.

I Da acceso a informacion y funciones del servidor.I Permite compartir objetos Java entre todos los recursos de la

misma aplicacion Web:I getServletContext().setAttribute(String name, Object value)I getServletContext().getAttribute(String name)

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 26

Ejercicios

I Practica 6:I Ejercicio 4.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 27

Referencias

I Marty Hall, Core Servlets and JavaServer Pages. Prentice Hall(2000).

I JSR 340: Java Servlet 3.1 Specification

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 28

Parte II

Envıo de parametros de formularios

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 29

Envıo de parametros de formularios

I El envıo depende del metodo HTTP y la codificacion:I Metodo HTTP:

I Metodo GET.I Metodo POST.

I Codificacion:I application/x-www-form-urlencodedI multipart/form-data

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 30

Envıo de parametros de formularios

I Codificacion URL–encoded:I Lista de parametros separados por “&”.I Para cada parametro se especifica nombre “=” valor.I Los caracteres especiales (no letras/dıgitos ASCII) se codifican

en hexadecimal por su codigo UTF-8.I Con metodo GET o POST.I 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 (2017/18) Aplicaciones Web con Servlets y JSP (I) 31

Envıo de parametros de formularios

I Codificacion URL–encoded con GET:I Los parametros se codifican en la ruta (path) de la peticion

HTTP.I Solo apto para operaciones idempotentes.

GET /jaf/cgi-bin/html2xhtml.cgi?tipo=auto&html=default.html HTTP/1.1

Host: www.ejemplo.es

(...)

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 32

Envıo de parametros de formularios

I Codificacion URL–encoded con POST:I Los parametros se codifican en el cuerpo de la peticion 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 (2017/18) Aplicaciones Web con Servlets y JSP (I) 33

Envıo de parametros de formularios

I Codificacion Multipart (RFC 2388):I Datos encapsulados con un mensaje multiparte MIME.I Solo con metodo POST.I Necesario para enviar campos de tipo file.I No compatible con request.getParameter(...)

I Es necesario utilizar APIs adicionales desde un Servlet/JSP.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 34

Ejemplo: multipart/form–data

POST /jaf/cgi-bin/html2xhtml.cgi HTTP/1.1(...)Content-Type: multipart/form-data; boundary=----------2qYzCGdatrpobJh4m5rz50Content-Length: 972

------------2qYzCGdatrpobJh4m5rz50Content-Disposition: form-data; name="tipo"

auto------------2qYzCGdatrpobJh4m5rz50Content-Disposition: form-data; name="html"; filename="readme.html"Content-Type: text/html

<html xmlns="http://www.w3.org/1999/xhtml">(...)</html>------------2qYzCGdatrpobJh4m5rz50--

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 35

Ejercicios

I Practica 6:I Ejercicio 5.

Aplicaciones Web (2017/18) Aplicaciones Web con Servlets y JSP (I) 36