1. En las plantillas de la sesión puedes encontrar la aplicación WebClient. Se trata de una herramienta que simula un cliente HTTP (el servidor al que conectar será cualquier servidor que se tenga disponible: el de nuestra máquina, o uno remoto).
Se ejecuta con:
java -jar WebClient.jar
Aparece luego una ventana como esta:
Figura 1. WebClient
En ella pondremos:
www.ua.es
)80
)GET / HTTP/1.1
Host:www.ua.es
Tras enviar los datos de la petición, nos aparece abajo la respuesta del servidor (la misma que con la aplicación anterior):
HTTP/1.1 200 OK Age:965 Date: Thu,24 Oct 2002 20:52:13 GMT Content-Length:2657 Content-Type=text/html ... <!DOCTYPE...> ...Se pide:
a) Solicitar un recurso estático a un servidor público de Internet. Realizar la petición que realizaría un navegador al introducir la siguiente URL:
http://www.ua.es/index.htmb) Comprobar fecha de última modificación del documento devuelto (cabecera
Last-Modified
de la respuesta)c) Utilizar la cabecera
If-Modified-Since
en la petición con una fecha anterior a la obtenida. Por ejemplo podemos poner como cabecera:If-Modified-Since: Wed, 21 May 2003 08:01:16 GMTProbar ahora con una fecha posterior a la fecha de última modificación. ¿Qué respuesta obtenemos en este caso?
2. Vamos a utilizar un servidor web espía que muestra todo el contenido de las peticiones recibidas en la consola. Tenemos este servidor en las plantillas de la sesión, podemos ejecutarlo con:
java Espia 80
Para que escuche en el puerto 80
de nuestra máquina. Se
pide
a) Utilizar un navegador para hacer un petición HTTP a nuestro servidor de prueba. Podemos poner una URL como la siguiente:
http://localhost:80/index.htmObservar en el servidor espía la petición que ha hecho el navegador. ¿Qué información ha enviado el navegador en esta petición?
b) Abrir la página HTML
form_get.htm
con cualquier navegador web. Introducir datos en el formulario y enviar una petición. Esta petición se estará realizando al servidor espía instalado. Observar en este servidor la petición realizada. ¿Cómo se han enviado los datos del formulario?c) Vamos a hacer lo mismo que en el apartado anterior, pero con la página
form_post.htm
. ¿Qué diferencia hay entre esta petición y la realizada en el caso anterior? ¿Cómo se envían los datos introducidos en el formulario?
NOTA: El servidor recibirá más de una línea en la petición, normalmente. Esto está indicado por el símbolo [+] al final de cada línea, indicando que viene más información en líneas siguientes. Para verla, basta con pulsar Intro cada vez.
3. (OPTATIVO) Vamos a acceder al mismo servidor espía
anterior, pero esta vez desde una aplicación Java. Para ello vamos a
realizar una aplicación Java (una clase llamada Conexion,
por ejemplo) que abra una conexión a la URL de
este servidor espía, utilizando un objeto UrlConnection
.
Dicho objeto establece un flujo que permite enviar peticiones a un servidor, y
obtener los datos de respuesta del mismo.
a) Realizar la petición sencilla de un recurso. Para ello seguimos los pasos:
- Crear la URL a la que conectar:
URL url = new URL("http://localhost:80/prueba");- Crear la conexión a dicha URL (a
http://localhost:80/index.htm
). Una vez hecha la conexión, abrir el flujo de entrada (getInputStream
) para que efectúe la conexión. Hay que destacar que hasta que no se abre ese flujo de entrada no se enviará el mensaje de petición al servidor. Observar la petición en el servidor espía.URLConnection con = url.openConnection(); con.getInputStream();- Hay que tener en cuenta que algunos de estos métodos pueden provocar excepciones, por lo que deberemos encerrarlo todo en un bloque try...catch:
import java.io.*; import java.net.*; public class Conexion { public static void main(String[] args) { try { URL url = ...; URLConnection con = ...; con.getInputStream(); } catch (Exception e) { e.printStackTrace(); } } }b) Vamos a añadir cabeceras a la petición (
setRequestProperty
). Se puede añadir cualquier cabecera, tanto estándar de HTTP como cabeceras propias que definamos nosotros para nuestra aplicación. Hay que destacar que estas cabeceras deben añadirse antes de abrir el flujo de entrada, ya que en ese momento ya se habrá realizado el envío de la petición. Comprobar que estas cabeceras aparecen en el mensaje de petición que nos muestra el servidor espía. Añadir, por ejemplo:con.setRequestProperty("prop1", "valor1"); con.setRequestProperty("Content-Type", "text/plain");c) Activar la salida (
setDoOutput
) para escribir en la URL y prepararla así para poder enviar datos de salida (por defecto la conexión ya está preparada para recibir datos de entrada). Enviar contenido escribiendo en el flujo de salida de la conexión (getOutputStream
), también antes de obtener el flujo de entrada. Observar la petición en el servidor espía. ¿Qué ha cambiado en ella?con.setDoOutput(true); PrintStream out = new PrintStream(con.getOutputStream()); out.println("linea1"); out.println("linea2=hola");
4. Cread en la carpeta webapps/ROOT de Tomcat una página suscripcion.html que tendrá un formulario de suscripción a un supuesto sitio Web. El formulario tendrá los siguientes campos:
<form action="http://localhost:80/enviar" method="POST">
Observad que esta página por sí misma no nos sirve de mucho. Y con lo que hemos visto hasta ahora tampoco sabemos darle utilidad. Es necesario alguna técnica de generación o procesamiento dinámico de contenidos para poder hacer algo con los datos de este formulario (por ejemplo, guardarlo en una base de datos, crear una página que notifique al usuario por e-mail que su suscripción ha sido correcta, etc).
Una vez tengamos la página hecha (comprobamos que el formulario se abre bien), poned en marcha el servidor Espia del ejercicio 2, y abrid la página suscripcion.html desde un navegador (no hace falta que tengamos Tomcat iniciado). Rellenad los datos del formulario y enviar la petición. Comprobad en el Espia qué datos se envían y cómo.
5. Instalad (si no está bien instalado) y ejecutad el servidor Web Tomcat. Comprobad que se ha inicializado bien cargando la página de inicio, conectando al servidor local en la ruta raíz por el puerto 8080:
http://localhost:8080
Una vez inicializado, construid una página personal.html, que tenga:
Apellidos | Vuestros apellidos |
Nombre | Vuestro nombre |
DNI | Vuestro DNI |
Vuestro e-mail |
La quinta fila tendrá en la columna de la izquierda el texto "Foto", y en la derecha podéis colocar cualquier imagen que tengáis disponible.
6. (OPTATIVO) Cread en la carpeta webapps/ROOT de Tomcat una página cabeceras.html, y probad en ella algunas cabeceras HTTP de respuesta vistas. Colocad una cabecera Refresh que redirija a los 5 segundos a la página del ejercicio anterior, o a otra página que elijáis. También podéis probar alguna cabecera de caché o de fechas de modificación, y ver qué respuestas da el servidor y el cliente en cada caso.