INSTALACIÓN TOMCAT El servidor Tomcat es una implementación de referencia de las tecnologías Java Servlet y JavaServer Pages (JSP). Es un subproyecto del Proyecto Jakarta, una iniciativa de Apache para crear soluciones de servidor abiertas basadas en la plataforma Java. Antes de comenzar las prácticas de hoy tendreis que instalar el servidor Tomcat en vuestras cuentas. Para ello debeis seguir los siguientes pasos: Descargar el fichero jakarta-tomcat-4.0.4.tar.gz al directorio temporal (/tmp). Extraer los ficheros de Tomcat en algún directorio de vuestra cuenta, para ello una vez situados en el directorio ejecutad el comando: tar xvzf /tmp/jakarta-tomcat-4.0.4.tar.gz se creará un nuevo subdirectorio llamado jakarta-tomcat-4.0.4. Establecer la variable de entorno CATALINA_HOME para que apunte al directorio donde hemos instalado nuestro servidor Tomcat. Añadir el directorio ${CATALINA_HOME}/bin a la variable de entorno PATH. Establecer la variable de entorno JAVA_HOME para que apunte al directorio donde está instalado Java (en el laboratorio este directorio es /usr/local/jdk1.3.1). Añadir el directorio ${JAVA_HOME}/bin a la variable de entorno PATH. Ahora ya podemos ejecutar el servidor Tomcat y empezar a probar nuestros primeros servlets. Instrucciones de arranque y parada de Tomcat Las instrucciones para parar y arrancar el servidor Tomcat son las siguientes: El script de arranque se encuentra en el directorio bin de la instalación del Tomcat, como hemos incluido esta ruta en nuestra variable de entorno PATH será suficiente ejecutar en la shell: startup.sh Del mismo modo, para parar el servidor se debe ejecutar el siguiente comando en la shell: shutdown.sh Para comprobar que vuestra instalación ha sido satisfactoria, arrancad el servidor Tomcat y desde un navegador conectaros a la URL: http://localhost:8080 si podeis ver la página principal de Tomcat, la instalación ha sido correcta. EJERCICIO 1: Servlet Hola Mundo En este ejercicio vamos a ver cómo se desarrolla y se despliega un servlet sencillo, el servlet "Hola Mundo". Para ello debemos realizar las siguientes tareas: 1. Codificar y compilar el servlet. 2. Desplegar el servlet en Tomcat. 3. Ejecutar el servlet y visualizar contenidos estáticos. Tarea 1: Codificar y compilar el servlet. En este primer ejercicio se os proporciona el código del servlet, que os podeis descargar desde el enlace HolaMundo.java. Para compilar un servlet, se necesita la API de Servlet que os podeis descargar desde servlet.jar. Se recomienda incluirla en la variable de entorno CLASSPATH, o compilar con la opción -classpath, por ejemplo: java -classpath servlet.jar HolaMundo.java Tarea 2: Desplegar el servlet en Tomcat Desplegar un servlet consiste en incluir una serie de ficheros en un contenedor web (por ejemplo, Tomcat) para que los clientes puedan acceder a su funcionalidad. Normalmente, el desarrollo de un servlet forma parte de lo que se denomina una aplicación Web, que no es más que una colección de servlets, páginas HTML, JSP, clases y otros recursos que se pueden empaquetar y ejecutar en distintos contenedores web, de distintos fabricantes, y que ofrecen una determinada funcionalidad a la que los clientes acceden tipicamente a través de un navegador. Las Aplicaciones Web, a partir de la especificación de Servlet 2.2, deben estructurarse según la siguiente jerarquía de subdirectorios: o Directorio raíz: puedes publicar ficheros estáticos (HTML, imágenes, hojas de estilo, etc.) y JSPs. Directorio WEB-INF: debe contener un fichero web.xml. Este fichero configura la aplicación. Por ejemplo, permite declarar servlets, asignarles parámetros de inicio, declarar alias y filtros, etc. Directorio classes: puedes colocar en él los ficheros compilados (servlets, beans, etc.) de las clases utilizadas por la aplicación web. Directorio lib: puedes colocar en él otras bibliotecas de clases adicionales (comprimidas con jar) que utilice tu aplicación. Resto de subdirectorios: para ficheros estáticos y JSP. Para exportar aplicaciones web a otros servidores, puedes comprimir esta estructura de directorios, utilizando jar, dando lugar así a un fichero WAR (almacénalo con extensión war, por ejemplo practica4.war). Este fichero es compatible con cualquier plataforma de ejecución de servlets y JSP. Para desplegar nuestro servlet de ejemplo crearemos un contexto para nuestra aplicación web, denominado practica4, crear un contexto en Tomcat no es más que crear un directorio debajo de ${CATALINA_HOME}/webapps/. Éste directorio se corresponde con el directorio raíz de nuestra aplicación web y por lo tanto, debajo de él debemos crear la estructura de subdirectorios indicada anteriormente. Nota: El nombre del contexto es el primer nivel de la jerarquía de la ruta de acceso a nuestra aplicación, que en este caso será: http://localhost:8080/practica4/path_recurso El fichero de despliegue, para este ejemplo, lo podeis descargar del enlace web.xml. También se os proporcionan una serie de ficheros estáticos estatico.html y tomcat.gif para que veais cómo se accede a ellos. Situad correctamente todos estos ficheros, junto con el HolaMundo.class, en la estructura de directorios creada. ${CATALINA_HOME}/webapps +-- practica4 +-- WEB-INF +-web.xml | +-classes +-- HolaMundo.class +-- estatico.html | +-- tomcat.gif Tarea 3: Ejecutar el servlet y visualizar contenidos estáticos Si arrancamos un navegador y nos conectamos a la URL http://localhost:8080/practica4/servlet/hola activaremos nuestro servlet de ejemplo y se mostrará la página XHTML con el mensaje ¡Hola Mundo!. Para ver los contenidos estáticos tendremos que conectarnos a las URL http://localhost:8080/practica4/estatico.html NOTA: Analizad el código del servlet proporcionado, así como el del fichero web.xml (sobre todo la parte correspondiente a la declaración del servlet hola). Modificación Modifica el servlet anterior para que devuelva, además del saludo, la siguiente información: Dirección IP del cliente. Contenido de la cabecera User-Agent. Fecha y hora del servidor. EJERCICIO 2: Parámetros de la petición Realizad un formulario XHTML1.1 en el que se le solicite al usuario: su nombre, primer y segundo apellido y dirección. Escribe un servlet que muestre un resumen de la información enviada por dicho formulario. Comprueba que funcione correctamente. Para acceder al nuevo servlet tienes dos opciones: Declarar un nuevo elemento servlet en web.xml, con su alias asociado (accesible mediante /practica4/servlet/alias). No modificar web.xml, y ejecutar el servlet mediante el nombre de su clase. Por ejemplo, si la clase se llama FormularioUsuario, debes copiar FormularioUsuario.class en WEB-INF/classes y solicitar el recurso /practica4/servlet/FormularioUsuario al servidor. EJERCICIO 3: Test de vocabulario La API de servlets proporciona mecanismos para gestionar sesiones de forma transparente al programador (consulta la clase javax.servlet.http.HttpSession y el método getSession() de HttpRequest). Programa un servlet que se comporte igual que la CGI del ejercicio 2 de la práctica 3. En este caso, el contenedor de servlets mantiene automáticamente la sesión, enviando una cookie con un identificador de sesión. Por tanto, no es necesario que envíes cookies explícitamente: basta con utilizar HttpSession adecuadamente. Modificad el servlet anterior para que se realice la misma pregunta hasta que el usuario la acierte