Tomcat, Apache y JSP

Hoy amanecí con ganas de jugar un poco con Java, no soy un desarrollador javero, solo quiero poder jugar con Java haciendo algo en JSP, así que para eso necesito tener Tomcat instalado y este es el tutorial para hacerlo.

Actualmente mi configuración es la siguiente:

El objetivo es instalar de la manera más práctica y rápida el Container Tomcat, ocupando las grandes ventajas de Debian, osea el apt-get, además de Automatix, entonces necesitamos lo siguiente:
  • Tener instalado Automatix
  • Instalar los paquetes a través de Automatix
    • sun-java6-bin
    • sun-java6-jdk
    • sun-java6-jre
  • Tener instalado Apache 2
NOTA IMPORTANTE, NO TODO ES SOLO COPIAR Y PEGAR, HAY QUE VALIDAR QUE LOS NOMBRES DE LAS CARPETAS Y ARCHIVOS EXISTAN EN CADA COMPUTADORA, PARA ELLO PODEMOS USAR LOS COMANDAS ls Y less.

Ahora lo que necesitamos es ir a página de Tomcat y descargar la última versión, en mi caso la 6.0.14, hay que descargar el archivo tar.gz, una vez descargado necesitamos extraerlo y ponerlo en /usr/local, en mi caso lo descargue desde Firefox y lo guarde en mi escritorio, los pasos para extraerlo y moverlo de lugar serían los siguientes:

alecs@bender:~$ cd Desktop/
alecs@bender:~/Desktop$ tar -zxvf apache-tomcat-6.0.14.tar.gz
alecs@bender:~/Desktop$ mv apache-tomcat-6.0.14 /usr/local/

Cabe señalar que deje el nombre de la carpeta tal cual vienen en el tar.gz, no le quite la versión ni nada, esto es para a simple vista saber que versión de Tomcat tenemos instalado, digo, no todos nos acordamos de todas las cosas que le instalamos a nuestras computadoras, pero bueno, es mucho problema estar usando ese nombre tan largo, entonces vamos a crear un vínculo a la carpeta con un nombre más corto, para ello haremos lo siguiente:

alecs@bender:~/Desktop$ cd /usr/local/
alecs@bender:/usr/local$ ln -s apache-tomcat-6.0.14/ tomcat

Si hacemos un ln -s debemos ver algo similar a esto:

lrwxrwxrwx 1 root root 21 2007-08-22 11:28 tomcat -> apache-tomcat-6.0.14/

Perfecto, ahora necesitamos tener las variables CATALINA_HOME, JAVA_HOME y JRE_HOME configuradas, en CATALINA_HOME debemos tener la ubicación de Tomcat, en JAVA_HOME la ubicación del JDK y en JRE es obvio. Necesitamos validar que estén definidas estas variables en los archivos /etc/profile y /etc/bash.bashrc, simplemente hacemos un less de cada archivo y buscamos que existan las lineas:

export CATALINA_HOME=/el/path
export JAVA_HOME=/el/otro/path
export JRE_HOME=/otro/path

Podemos ver el contanido de los archivos con el comando less:

alecs@bender:/usr/local$ less /etc/profile
alecs@bender:/usr/local$ less /etc/bash.bashrc

En caso de que no estén estas líneas, entonces necesitamos abrir los archivos y poner al final de ellos lo siguiente:

# Tomcat
export CATALINA_HOME=/usr/local/tomcat

# Java
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
export JRE_HOME=/usr/lib/jvm/java-6-sun/jre/

Para editarlo necesitamos teclear lo siguiente, poniendo en TUEDITOR el editor que prefieras, kate, gedit, vim, etc.:

alecs@bender:/usr/local$ sudo TUEDITOR /etc/profile
alecs@bender:/usr/local$ sudo TUEDITOR /etc/bash.bashrc

Guardamos los archivos y los cerramos.

Ahora lo que sigue es vincular el ejecutable del Tomcat para poderlo iniciar, para ello hacemos lo siguiente:

alecs@bender:/usr/local$ ln -s /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat

Antes de iniciar el servidor de Tomcat necesitamos cerrar y abrir de nuevo nuestra terminal, ya que hasta ese momento van a definirse las variables que configuramos anteriormente (CATALINA_HOME, JAVA_HOME y JRE_HOME).

Nos falta validar que las variables esten bien definidas, para eso necesitamo hacer un ls -l de cada variable, si nos regresa el listado de un directorio distinto al que estamos significa que todo esta bien:

alecs@bender:~$ ls -l $CATALINA_HOME
alecs@bender:~$ ls -l $JAVA_HOME
alecs@bender:~$ ls -l $JRE_HOME

Ahora ya solo necesitamos iniciar el Tomcat:

alecs@bender:~$ sudo /etc/init.d/tomcat start

Si nos marca algún error, hay que regresar y ver que paso se pudo haber hecho mal, si no marca error hay que abrir nuestro navegador y entrar a http://localhost:8080/ debemos de ver una página con el logotipo de Tomcat, si es así, felicidades, ya tienes configurado el Container, ahora ya solo necesitas tener una página demo para empezar a jugar, en mi caso hice un archivo que se llama prueba.js y lo puse en mi en el root del Tomcat, la ubicación es /usr/local/tomcat/webapps/ROOT/ el contenido de mi archivo es:

<html>
<body>
<% for ( int i = 0 ; i < 10 ; i ++ ) { %>
Hola Mundo!<br />
<% } %>
</body>
</html>

Y entro a verlo en http://localhost:8080/prueba.jsp

Ya solo falta vincular Apache con Tomcat, para ello vamos a necesitar instalar el paquete libapache2-mod-jk:

alecs@bender:~$ sudo apt-get install libapache2-mod-jk

Ahora necesitamos editar dos archivos, el primero es /etc/libapache2-mod-jk/workers.properties:

alecs@bender:~$ sudo TUEDITOR /etc/libapache2-mod-jk/workers.properties

En la línea que dice workers.tomcat_home necesitamos poner la ubicación del Tomcat /usr/local/tomcat y en la línea que dice workers.java_home debemos poner $JAVA_HOME quedando de la siguiente manera:

workers.tomcat_home=/usr/local/tomcat

workers.java_home=$JAVA_HOME

Guardamos y editamos el último archivo /etc/apache2/mods-enabled/jk.conf, normalmente no existe, entonces abrimos el archivo de la siguiente manera:

alecs@bender:~$ sudo TUEDITOR /etc/apache2/mods-enabled/jk.conf

En este archivo guardamos lo siguiente:

# Where to find workers.properties
JkWorkersFile /etc/libapache2-mod-jk/workers.properties

# Where to put jk logs
JkLogFile /var/log/apache2/mod_jk.log

# Set the jk log level [debug/error/info]
JkLogLevel info
JkShmFile /var/log/apache2/jk-runtime-status

# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"

# Send servlet for context / jsp-examples to worker named worker1
#JkMount /jsp-examples ajp13_worker
# Send JSPs for context /jsp-examples/* to worker named worker1
# JkMount /jsp-examples/* ajp13_worker
JkMount /*.jsp ajp13_worker

Guardamos, cerramos el archivo y reiniciamos el servidor Apache:

alecs@bender:~$ sudo /etc/init.d/apache2 restart

Para probarlo vamos a ocupar el mismo archivo de antes, prueba.jsp, abrirmos Firefox y entramos a http://localhost/prueba.jsp

Debemos ver la misma página de antes, sino la vemos algo hicimos mal, hay que verificar que pudo ser.

Hay que observar que el archivo sigue estando en el mismo lugar, no lo hemos cambiado de lugar, lo que estamos haciendo es solicitar el mismo archivo en la misma ubicación pero ahora desde el Apache, no desde Tomcat, en si lo que logramos con esto fue quitar el nada atractivo puerto 8080 de nuestra dirección y unificar las URLs, por lo tanto, si pidiéramos por ejemplo el archivo http://localhost/otra/carpeta/miarchivo.jsp sería necesario que también se viera en http://localhost:8080/otra/carpeta/miarchivo.jsp con lo que conlleva, tener las carpetas y el archivo dentro de la carpeta webapps/ROOT/ del Tomcat.

Esto no es igual que lo que podemos hacer con PHP, Perl u otro, pero si nos permite tener varias aplicaciones con distintas tecnologías corriendo bajo Apache.

Dejen cualquier duda o comentario.

Referencia:
http://ubuntu-tutorials.com/2007/01/27/how-to-find-your-ubuntu-or-kernel-version/
http://www.epinions.com/pr-Hewlett_Packard_Compaq_Presario_2200_Series_Customizable_Notebook_Pc_PK800AV_PC_Notebook/display_~full_specs
http://www.glug.es/node/1857
http://www.osmosislatina.com/apache/java.htm
http://www.osmosislatina.com/tomcat/configuracion.htm
http://tomcat.apache.org/
http://www.di.uniovi.es/~dflanvin/docencia/dasdi/teoria/Transparencias/05.%20Ejemplos%20JSPs.pdf
http://geneura.ugr.es/~jmerelo/JSP/
http://lomu.homelinux.org/tomcat.pdf
http://www.wikilearning.com/configuracion_de_mod_jk_apache_y_tomcat-wkccp-7230-2.htm

10 comentarios:

Anónimo dijo...

tremendo, muchas gracias, primera guia que FUNCIONA

uns aludo

Roger Escolà dijo...

Hola, el invento funciona, pero no me salen las ñ ni los acentos, aparecen interrogantes. Solo me pasa con *.jsp las paginas html no sucede.

Sabes como solventar esto?

Muchas gracias

ElAlecs dijo...

El problema debe ser el encoding, intenta guardar tus archivos en UTF-8 y cambiar el tomcat para que solo envíe UTF-8

http://wiki.apache.org/tomcat/Tomcat/UTF-8

http://jspwiki.org/wiki/TomcatAndUTF8

Roger Escolà dijo...

Buenas alecs, el problema se solventó al hacer esto:

Editamos el /etc/profile y añadimos la siguiente linea

export LANG=es_ES.ISO-8859-1

Lo pongo aquí por si alguien esta en las mismas. Gracias por todo.

Un saludo

Anónimo dijo...

Simplemente impresionante, sin un solo cambio todo funciona, lo único es que para instalar el conector de APACHE con TOMCAT, libapache2-mod-jk he tenido que incluir en mi kubuntu el siguiente repositorio
http://ftp.es.debian.org/debian/ etch main contrib non-free


MUCHAS GRACIAS DESDE ESPAÑA (MALAGA)
MIGUEL FERNANDEZ CASAS
migferc@yahoo.es

Anónimo dijo...

La verdad me ha sido de mucha utilitad, Muchas gracias!!

Daniel Alberto dijo...

No me procesa el script prueba.js haciendo

http://localhost/prueba.jsp

el archivo lo tengo en $CATALINA_HOME/webapps/ROOT

He leido en que jk.conf se agrega al archivo apache.conf al final asi

Include /etc/apache2/mods-enabled/jk.conf

pero al reiniciar el Apache me aparece un error de sintaxis en la linea ocho del archivo jk.conf

Probe agregando el codigo que esta en tu entrada y lo pegue en el jk.conf no me funciono.

Tambien probe un archivo ya hecho y copie su contenido el archivo esta en:

/usr/share/libapache2-mod-jk/httpd-example-apache2.conf

Yo tratando de integrar con el apache2 el tomcat v6.0.16

En espera de tu amable ayuda me despido.

Saludos

Anónimo dijo...

Hola!

He seguido el manual pero no me encuentra los archivos .jsp que tengo en ROOT. Probe incluyendo la linea :
Include /etc/apache2/mods-enabled/jk.conf
en apache2.conf

Y al reiniciar apache2 me dice que tiene un error el jk.conf en la segunda linea que la he copiado directamente del manual seguido que es el de esta pagina. No se si hay que incluir esa linea en al apache2 porque sino no me funciona nada.

Sabriais como arreglarlo?

Muchas gracias.

Unknown dijo...

Te agradezco mucho por esta aportación, tenia problemas para instalar el modulo jk, pero gracias a ti lo he solucionado todo.

Dr. ramms dijo...

Hola gran aporte excelente, solo que tengo una pequeña duda, funcionaria tambien para un servidor que tenga corriendo el isp config?

Publicar un comentario