Tabla de contenidos
El servidor Apache Tomcat es una implementación de referencia de las tecnologías Java Servlet y JavaServer Pages (JSP). Antes de comenzar la práctica de hoy, tendréis que instalar el servidor Tomcat en vuestras cuentas. Para ello debéis seguir los siguientes pasos:
Descargar el fichero apache-tomcat-6.0.20.tar.gz
al directorio temporal (/tmp). Este fichero también
está disponible para descarga en el
sitio Web
de descargas de Apache Tomcat 6.x.
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/apache-tomcat-6.0.20.tar.gz
Establecer la variable de entorno CATALINA_HOME para que
apunte al directorio donde hemos instalado nuestro servidor Tomcat.
Establecer la variable de entorno JAVA_HOME para que
apunte al directorio donde está instalado Java 1.6
(en el laboratorio es /usr/dist/jdk1.6.0_03).
Anteponer 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. Para arrancar y detener el Tomcat sigue las siguientes instrucciones:
El script de arranque se encuentra en el directorio bin de la
instalación del Tomcat. En este
directorio,
ejecutad en el terminal de línea de comandos: ./startup.sh
Nota: el directorio actual en el
momento de arrancarlo debe ser ${CATALINA_HOME}/bin.
Para detener el servidor se debe ejecutar el siguiente
comando en la shell desde el mismo directorio:
./shutdown.sh
Para comprobar que la instalación ha sido satisfactoria,
arrancad el servidor Tomcat y desde un navegador y conectaos a
la URL: http://localhost:8080. Si se puede ver la
página principal de Tomcat, la instalación ha sido correcta.
Si el servidor no arranca, una de las
causas posibles es que algunos de los puertos en que escucha
conexiones por defecto (8080 y 8005) esté ocupado por otro
proceso. Si examinas las últimas líneas del fichero
${CATALINA_HOME}/logs/catalina.out sabrás si es
este el problema.
En este caso, cambia estos puertos en el fichero de
configuración ${CATALINA_HOME}/conf/server.xml.
Pon, por ejemplo, 9090 y 9005. Recuerda que la nueva URI de
acceso al servidor cambiaría en este caso a
http://localhost:9090.
Cuando hayas estado trabajando con Tomcat y vayas a cerrar tu sesión en el ordenador, recuerda comprobar que dejas Tomcat parado. Si no, supondrá una molestia para usuarios que utilicen el mismo ordenador más tarde.
El objetivo de este ejercicio es aprender a compilar, desplegar y ejecutar un servlet sencillo.
Descarga el código del servlet
HolaMundo.java.
Para compilar este servlet, debes incluir en la variable de entorno
CLASSPATH la ruta al API de servlet, así como el
directorio actual. Esta API es necesaria para compilar un servlet,
y está disponible en vuestra instalación de Tomcat:
lib/servlet-api.jar. Una opción alternativa
es compilar con la opción -classpath, por ejemplo:
javac -classpath ${CATALINA_HOME}/lib/servlet-api.jar:. HolaMundo.java
Desplegar un servlet consiste en incluir una serie de ficheros en un contenedor web (en nuestro caso, 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 vendedores, y que ofrecen una determinada funcionalidad a la que los clientes acceden típicamente 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:
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: debe contener los ficheros
compilados (servlets, beans, etc.) de las clases utilizadas por la
aplicación web.
Directorio lib: debe contener 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
holamundo.war).
Este fichero es compatible con cualquier plataforma
de ejecución de servlets y JSP.
Para desplegar nuestro servlet de ejemplo:
Crea un contexto para nuestra aplicación web,
denominado holamundo.
Crear un contexto en Tomcat no es más que crear un directorio debajo
de ${CATALINA_HOME}/webapps/. Este directorio
será el directorio raíz de nuestra aplicación
web y, por lo tanto, debajo de él debemos crear la estructura de
subdirectorios indicada anteriormente.
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/holamundo/
Descarga el fichero de despliegue web.xml.
Sitúa correctamente los ficheros en la estructura de directorios creada:
${CATALINA_HOME}/webapps +-- holamundo +-- WEB-INF +-- web.xml
+-- classes +-- HolaMundo.class
Abre un navegador y conéctate a la URL
http://localhost:8080/holamundo/hola.
Esto hara que se ejecute nuestro
servlet de ejemplo y se mostrará la página XHTML con el
mensaje ¡Hola Mundo!
En esta versión de tomcat, en caso de no existir el fichero
index.html, se mostrará una página indicando que el
contexto no existe.
Modifica el servlet del ejercicio anterior para
que muestre la siguiente información:
dirección IP del cliente, contenido de la cabecera
User-Agent del mensaje HTTP de petición recibido
y fecha y hora del servidor.
Si modificas una clase mientras el servidor Tomcat está en
ejecución, este seguirá ejecutando la versión antigua de la clase.
Mientras se desarrolla una aplicación Web, es habitual configurar Tomcat
para que detecte y cargue versiones nuevas de las clases mientras está en
ejecución. Para cada contexto (aplicación Web) en que desees este
comportamiento, establece valor true en la propiedad
reloadable. Para ello, crea un subdirectorio llamado
META-INF en el directorio principal de tu aplicación Web,
y crea en él un fichero llamado context.xml con el
siguiente contenido:
<Context reloadable="true"></Context>
El objetivo de este ejercicio es aprender a mostrar recursos estáticos en el servidor Web Tomcat. Un recurso estático es un fichero, almacenado en el sistema de ficheros del servidor, cuyo contenido devuelve el servidor Web cuando un cliente envía una petición GET con la URL del recurso. Se diferencia de los recursos dinámicos en que estos últimos son generados dinámicamente por un programa que se ejecuta en el servidor cuando llega la petición. Algunos recursos estáticos típicos son las imágenes, hojas de estilo CSS y páginas (X)HTML estáticas (aquellas no generadas por programas dinámicamente).
Descarga los siguientes recursos estáticos que se proporcionan: pagina.html y tomcat.gif. Sitúalos en la estructura de la aplicación Web:
${CATALINA_HOME}/webapps +-- holamundo +-- WEB-INF +-- web.xml
| +-- classes +-- HolaMundo.class
+-- pagina.html
|
+-- tomcat.gif
Abre un navegador y conéctate a la URL
http://localhost:8080/holamundo/pagina.html
Programa un formulario XHTML 1.1 en el que se le solicite al usuario mediante un formulario su nombre, primer y segundo apellido y dirección.
Escribe un servlet que muestre un resumen de la información enviada por dicho formulario.
Declara el nuevo servlet en el fichero WEB-INF/web.xml
para poder acceder a él. Asóciale una URL. Para ello añade un nuevo
elemento <servlet> y <servlet-mapping>.
Puedes tomar como referencia la declaración de los servlets de
ejercicios anteriores. Asegúrate de que el formulario
envíe los datos a la URL de este servlet.
Abre un navegador y comprueba que el servlet funcione correctamente.
Eclipse cuenta con un módulo opcional, llamado WTP (Web Toolkit Platform), que facilita el desarrollo de aplicaciones Web. Entre otras cosas, es capaz de ejecutar y depurar servlets en un servidor Web como Tomcat.
El módulo WTP no se incorpora por defecto en la distribución normal de Eclipse. Sin embargo, puede ser instalado desde su menú "Help / Software Updates/ Find & Install". En la página Web de descargas de WTP también se puede descargar un instalable "todo en uno" que integra directamente Eclipse y WTP.
A continuación se muestran algunos enlaces en que se puede encontrar más información acerca de WTP:
Los siguientes enlaces pueden ser útiles para realizar la práctica:
Tomcat incluye ejemplos de Servlets y JSPs
encapsulados en la aplicación Web examples. Están accesibles
en el directorio webapps/examples de la instalación
de Tomcat, y a través de un navegador Web si Tomcat está en ejecución
(http://localhost:8080/examples/).
| © Carlos III University of Madrid, Spain |