Crear tu Primera Aplicación Web Real con Tomcat 4 y MySQL

Ya estamos listos para crear los ficheros de configuraci�n de nuestra aplicaci�n Librer�a :

.�Libreria/WEB-INF/web.xml

Libreria/WEB-INF/web.xml es el descriptor de despliegue para la aplicaci�n Web. Contiene dos par�metros clave.

El par�metro listener identifica la clase Java del oyente libreria.ContextListener, al que se llamar� durante la arrancada y parada de la aplicaci�n.

<listener>
   <listener-class>listener.ContextListener</listener-class>
</listener>

El par�metro welcome-file-list controla el punto de entrada a la aplicaci�n. El siguiente c�digo selecciona la p�gina Index.jsp como �nico punto de entrada a la aplicaci�n Librer�a:

<welcome-file-list>
   <welcome-file>Index.jsp</welcome-file>
</welcome-file-list>

.�Prop�sito del Fichero web.xml

Es el descriptor de despliegue de la aplicaci�n y est� contenido en el directorio WEB-INF. Define varios par�metros que son usados cuando se despliega la aplicaci�n en el contenedor de Servlets/JSP Tomcat. display-name

Configura el nombre de la aplicaci�n web que se mostrar� en los listados de Tomcat. La siguiente l�nea selecciona este par�metro de la aplicaci�n Libreria como "Aplicaci�n Web de Libreria":

    <display-name>Aplicaci�n Web de Libreria</display-name>
description

Configura la descripci�n de la aplicaci�n Web. La siguiente l�nea selecciona la descripci�n de la aplicaci�n Libreria como "Esta aplicaci�n mantiene una base de datos de libros.":

    <description>Esta aplicaci�n mantiene una base de datos de libros.</description>
listener

Configura la aplicaci�n web para que se ejecute un oyente de contexto servlet cuando se arranque o se pare la propia aplicaci�n Web. Las siguiente l�neas seleccionan que el oyente de contexto servlet de la aplicaci�n Librer�a sea libreria.ContextListener

    <listener>
        <listener-class>libreria.ContextListener</listener-class>
    </listener>
welcome-file-list

Configura el punto de entrada a la aplicaci�n web. Las preferencias por defecto para este par�metro se seleccionan en el fichero conf/web.xml de Tomcat. Usando nuestro editor de texto, podemos echar una mirada a la parte final de nuestro fichero conf/web.xml. Deber�amos ver algo como esto:

    <!-- ==================== Default Welcome File List ===================== -->
    <!-- When a request URI refers to a directory, the default servlet looks  -->
    <!-- for a "welcome file" within that directory and, if present,          -->
    <!-- to the corresponding resource URI for display.  If no welcome file   -->
    <!-- is present, the default servlet either serves a directory listing,   -->
    <!-- or returns a 404 status, depending on how it is configured.          -->
    <!--                                                                      -->
    <!-- If you define welcome files in your own application's web.xml        -->
    <!-- deployment descriptor, that list *replaces* the list configured      -->
    <!-- here, so be sure that you include any of the default values that     -->
    <!-- you wish to include.                                                 -->

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>Home.jsp</welcome-file>
    </welcome-file-list>

Es posible realizar cambios globales en nuestra configuraci�n de Tomcat modificando el fichero conf/web.xml, pero no recomiendo hacerlo. Es mucho mejor seleccionar las preferencias en el par�metro welcome-file-list de la propia aplicaci�n. Las siguiente l�neas seleccionan el punto de entrada de la aplicaci�n Librer�a como Index.jsp

   <welcome-file-list>
        <welcome-file>Index.jsp</welcome-file>
    </welcome-file-list>

.�C�digo Fuente Completo del Fichero web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app 
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
        "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <display-name>Aplicaci�n Web de Libreria</display-name>

    <description>Esta aplicaci�n mantiene una base de datos de libros.</description>

    <listener>
        <listener-class>libreria.ContextListener</listener-class>
    </listener>

    <welcome-file-list>
        <welcome-file>Index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

.�Libreria.xml

.�Prop�sito del Fichero Libreria.xml

El fichero Libreria.xml contiene los detalles del "contexto" de la aplicaci�n Libreria, es decir, los par�metros que Tomcat usar� cuando ejecute la aplicaci�n, entre ellos la definici�n del DataSource a utilizar, o el tipo de "Log" que va a tener esta aplicaci�n, por ejemplo.

Este c�digo define el path de contexto, el documento base, el nivel de depuraci�n, el marcador de recargable, y el marcador de contexto cruzado:

    <Context path="/Libreria" docBase="Libreria" debug="1" reloadable="true" crossContext="true">

        ... Aqu� va la definici�n del Logger ...

        ... Aqu� va la definici�n del DataSource ...

    </Context>

Lo m�s importante a observar en este trozo de c�digo son los atributos path y docBase, pero veamos una breve descripci�n de cada uno de ellos.

  • path indica el path que utilizaremos para acceder a nuestra aplicaci�n una vez instalada en Tomcat y formar� parte de la URI para acceder a la aplicaci�n desde nuestro navegador, por ejemplo http://localhost:8080/Libreria en nuestro caso.
  • docBase tambi�n conocido como Ra�z del Documento se utiliza para indicar el directorio donde van a residir los ficheros de la aplicaci�n cuyo contexto estamos configurando. Nota: Si nuestra aplicaci�n se encuentra empaquetada en un fichero WAR, en el atributo docBase deberemos poner el path completo del fichero .war.
  • debug indica el nivel de log de esta aplicaci�n, cuando mayor sea el n�mero que pongamos aqu�, mayor ser� el nivel de detalle que veremos en los ficheros de log.
  • reloadable especifica si queremos que Tomcat monitorice cada cierto tiempo las clases de esta aplicaci�n para ver si han cambiado, pero debemos tener en cuenta que esta operaci�n consume muchos recursos y que puede ser muy �til para entornos de prueba pero puede ser una mala idea para entornos de producci�n.
  • crossContext indica si queremos que las llamadas a ServletContext.getContext() dentro de esta aplicaci�n sobre otras aplicaciones Web que se ejecuten en el mismo host virtual devuelvan siempre un request dispatcher v�lido. En entornos de alta seguridad se puede seleccionar a false para hacer que getContext() siempre devuelva null.

Hay muchos otros atributos del elemento context, podr�s encontrar m�s informaci�n sobre ellos en el fichero Context.html que viene en la documentaci�n de Tomcat, en el directorio C:\Archivos de programa\Apache Group\Tomcat 4.1\webapps\tomcat-docs\config\

.�Definici�n de Logger

Este c�digo define un objeto Logger como una clase org.apache.catalina.logger.FileLogger. En el directorio logs de Tomcat se crear� un fichero log llamado localhost_Libreria_log.YYYY-MM-DD.txt donde YYYY-MM-DD es la fecha del log:

    <Logger className="org.apache.catalina.logger.FileLogger" 
         prefix="localhost_Libfreria_log." suffix=".txt" timestamp="true"/>

.�Definici�n del DataSource

Este c�digo define un Resource llamado jdbc/biblioteca como una clase javax.sql.DataSource:

    <Resource name="jdbc/biblioteca" auth="Container" type="javax.sql.DataSource"/>

Este c�digo define el ResourceParams llamado jdbc/biblioteca como una clase org.apache.commons.dbcp.BasicDataSourceFactory:

    <ResourceParams name="jdbc/biblioteca">

        <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>

        ... aqu� van los par�metros de la base de datos ...

        ... aqu� van los par�metros del Repositorio de Conexiones ...

    </ResourceParams>

.�Par�metros de la Base de Datos

url

La URL de la base de datos url = jdbc:mysql://localhost:1306/biblioteca?autoReconnect=true. Por defecto, MySQL cierra las conexi�n inactivas despu�s de 8 horas. Si esto sucede, usando autoReconnect=true se har� que Tomcat se reconecte autom�ticamente. Otras bases de datos podr�an funcionar de forma diferente:

    <parameter>
        <name>url</name>
        <value>jdbc:mysql://localhost:1306/biblioteca?autoReconnect=true</value>
    </parameter>
driverClassName

El nombre de la clase del driver JDBC, driverClassName = org.gjt.mm.mysql.Driver que es el nombre de la clase para el driver MySQL Connector/J JDBC .

    <parameter>
        <name>driverClassName</name>
        <value>org.gjt.mm.mysql.Driver</value>
    </parameter>

Nota: Recuerda que debes situar el fichero JAR mysql-connector-java-2.0.14-bin.jar en el directorio ..\common\lib de Tomcat. username

El nombre de usuario para acceder a la base de datos MySQL username = mysqlusername.

    <parameter>
        <name>username</name>
        <value>mysqlusername</value>
    </parameter>
password

La password MySQL para acceder a la base de datos, password = mysqlpassword.

    <parameter>
        <name>password</name>
        <value>mysqlpassword</value>
    </parameter>

.�Par�metros del Repositorio de Conexiones

maxActive

El n�mero m�ximo de conexiones en el repositorio, maxActive = 100. Seleccionamos maxActive = 0 para que no haya limite. Debemos asegurarnos de configurar max_connections lo suficientemente grande para manejar todas las conexiones a nuestra base de datos.

    <parameter>
        <name>maxActive</name>
        <value>100</value>
    </parameter>
maxIdle

El n�mero m�ximo de conexiones inactivas a retener en el repositorio, maxIdle = 30. Seleccionamos maxIdle = 0 para que no haya l�mite.

    <parameter>
        <name>maxIdle</name>
        <value>30</value>
    </parameter>
maxWait

El tiempo m�ximo a esperar para obtener una conexi�n disponible [en milisegundos], maxWait = 10000. Seleccionamos maxWait = -1 para esperar indefinidamente. Si hay un timeout, se lanza una Exception.

    <parameter>
        <name>maxWait</name>
        <value>10000</value>
    </parameter>
removeAbandoned

Si removeAbandoned = true entonces cuando haya pocas conexiones disponibles en el repositorio de conexiones se recuperar� y reciclar� cualquier conexi�n abandonada que se encuentre. El valor por defecto es removeAbandoned = false.

    <parameter>
        <name>removeAbandoned</name>
        <value>true</value>
    </parameter>
removeAbandonedTimeout

El n�mero de segundos que una conexi�n tiene que estar inactiva hasta que sea considerada abandonada por el repositorio de conexiones. removeAbandonedTimeout = 300 es el tiempo por defecto.

    <parameter>
        <name>removeAbandonedTimeout</name>
        <value>300</value>
    </parameter>
logAbandoned

Si logAbandoned = true el repositorio de conexiones guardar� un seguimiento de pila del c�digo que abandon� un recurso de conexi�n.

    <parameter>
        <name>logAbandoned</name>
        <value>true</value>
    </parameter>

.�C�digo Fuente Completo del fichero Libreria.xml

<Context path="/Libreria" docBase="Libreria" 
     debug="1" reloadable="true" crossContext="true">

    <Logger className="org.apache.catalina.logger.FileLogger" 
      prefix="localhost_Libreria_log." suffix=".txt" timestamp="true"/>

    <Resource name="jdbc/biblioteca" auth="Container" type="javax.sql.DataSource"/>

    <ResourceParams name="jdbc/biblioteca">

        <parameter>
            <name>factory</name>
            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>

        <parameter>
            <name>url</name>
            <value>jdbc:mysql://localhost:1306/biblioteca?autoReconnect=true</value>
        </parameter>

        <parameter>
            <name>driverClassName</name>
            <value>org.gjt.mm.mysql.Driver</value>
        </parameter>

        <parameter>
            <name>username</name>
            <value>mysqlusername</value>
        </parameter>

        <parameter>
            <name>password</name>
            <value>mysqlpassword</value>
        </parameter>

        <parameter>
            <name>maxActive</name>
            <value>100</value>
        </parameter>

        <parameter>
            <name>maxIdle</name>
            <value>30</value>
        </parameter>

        <parameter>
            <name>maxWait</name>
            <value>10000</value>
        </parameter>

        <parameter>
            <name>removeAbandoned</name>
            <value>true</value>
        </parameter>

        <parameter>
            <name>removeAbandonedTimeout</name>
            <value>300</value>
        </parameter>

        <parameter>
            <name>logAbandoned</name>
            <value>true</value>
        </parameter>

    </ResourceParams>

</Context>

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR