Instalando Tomcat 5.5 en Mac OS X, Linux y Windows
También hago una breve introducción al acceso a bases de datos mySQL desde Servlets.
1.Instalando Tomcat
Lo primero que hay que hacer es bajarnos la versión de Tomcat que nos interese (he escogido en este caso Tomcat 5).
La web de descargas de tomcat es la siguiente: Tomcat 5 Downloads
En el momento de redacción de este artículo, la versión más nueva de Tomcat 5 es la 5.5.9, cuyo binario se puede bajar aquí:
Tomcat 5.5.9 (UNIX, tar.gz)
Tomcat 5.5.9 (Windows, .exe)
El archivo .tar.gz contiene los binarios de tomcat que funcionan en cualquier plataforma (probado en Mac OS X), pueden descomprimirse por ejemplo, en /usr/share/jakarta-tomcat-5.5.9
El archivo .exe es un bonito instalador para Windows (más fácil aún)
Para aquellos que queráis instalar Tomcat en Debian, veréis que en los repositorios oficiales sólo puede descargarse Tomcat 4 (que a mí, personalmente, me ha dado problemas).
Aquí tenéis la línea a introducir en /etc/apt/sources.list: deb http://apt.leapster.org/tomcat ./
Como es costumbre: apt-get update, apt-get install tomcat5 (la versión que viene con Debian se puede instalar con apt-get install tomcat4)
2. Configurando Tomcat
El archivo de configuración principal de Tomcat, lo que sería como un httpd.conf de Apache, es server.xml y se encuentra en la carpeta conf del directorio de tomcat (/etc/tomcat5 con el paquete en Debian).
A simple vista parece muy complejo, pero realmente, lo que tenemos que modificar es muy poco. Lo único que debemos modificar es el puerto si nos interesa (por defecto, 8080), en el tag <Connector port=8080 ..., dentro de <Service name="Catalina">. Haced una búsqueda dentro del archivo.
Para poder hacer las pruebas de nuestro proyecto más fácilmente, deberían activarse dos opciones que luego para un servidor en producción deberían desactivarse, porque disminuye el rendimiento. en <Host name="localhost" ... > deberíamos activar (a true) las opciones unpackWARs y autoDeploy (unpackWARs="true" autoDeploy="true"). De lo contrario, cada vez que modifiquemos una clase deberíamos reiniciar Tomcat.
Ahora viene lo interesante.
Deberemos tener un JDK instalado en la máquina (yo uso J2SE 1.5, aunque también funciona con 1.4).
Si lo tenéis instalado, buscad el path del mismo.
Para los que aún no lo tengais instalado, aquí va un link: Java 2 SE 1.5.0
Os lo podéis bajar con o sin NetBeans. Para los que no conozcais NetBeans, aunque necesitaría un artículo aparte para mostrar cuánto me gusta este IDE, su superioridad respecto a Eclipse y lo cómodo que es, probadlo, os gustará.
Supongamos instalado el JDK. Yo lo tengo en /opt/jdk1.5.0_02
Nota: en Mac OS X, los JDK se encuentran en /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Ahora debemos indicarle a Tomcat que JDK usar.
En Mac OS X, deberemos añadir la siguiente variable de entorno:
setenv CLASSPATH="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes/classes.jar:
/usr/local/jakarta-tomcat-5.5.9/common/lib/servlet-api.jar"
En Linux, modificaremos /etc/init.d/tomcat5.
En JDK_DIRS, indicaremos el path al JDK, en este caso, JDK_DIRS="/opt/jdk1.5.0_02"
En Windows, en la instalación nos preguntará el JDK a usar.
3. Funcionamiento de Tomcat
Si nos interesa compilar una clase en concreto, con los paths correctos, simplemente debemos compilarla usando javac Clase.java
Para proyectos más complejos, puede usarse Ant, aunque la mejor opción es NetBeans, que automatiza todas estas tareas.
Una vez compilada una clase, Tomcat no la ejecutará si no se le indica que existe, por así decirlo (No es necesario hacerlo para los jsp)
En el directorio de la web (webapps, por defecto, en el directorio de tomcat), existen una serie de directorios que corresponden a directorios reales de la web, con la salvedad que incluyen archivos de información sobre el directorio.
Dentro del directorio WEB-INF de cada uno de estos directorios existe un archivo llamado web.xml. Éste contiene información sobre las clases y su localización (las clases las introduciremos en el directorio classes de WEB-INF).
La estructura de web.xml es la siguiente:
Después de la cabecera de información de xml, dentro del tag <web-app> los servlets (para cada servlet deberemos hacerlo) se indican de la siguiente forma (nombre del servlet y nombre de la clase en <servlet> y en <servlet-mapping> su ruta:
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet1</servlet-name>
<url-pattern>/Servlet1</url-pattern>
</servlet-mapping>
Realmente, programar e incluir los servlets así es bastante liado y comporta una pérdida de tiempo bastante importante.
Para ello, existen los ficheros .war, que son lo mismo que los .jar normales, para servlets.
Pueden generarse con un click en NetBeans, por ejemplo, y al copiarlos en el directorio webapps, tomcat automáticamente los descomprimirá y los pondrá en funcionamiento.
4. Acceso a bases de datos mySQL (JDBC)
Una forma sencilla de acceder a bases de datos mySQL desde Java es la siguiente:
Nos bajamos el mySQL Connector for Java de la web de mySQL
mySQL Connector/J 3.1
Al descomprimirlo, lo que nos interesa es el archivo siguiente que hay en el interior: mysql-connector-java-3.0.17-ga-bin.jar
Podemos incluirlo como una librería en nuestro proyecto, o añadirlo a la variable de entorno CLASSPATH de Java.
Las consultas se hacen de una forma muy sencilla, como muestra este ejemplo (omitiendo el tratamiento de excepciones):
Cargar el driver
String driverName = "com.mysql.jdbc.Driver";
Class.forName(driverName);
String server = "localhost";
String database = "bbdd";
String url = "jdbc:mysql://" + server + "/" + database;
String user = "user";
String password = "passwd";
Crear conexión
con = DriverManager.getConnection(url, user, password);
El resto es como los accesos a cualquier base de datos:
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM tabla WHERE ...");
Pronto escribiré algún otro artículo sobre Servlets y Bases de Datos, permaneced atentos ;)
Saludos,
Dani.

