Вы находитесь на странице: 1из 13

Desarrollo de aplicaciones Web con Servlets y JSP

Laboratorio de Aplicaciones Telemticas (Curso 2009/2010)


Edited with emacs + L EX+ prosper AT

Jesus Arias Fisteus jaf@it.uc3m.es

Desarrollo de aplicaciones Web con Servlets y JSP p. 1

URIs relativas y absolutas

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 2

Introduccin
En (X)HTML, en un hiperenlace, imagen, etc. es necesario especicar una URI. El navegador necesita la URI completa para seguir el hiperenlace, cargar la imagen, etc. Una URI se puede especicar como: URI absoluta. URI relativa a un servidor. URI relativa.

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 3

URI absoluta
Se especica directamente la URI completa del recurso. En HTTP, incluye el identicador de protocolo, servidor, ruta en el servidor y parmetros. El navegador simplemente toma la URI.
<a href="http://www.it.uc3m.es/labttlat/lab8/">...</a>
Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 4

URI relativa al servidor


Se especica de forma absoluta la ruta del recurso (comenzando por /), pero no se indica protocolo ni servidor. El navegador toma el protocolo y servidor del recurso en el cual est el enlace, imagen, etc.
<a href="/labttlat/lab8/">...</a>
Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 5

URI relativa
Se especica slo la ruta del recurso relativa (no comienza por /), pero no se indica protocolo ni servidor, ni parte inicial de la ruta. El navegador toma el protocolo, servidor y parte inicial de la ruta del recurso en el cual est el enlace, imagen, etc. Para calcular la ruta, se toma la ruta del recurso actual excepto su ltimo nivel (similar a la forma de nombrar cheros en un sistema de cheros).
<a href="lab8/">...</a>

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 6

Ejemplo: URIs relativas


http://www.it.uc3m.es/labttlat/lab8/index.html

<html> <head> (...) </head> <body> <p> <img href="foto.jpg" alt="Una foto" /> </p> </body> </html>
Edited with emacs + L EX+ prosper AT

http://www.it.uc3m.es/labttlat/lab8/foto.jpg

Desarrollo de aplicaciones Web con Servlets y JSP p. 7

Recomendaciones de diseo
Es recomendable utilizar rutas relativas siempre que sea posible: Se puede cambiar la aplicacin de servidor o ruta sin necesidad de cambiar ninguna URI en los servlets, JSP, (X)HTML, etc.

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 8

Arquitectura de una aplicacin con Servlets y JSP


Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 9

Introduccin
Una aplicacin Web realiza tareas de procesado y presentacin: Los Servlets son adecuados para procesado. Las pginas JSP son adecuadas presentacin. Una aplicacin Web puede combinar Servlets y pginas JSP: Procesado de parmetros de la peticin: Servlets. Acceso a bases de datos: Servlets. Lgica de la aplicacin: Servlets. Presentacin (vistas): JSP.
Desarrollo de aplicaciones Web con Servlets y JSP p. 10

Edited with emacs + L EX+ prosper AT

Modelo de funcionamiento (I)


1. El cliente enva la peticin HTTP a un servlet. 2. El servlet procesa la peticin. Si es necesario, se conecta a la base de datos. 3. El servlet redirige la peticin a un JSP. Si es necesario, aade beans como parmetros.
Edited with emacs + L EX+ prosper AT

4. El JSP lee los parmetros y devuelve la respuesta formateada visualmente al usuario.

Desarrollo de aplicaciones Web con Servlets y JSP p. 11

Modelo de funcionamiento (II)

peticin HTTP navegador Servlet

re

forward

sp

ue

st

bean bean

Base de datos

HT TP

Edited with emacs + L EX+ prosper AT

JSP

Desarrollo de aplicaciones Web con Servlets y JSP p. 12

Mecanismos de redireccin de peticiones


Hay dos formas de redirigir una peticin a otro recurso: Redirecciones HTTP (sendRedirect): El servidor enva una respuesta al cliente con un cdigo 3xx y la URI a la que este debe enviar la peticin. Redirecciones internas en el servidor (forward): Se redirige la peticin de un recurso a otro dentro de la misma aplicacin Web. El recurso de la ltima redireccin devuelve al cliente la respuesta HTTP. La redireccin es transparente para el cliente.
Desarrollo de aplicaciones Web con Servlets y JSP p. 13

Edited with emacs + L EX+ prosper AT

Redirecciones sendRedirect
Fuerza el envo de una respuesta HTTP de redireccin al cliente. El cliente enva la peticin a la URI recibida en la respuesta.
// Redireccin con URI absoluta response.sendRedirect("http://www.ejemplo.es/");
Edited with emacs + L EX+ prosper AT

// Redireccin con URI relativa a la URI de la peticin actual response.sendRedirect("otra.html");

Desarrollo de aplicaciones Web con Servlets y JSP p. 14

Redirecciones forward
Un Servlet o JSP reenva la peticin a otro recurso (Servlet, JSP, HTML) de la misma aplicacin Web. El cliente no se entera de la redireccin (p.e., el navegador muestra la URI original de la peticin, no la redirigida).
Edited with emacs + L EX+ prosper AT

El control retorna al nalizar el mtodo forward, por lo que conviene que sea lo ltimo que se ejecuta.

Desarrollo de aplicaciones Web con Servlets y JSP p. 15

Redirecciones forward
Forward desde un Servlet:
RequestDispatcher rd = request.getRequestDispatcher("/vista.jsp"); rd.forward(request, response);

Forward desde un JSP:


<jsp:forward page="/vista.jsp"/>

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 16

Redirecciones forward con parmetros


El objeto de la peticin (ServletRequest) de los recursos origen y destino de la redireccin es el mismo: Se pueden aadir parmetros como atributos a la peticin.
Noticia nuevaNoticia = (...) request.setAttribute("noticia", nuevaNoticia); RequestDispatcher rd = request.getRequestDispatcher("/vista.jsp"); rd.forward(request, response);

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 17

Redirecciones forward con parmetros


Recogida de parmetros desde un Servlet:
Noticia nuevaNoticia = (Noticia) request.getAttribute("noticia");

Recogida de parmetros desde un JSP:


<jsp:useBean id="noticia" class="beans.Noticia" scope="request" />

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 18

Envo de parmetros de formularios

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 19

Envo de parmetros de formularios


El envo depende del mtodo HTTP y la codicacin: Mtodo HTTP: Mtodo GET. Mtodo POST. Codicacin: application/x-www-form-urlencoded multipart/form-data

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 20

Envo de parmetros de formularios


Codicacin URLencoded: Lista de parmetros separados por &. Para cada parmetro se especica nombre = valor. Los caracteres especiales (no letras/dgitos ASCII) se codican en hexadecimal por su cdigo UTF-8. Con mtodo GET o POST. No se usa para campos de tipo le.
usuario=juan&clave=juanpw&ssid=7fgxc&enviar=enviar nombre=juan%20l%C3%B3pez%20l%C3%B3pez

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 21

Envo de parmetros de formularios


Codicacin URLencoded con GET: Los parmetros se codican en la ruta (path) de la peticin HTTP. Slo apto para operaciones idempotentes.
GET /jaf/cgi-bin/html2xhtml.cgi?tipo=auto&html=default.html HTTP/1.1 Host: www.ejemplo.es (...)
Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 22

Envo de parmetros de formularios


Codicacin URLencoded con POST: Los parmetros se codican en el cuerpo de la peticin HTTP.
POST /jaf/cgi-bin/html2xhtml.cgi HTTP/1.1 (...) Content-Length: 27 Content-Type: application/x-www-form-urlencoded
Edited with emacs + L EX+ prosper AT

tipo=auto&html=default.html

Desarrollo de aplicaciones Web con Servlets y JSP p. 23

Envo de parmetros de formularios


Codicacin Multipart (RFC 2388): Datos encapsulados con un mensaje multiparte MIME. Slo con mtodo POST. Necesario para enviar campos de tipo le. No compatible con HttpServletRequest.getParameter(...) Es necesario utilizar APIs adicionales desde un Servlet/JSP.

Edited with emacs + L EX+ prosper AT

Desarrollo de aplicaciones Web con Servlets y JSP p. 24

Ejemplo: multipart/formdata
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
Edited with emacs + L EX+ prosper AT

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

Desarrollo de aplicaciones Web con Servlets y JSP p. 25

Вам также может понравиться