Instalación y Configuración de Software
- Pruebas Finales

Tanto la instalación y configuración del Tomcat, como nuestro ambiente básico de desarrollo, parecen estar listos. Ahora vamos a confirmar que realmente funcionan.


1. Probar unas Páginas HTML y JSP Sencillas

Previamente verificamos el funcionamiento elemental del servidor, ahora debemos asegurarnos que pueden instalarse y accederse páginas HTML y JSP sencillas.

Esta prueba, si resulta exitosa, muestra dos cosas importantes. Primero, el acceso exitoso de una página HTML indica que se entiende qué directorios deben contener archivos HTML y JSP. Segundo, el acceder exitosamente una página JSP nueva muestra que el compilador Java (no solo la máquina virtual Java) está configurado adecuadamente.

Los dos siguientes archivos se van a salvar en dir_code/web.

El archivo HTML:

<html>

<head>
<title>
Archivo HTML de Prueba
</title>
</head>

<body bgcolor="#ffeada">

<p>
Esta es una página HTML para ser cargada en el servidor
Tomcat.
</p>

</body>
</html>

• Archivo: p021_Hola.html

El archivo JSP:

<html>

<head>
<title>
Archivo JSP de Prueba
</title>
</head>

<body bgcolor="#ffeada">

<p>
La fecha y hora actual del servidor:
<%= new java.util.Date() %>
</p>

</body>
</html>

• Archivo: p022_Hola.jsp

Ahora tenemos que crear la estructura para desplegar nuestra aplicación. Bajo dir_tom/webapps/ creamos el directorio curso_web:


  dir_tom
      |
      +-- webapps
          |
          +-- curso_web

Nota:  A partir de este punto, me referiré a la ruta: dir_tom/webapps/curso_web como dir_app.

Copiamos los dos archivos creados, de dir_code/web a dir_app.

Debido a que estamos creando una aplicación Web independiente (esto es, no estamos usando la aplicación Web por omisión), antes de poder probar nuestras páginas es necesario hacer un pequeño cambio en el archivo dir_tom/conf/server.xml. Para ello, buscamos en este archivo la etiqueta de cierre (</Host>) correspondiente a la sección de la definición del host virtual:

    <!-- Define the default virtual host -->
    <Host name="localhost" debug="0" appBase="webapps"
        unpackWARs="true" autoDeploy="true">
               :
    </Host>
  </Engine>
</Service>

e insertamos antes de ella la etiqueta que va a definir la trayectoria contextual para nuestra aplicación:

  <!-- Define the default virtual host -->
  <Host name="localhost" debug="0" appBase="webapps"
      unpackWARs="true" autoDeploy="true">
                      :
    <Context
      path="/curso"
      docBase="curso_web"
      debug="0"
      reloadable="true" />

  </Host>

En la etiqueta agregada estamos definiendo que la aplicación (docBase) se encuentra en dir_tom/webapps/curso_web, y que ésta se va a acceder con el URL (path) http://localhost/curso.

Ahora sí (finalmente!!) podemos probar las páginas. Iniciamos el servidor y accesamos los archivos con los URL:

Nota:  Es importante notar que las URL son sensibles a las mayúsculas y minúsculas. Así, no es lo mismo escribir:
 http://localhost/curso/p022_Hola.jsp, que:
 http://localhost/Curso/p022_Hola.jsp.

Si ninguno de estos dos archivos funcionan (ej. se obtiene un error "File Not Found -404"), lo más probable es que se esté utilizando el directorio erróneo para los archivos.

Si el archivo HTML funciona, pero no el JSP, es probable que se haya especificado incorrectamente el directorio base del JDK (en la variable JAVA_HOME).

2. Probar un Servlet que No Usa Paquetes

Nuestra segunda prueba consiste en probar un servlet muy sencillo que simplemente da una salida HTML. Por lo tanto ahora tenemos que crear el directorio correspondiente para desplegar las clases servlet.

Bajo dir_app creamos el directorio WEB-INF, y debajo de éste, el directorio classes:

Nota:  "WEB-INF" va todo en mayúscula, y "classes" va todo en minúscula.


  dir_tom
      |
      +-- webapps
          |
          +-- curso_web
              |
              +-- WEB-INF
                  |
                  +-- classes

Escribimos el siguiente código:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class p031_Holas extends HttpServlet
{
  public void doGet( HttpServletRequest req, HttpServletResponse res )
    throws ServletException, IOException
  {
    res.setContentType( "text/html" );

    PrintWriter out = res.getWriter();

    String docType =
      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " +
      "Transitional//EN\">\n";

    out.println( docType +
      "<html>\n" +
      "<head><title>Servlet de Prueba 1</title></head>\n" +
      "<body bgcolor=\"#ffeada\">\n" +
      "<h3>Curso de JSP</h3><hr>\n" +
      "<p>Soy el servlet # 1</p>\n" +
      "</body></html>" );
  }
}

• Archivo: p031_Holas.java

Lo salvamos en nuestro directorio dir_code/src. Lo compilamos, y copiamos la clase generada (p031_Holas.class) al directorio dir_app/WEB-INF/classes.

Nota:  En todas las versiones de Tomcat 4, la localización para servlets en la aplicación Web por omisión es: dir_tom/webapps/ROOT/WEB-INF/classes. Sin embargo, en las últimas versiones de Tomcat, el sistema no crea el directorio automáticamente, uno tiene que crearlo.

Accesamos nuestro servlet con la URL: http://localhost/curso/servlet/p031_Holas.

Nota:  El URL por omisión es http://host/aplicacion/servlet/nombreDelServlet
aunque también puede personalizarse ese URL por medio del archivo dir_code/web/WEB-INF/web.xml (más adelante se verá esto).

3. Probar un Servlet que Usa Paquetes

Nuestra tercer prueba consiste en probar un servlet muy sencillo que utiliza paquetes (pero no utilerías) y que simplemente da una salida HTML. Por lo tanto ahora tenemos que crear los directorios para los paquetes, tanto para el código fuente como para la aplicación desplegada.

Escribimos el siguiente código:

package pkgs.pq01;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class p032_Holas extends HttpServlet
{
  public void doGet( HttpServletRequest req, HttpServletResponse res )
    throws ServletException, IOException
  {
    res.setContentType( "text/html" );

    PrintWriter out = res.getWriter();

    String docType =
      "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " +
      "Transitional//EN\">\n";

    out.println( docType +
      "<html>\n" +
      "<head><title>Servlet de Prueba 2</title></head>\n" +
      "<body bgcolor=\"#ffeada\">\n" +
      "<h3>Curso de JSP</h3><hr>\n" +
      "<p>Soy el servlet # 2</p>\n" +
      "</body></html>" );
  }
}

• Archivo: p032_Holas.java

Lo salvamos en el directorio dir_code/src/pkgs/pq01. Lo compilamos y copiamos la clase creada (p032_Holas.class) al directorio dir_app/WEB-INF/classes/pkgs/pq01.

En caso de obtener errores de compilación, hay que revisar la definición de la variable CLASSPATH, ya que probablemente no se incluyó al directorio actual (".\").

Accesamos el servlet con la URL:
http://localhost/curso/servlet/pkgs.pq01.p032_Holas.

Si la prueba no funciona, puede deberse a cualquiera de las siguientes causas:

4. Probar un Servlet que Usa Paquetes y Utilerías

La última prueba consiste en probar un servlet muy sencillo que utiliza paquetes y una clase de utilería. Ambos archivos se van a salvar en el directorio dir_code/src/pkgs/pq01.

La clase servlet:

package pkgs.pq01;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class p033_Holas extends HttpServlet
{
  public void doGet( HttpServletRequest req, HttpServletResponse res )
    throws ServletException, IOException
  {
    res.setContentType( "text/html" );

    PrintWriter out = res.getWriter();

    String sTitulo = "Servlet de Prueba 3";

    out.println( p034_Util.hdrTitulo( sTitulo ) +
      "<body bgcolor=\"#ffeada\">\n" +
      "<h3>Curso de JSP</h3><hr>\n" +
      "<p>Soy el servlet # 3</p>\n" +
      "</body></html>" );
  }
}

• Archivo: p033_Holas.java

La clase utilería (la vamos a usar para simplificar la generación del encabezado de la página HTML):

package pkgs.pq01;

import javax.servlet.*;
import javax.servlet.http.*;

public class p034_Util
{
  public static final String DOCTYPE =
    "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " +
    "Transitional//EN\">";

  public static String hdrTitulo( String sTitulo )
  {
    return( DOCTYPE + "\n" +
        "<html>\n" +
        "<head><title>" + sTitulo + "</title></head>\n" );
  }
}

• Archivo: p034_Util.java

Salvados ambos archivos y compilamos únicamente el archivo p033_Holas.java. Se observará que al compilar p033_Holas.java, la compilación de p034_Util.java se ejecuta automáticamente.

Nota:  Es importante recordar que la variable CLASSPATH debe incluir al directorio raíz de una jerarquía de paquetes, antes de que se pueda compilar una clase que pertenezca a un paquete y que utilice otra clase del mismo paquete.

Copiamos las clases creadas al directorio dir_app/WEB-INF/classes/pkgs/pq01, y accesamos con la URL: http://localhost/curso/servlet/pkgs.pq01.p033_Holas.

Con esto queda finalizada la revisión de nuestro ambiente básico de desarrollo.


Ayuda

Para más información sobre Tomcat: