LSID
Universidad de Almería
Laboratorio de
Sistemas de Información Distribuidos

 

PRACTICAS

Práctica 1
Práctica 2
Práctica 3
 

Valid HTML 4.01 Transitional

 
 
 
 
 
 
 
 
 
 

ooooooooooooooo



Práctica 3: Productor/Consumidor CORBA bajo Web


MODULO 2: Programación Servlet
 
1. Descargar J2SE (plataforma Java)

Acceda a la siguiente dirección

http://java.sun.com/j2se/

Descargue la ultima versión de J2SE. Aparecerá algún botón o enlace que diga "J2SE Downloads"

Por ejemplo, en el momento que se redacta este documento la ultima versión es: J2SE 1.4.1


Seleccionar la versión SDK para plataforma Linux (es un RPM)


Acepte la LICENCIA pulsando el botón ACCEPT que hay al finao el botón ACCEPT que hay al final de la página.


Pinche sobre la linea Download para descargar>Pinche sobre la linea Download para descargar la versión (Download j2sdk-1_4_1_02-linux-i586-rpm.bin)


Es buena costumbre descargar los programas en /tmp


Una vez el archivo en disco, el ejecutable es un ".bin" que encierra un ".rpm". Para ejecutarlo primer debe cambiar los permisos de ejecución del archivo. Asigne permisos de ejecución para los tres niveles (usuario, grupo y otros). Esto se puede hacer desde una ventana de archivos, y pulsando el botón derecho sobre el archivo; luego en la ventana que aparece, seleccionar la ficha Permisos.


Cuando haya cambiado los permisos, situese (desde una ventana de consola) en el directorio donde ha descargado el archivo (en /tmp).


Desde el directorio escriba

./j2sdk-1_4_1_02-linux-i586-rpm.bin

Esto ultimo debería empezar a descomprimir el archivo parapezar a descomprimir el archivo para generar el RPM (utilice la barra espaciadora para pasar las pantallas que le irán apareciendo, y al final conteste Y a la pregunta que se le hace)

Como se ha dicho, esto debería generar el archivo j2sdk-1_4_1_02-linux-i586-rpm en el mismo directorio


Ahora vamos a instalar Java. Para ello, desde la ventana de archivo, pinche sobre el archivo RPM. Esto debería invocar a un programa que instala solo el programa Java.


Compruebe que la instalación se hace en /usr/java, generando dentro de este, otro directorio con la versión instalada (en nuestro caso se genera /usr/java/j2sdk1.4.1_02)


Ahora para que se reconozca la ruta de Java, hay que activar la variable de entorno que controla Java. Esto se hace con la variable JAVA_HOME. Para ello, desde una consola de Linux, ponga

JAVA_HOME=/usr/java/j2sdk1.4.1_02/

y luego escriba

export JAVA_HOME

esto hace que se reconozca el compilador de Java. Si aun asi no reconoce Java, intente activarlo tambien con el PATH:

PATH=/usr/java/j2sdk1.4.1_02/bin/:$PATH

y luego escriba

export PATH
 

ATENCION: NO CIERRE LA CONSOLA DE LINUX!!
 

2. Descargar TOMCAT:


Acceda a la siguiente dirección:

http://jakarta.apache.org/builds/jakarta-tomcat/

Seleccione el directorio de la ultima versión. Por ejemplo, cuando se hizo este documento era:

http://jakarta.apache.org/builds/jakarta-tomcat/nightly-5/

y luego la mas reciente. En nuestro caso:

http://jakarta.apache.org/builds/jakarta-tomcat/nightly-5/30-Jan-2003/

Luego descargue el archivo correspondiente (almacénelo en el /tmp):

jakarta-tomcat-5.0.tar.gz

Descomprima el archivo. Esto debería generar un directorio dentro del actual. En nuestro caso:

/tmp/jakarta-tomcat-5.0.1

Almacene el directorio jakarta-tomcat-5.0.1 en el directorio /usr/local/. Este directorio es donde normalmente se almacenan los programas en Linux, similar a "Archivos de programas" de Windows.

Active TOMCAT. Esto se puede hacer de dos formas, o con la opcion startup.sh o con la opción catalina.sh. En ambos casos se activa un servidor de recursos web.

En ambos casos, desde la misma consola donde ha activado el JAVA_HOME, escriba:

/usr/local/jakarta-tomcat-5.0.1/bin/startup.sh

o escriba (opción recomendada):

/usr/local/jakarta-tomcat-5.0.1/bin/catalina.sh

Se debería iniciar TOMCAT. Luego, ya puede abrir una navegador (Netscape o Mozilla) y usar la dirección:

http://labxxx.ual.es:8080/

xxx = es el numero del PC donde esté trabajando. 8080 = es el puerto donde se activan las Servlets
Acceda a los ejemplos JSP y Servlets e investigue su funcionamiento.

Tambien puede utilizar la direccion localhost para las pruebas iniciales, en la forma:

http://localhost:8080/

Por omision, el puerto es el 8080. Si desea cambiar el puerto de entrada, esto se puede hacer editando el archivo: web.xml

Para parar tomcat se hace asi:

/tmp/jakarta-tomcat-5.0.1/bin/shutdown.sh

para la opcion startup, o pulsando CONTROL + C si ha activado el servidor con catalina.


NOTA IMPORTANTE:

Cuando active o desactive Tomcat por la via startup/shutdown puede que en ocasiones permanezca activo un proceso java que impida la ejecución http://...:8080 desde Mozilla. Si este es el caso, debería comprobar si el proceso java está activo, y luego eliminarlo desde una consola (usando ps y luego kill -9), si es el caso.

Ejercicio:

Con el servidor de tomcat activo, acceda a la pagina inicial con localhost:8080 e investigue los ejemplos de servlet y jsp que trae la libreria.

3. Activar una Servlet mia:


Activar una servlet no es demasiado complejo. Se puede hacer de dos formas, una mediante una ventana HTML para el administrador o el gestor de Tomcat, y otra creando directamente los directorios necesarios para este fin. En nuestro caso lo vamos a realizar de la segunda forma.

Los servlets se crean en el directorio $TOMCAT/webapps, siendo $TOMCAT la ruta donde está almacenado el Jakarta Tomcat. Por ejemplo, en el momento que se hizo esta prueba, el directorio general de servlets era:

/usr/local/jakarta-tomcat-5.0.1/webapps

Dentro de este directorio se pueden crear tantas Servlets y HTML como queremos. Lo normal es que para cada proyecto generemos un directorio, dentro de este. Por ejemplo, si vamos a implementar un conjunto de Servlet relacionadas con temas de contabilidad (dentro de un Sistema que estamos desarollando), podriamos crear un directorio que se llame contabilidad, y dentro de este habra que definir otra estructura de directorios, que veremos a continuacion. Para generalizar, supongamos un direcotio llamado miproyecto.

/usr/local/jakarta-tomcat-5.0.1/webapps/miproyecto/

Las páginas HTML pueden ir directamente en este directorio (la página principal generalmente llamada index.html), y las clases de servlet se almacenan en un directorio llamado WEB-INF, y a su vez, dentro de este, en el directoriorectamente en este directorio (la página principal generalmente llamada index.html), y las clases de servlet se almacenan en un directorio llamado WEB-INF, y a su vez, dentro de este, en el directorio classes.

+-- miproyecto +-- WEB-INF +-- classes +-- *.class
                       +-- *.html

Los fuentes (.java) se pueden guardar donde uno quiera, lo que importa es que las clases compiladas esten en el directorio classes.

Para registrar una servlet es necesario hacerse en un archivo llamado web.xml que debe estar en el directorio WEB-INF. El contenido de este archivo almacena un registro XML para cada servlet almacenda dentro del directorio classes. Lo que se muestra a continuación es un ejemplo del contenido del archivo 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>Servlet 2.4 Examples</display-name>
    <description>
      Servlet 2.4 Examples.
    </description>

    <servlet>
        <servlet-name>contacto</servlet-name>
        <servlet-class>contacto</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>contacto</servlet-name>
        <url-pattern>/servlet/contacto</url-pattern>
    </servlet-mapping>
</web-app>

Figura 1. Contenido de web.xml


En el ejemplo de la figura anterior hay una sola servlet registrada que se llama contacto. Fijese que para registrar una servlet hay que crear dos registros: uno con la etiqueta <servlet> ... </servlet> y otro con la etiquetas <servlet-mapping> ... </servlet-mapping>. Por cada servlet nueva hay que crear estos dos registros. Dentro de la servlet, se debe especificar el nombre de la servlet y el nombre de la clase que contiene la servlet. Generalmente son el mismo nombre (aunque puede ser diferente).

No es necesario nada mas. En resumen:  

  1. el directorio de proyecto deberá tener un directorio WEB-INF y los archivos HTML.
  2. dentro del directorio WEB-INF deberá contener dos cosas: el directorio classes y archivo web.xml con las servlet en XML. registradas.
  3. dentro del directorio classes se deberán almacenar los archivos .class.

Para llamar a una clase que hay dentro de mi proyecto hay que tener un especial cuidado, porque fijese como se hace:

http://labxxx.ual.es:8080/miproyecto/servlet/miPrograma

Esto debería llamar a una Servlet (una clase) que se llama miPrograma, y que físicamente se encontraría en la ruta de disco:

/usr/local/jakarta-tomcat-5.0.1/webapps/miproyecto/WEB-INF/classes/

Si mi servlet debe ser llamada desde una página web, usando por ejemplo un boton, esta página web la podríamos guardar en el directorio miproyecto. Si es la página principal, deberíamos llamarla index.html, y en la llamada solo deberíamos poner:

http://labxxx.ual.es:8080/miproyecto/

Si debemos usar otra página, solo podemos el nombre de la misma:

http://labxxx.ual.es:8080/miproyecto/miPagina.html

En cualquier caso, estos dos páginas HTML (y todas las demas), se almecenan, como se ha dicho, en:

/usr/local/jakarta-tomcat-5.0.1/webapps/miproyecto/


IMPORTANTE:

Atención, cada vez que modifiquemos una servlet, incluyamos una nueva, o se altere los directorios comentados anteriormente, es necesario desactivar TOMCAT y luego volver a activarlo para que los cambios tengan efecto.

Si el servidor Tomcat está activo con startup.sh el proceso se para con shutdown.sh. Es recomendable que cierre Mozilla ANTES de activar de nuevo TOMCAT mediante startup.sh. Si ha seguido esta opcion y no consigue entrar luego con http://...:8080/ compruebe si existe algun proceso java activo. Esto se puede hacer desde una consola mediante la orden ps. Aparecerá una lista de procesos activos. Si aparece un proceso java, finalice su ejecución. La parada (eliminación) se puede hacer mediante una orden kill, por ejemplo kill -9 numero.

Si la activación de Tomcat se ha relizado con Catalina (catalina.sh) solo hay que parar la ejecución del servidor desde la consola, pulsando CONTROL + C, y luego volverlo a activar con catalina.sh. Para esta opción no es necesario cerrar antes Mozilla, puede permanecer abierto.

Por tanto los pasos serían (opcion startup/shutdown):

1. Hacer las modificaciones, y luego para que tengan efecto (o para probarlas)
2. Desactivar Tomcat
3. Cerrar Netscape (en caso de estar abierto)
4. Activar de nuevo Tomcat para que lea el nuevo estado de Servlets.
5. Abrir Netscape llamando a la aplicacion que queremos probar.

Opcion Catalina (catalina.sh):

1. Hacer las modificaciones, y luego para que tengan efecto (o para probarlas)
2. Desactivar Catalina (Control + C).
3. Activar de nuevo Catalina (catalina.sh) para que lea el nuevo estado de Servlets.

 

4. Compilar una Servlet

Para compilar una servlet es necesario activar la variable de entorno CLASSPATH para que contenga la libreria para programar con Servlet. Dentro del Tomcat que hemos instalado ya hay una libreria que se llama servlet-api.jar y que se encuentra en: /usr/local/jakarta-tomcat-5.0.1/common/lib/common/lib/

Por tanto, para que esta variable tenga efecto, desde la consola hay que introducir:

CLASSPATH=/usr/local/jakarta-tomcat-5.0.1/common/lib/servlet-api.jar:$CLASSPATH

y luego

export CLASSPATH

Luego, para compilar el fuente (.java) solo hay que compilarlo de forma normal:

javac miPrograma.java

A continuación se muestra un ejemplo de Servlet:
   

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

public class contacto extends HttpServlet {
   public void doGet(HttpServletRequest request, HttpServletResponse response)
                             throws IOException, ServletException {
       response.setContentType("text/html");
       PrintWriter out = response.getWriter();
       out.println("GET Request. No FORM Data Posted");
    }
    public void doPost (HttpServletRequest request, HttpServletResponse response)
           throws IOException, ServletException {
           Enumeration elements = request.getParameterNames();
           String name1 = (String)elements.nextElement(); /** Email */
           String value_name1 = request.getParameter(name1);
           String name2 = (String)elements.nextElement(); /** Valor de elemento */
           String value_name2 = request.getParameter(name2);
           /** Se genera la salida HTML para mostrar en el cliente */
           response.setContentType("text/html");
           PrintWriter out = response.getWriter();
           out.println("<html>");
           out.println("<head>");
           out.println("<title>Sistemas de Informacion Distribuidos</title>");
           out.println("</head>");
           out.println("<body>");
           out.println("<br>La dirección "+value_name2+" ha almacenado un elemento.");
           out.println("</body></html>");
    }
}

Figura 2. Una sencilla servlet


Toda servlet tiene dos métodos: doGet y doPost. La servlet debe extender la clase HttpServlet. Casi toda la funcionalidad se realiza en el método doPost. Este metodo utiliza dos parametros: una para la entrada a la servlet y otra para generar salidas. En este ejemplo, la salida (response) es una página HTML creada en el código.
 

NOTA:

En la página principal de Tomcat (a nivel local, http://labxxx.ual.es:8080/) dispone de una ayuda sobre la API Servlet, muy util para cuando tenga que programar con Servlet. No dude en consultar estas páginas web.
 

5. EJERCICIO:

Observe en los ejemplos de Tomcat el codigo fuente de una Servlet cómo se genera una página HTML de respuesta en la llamada.

Observe cómo se usa el POST y GET de una página HTML y cómo se hace esto en una Servlet.


Una vez que lo haya analizado, intente crear una simple Servlet que responda ante una llamada de la página HTML del productor/consumidor. En la respuesta ponga lo que quiera (luego lo cambiaremos).


No olvide consultar también la página web del laboratorio, donde se ofrece informacion más detallada sobre el ejercicio del PRODUCTOR/CONSUMIDOR.

   

LSID, Laboratorio de Sistemas de Información Distribuidos
Departamento de Informática
Universidad de Almeria, España
Luis.Iribarne@ual.es