Protocolo HTTP. HTML. Tomcat

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:

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

b) 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 GMT

Probar 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.htm

Observar 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:

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:

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:

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.