Home UC3M
Home IT
Home /Docencia /Ing. Técnico de Telecomunicación Esp. Telemática /Laboratorio de Aplicaciones Telemáticas /Práctica 3
anterior siguiente

Práctica 3: CGI

Fecha: 24 de Octubre de 2003
Conceptos: CGI, cookies
Plazo de entrega: 6 de noviembre de 2003 (instrucciones)
Profesor: Jesús Arias Fisteus

 EJERCICIO 1: Hola Mundo

En este ejercicio debes instalar una CGI básica en tu servidor web. Esta CGI consta de dos ficheros:

  1. hola.cgi: script muy sencillo, en lenguaje BASH, que lanza la ejecución de una CGI escrita en Java, y le pasa todas sus variables de entorno.
  2. HolaCgi.java: CGI escrita en lenguaje Java, que muestra la dirección IP del cliente que realizó la solicitud.

Cada máquina del laboratorio dispone de un servidor web (Apache). Puedes colocar documentos y CGIs en el servidor:

  • Documentos estáticos: los ficheros almacenados en el directorio lib/www/"ruta" de tu cuenta serán servidos por el servidor para peticiones con la siguiente ruta: /login/"ruta". Por ejemplo, con la petición http://doc001.lab.it.uc3m.es/100099999/prueba/prueba.html el servidor devolverá el siguiente fichero de la cuenta del alumno 100099999: ~100099999/lib/www/prueba/prueba.html
  • CGIs: los ficheros almacenados en el directorio lib/www/cgi-bin/"fichero.cgi" de tu cuenta serán ejecutados por el servidor como CGIs para peticiones con la siguiente ruta: /100099999/cgi-bin/"fichero.cgi". Por ejemplo, con la petición http://doc001.lab.it.uc3m.es/100099999/cgi-bin/hola.cgi el servidor ejecutará el siguiente fichero: ~100099999/lib/www/cgi-bin/hola.cgi

Apartado 1

Instala en el servidor web la CGI anterior, y comprueba su funcionamiento. Para ello, puede ser necesario que modifiques las variables JAVA y CLASES del script. Recuerda que el servidor web debe tener permiso de ejecución para la CGI, de lectura para HolaCgi.class, y de acceso a todos los directorios superiores tanto a la CGI como al fichero HolaCgi.class.

Apartado 2

Modifica la CGI para que muestre las meta-variables más importantes, así como el contenido de su entrada estándar.

Apartado 3

Conecta el formulario del ejercicio 3 de la práctica 2 con esta CGI. Prueba todos los mecanismos de envío de parámetros vistos en dicha práctica, y observa el contenido de la meta-variable QUERY_STRING y de la entrada estándar cuando se utiliza cada uno de ellos.

Apartado 4

Modifica la CGI del apartado 2 para que envíe una cookie al servidor, cuyo valor sea un número aleatorio. Comprueba que, la siguiente vez que se conecta el mismo cliente, la meta-variable HTTP_COOKIE tiene el contenido adecuado.



 EJERCICIO 2: test de vocabulario

Escribe una CGI en lenguaje Java que implemente un test de vocabulario castellano - inglés. El programa debe comportarse de forma semejante al siguiente CGI ejemplo.

  1. Cuando el usuario se conecte por primera vez, debe recibir una pregunta con una palabra en castellano, y un formulario para que introduzca la palabra en inglés.
  2. Cuando el usuario haga envíe el formulario, la CGI debe comprobar la respuesta e indicar si es correcta o no.
  3. Si el usuario vuelve a acceder, la CGI debe mandarle una nueva pregunta, como si fuese la primera vez (paso 1).

El sistema debe cumplir las siguientes restricciones:

  1. Los documentos generados por la CGI deben ser XHTML 1.1
  2. La solución debe utilizar cookies para gestionar la sesión, y no debe almacenar información en el servidor.
  3. Para facilitar la corrección de la práctica, la clase principal de la aplicación debe llamarse Vocabulario.

Ayuda:

  • La versión más moderna de Java instalada en el laboratorio es J2SE 1.3.1. En esta versión resulta complejo que la CGI devuelva el documento en sistemas de codificación de caracteres distintos de US-ASCII (problema solucionado a partir de la versión 1.4). Por ello, en esta práctica, no es necesario que la CGI represente bien vocales con tilde, eñes o símbolos de admiración y exclamación.
  • Las clases java.net.URLDecoder y java.net.URLEncoder permiten trabajar con datos application/x-www-form-urlencoded. Consulta su funcionamiento en la API.
  • El siguiente método devuelve un objeto Vector que, dada una cadena de texto de la forma param1=valor1¶m2=valor2&..., contiene en este orden los siguientes elementos: "param1", "valor1", "param2", "valor2",... Para ello, los parámetros delim y subDelim deben ser, respectivamente, "&" y "=".
        public Vector decodeParams(String parametros, String delim, String subDelim) {
    	
    	Vector params= new Vector();
    	
    	StringTokenizer tok= new StringTokenizer(parametros, delim);
    	while (tok.hasMoreElements()) {
    	    String str= tok.nextToken();
    	    StringTokenizer subTok= new StringTokenizer(str, subDelim);
    	    if (subTok.hasMoreElements()) {
    		params.addElement(subTok.nextToken());
    		if (subTok.hasMoreElements())
    		    params.addElement(subTok.nextToken());
    		else params.addElement("");
    	    } else return null;
    	}
    	
    	return params;
        }
    
  • El siguiente fragmento de código busca una cookie cuyo nombre sea Palabra.
    	String cookie= decodeUrl(System.getProperty("HTTP_COOKIE"));
    
    	if (cookie != null) {
    	    Vector cookies= decodeParams(cookie,";","=");
    
    	    for (int i=0; i < cookies.size();i+=2) {
    		if (cookies.elementAt(i).equals("Palabra")) {
                        // el valor de la cookie está en cookies.elementAt(i+1)
    		}
    	    }
    	}
    


 ENTREGA

  • Entrega: código fuente de la CGI del ejercicio 2.
  • Plazo: 6 de noviembre de 2003.
  • Modo de entrega: a especificar en clase de laboratorio.


 REFERENCIAS

Especificaciones:

Otros:



Última actualización:

Localización |Personal |Docencia |Investigación |Novedades |Intranet
inicio | mapa del web | contacta