SERVLETS
APARTADOS
Instalación Apache-Tomcat |
Configurando apache-tomcat |
Generación de páginas dinámicas mediante Servlets |
Un servlet es una aplicación java que se ejecuta en un servidor (fue diseñado entre otras cosas para poder realizar web sites dinámicos). Recuerda que los applets sí se ejecutan en el cliente.
Los servlets serán: portables, podrán obtener información acerca del cliente (dirección IP, etc...), permitirán el uso de cookies, de sesiones, soportarán la generación dinámica de código HTML.
Apache Tomcat es un contenedor servlet usado para las tecnologías JavaServer Pages(JSP) y Servlets Java.
Mediante el navegador dirigirse a la siguiente dirección: http://tomcat.apache.org/
Una vez cargada la página oficial ir a la sección de descarga:
Seleccionar la última versión.
Una vez descargada, instalar apache-tomcat. Dentro de la instalación sólo habrá un paso en el que se solicitarán datos de importancia, como el puerto que se usará, el nombre y la contraseña. Una vez instalado, si se ha marcado la opción "Run Apache Tomcat" se ejecutará dicho software. Tendrá que aparecer el siguiente icono en la esquina inferior derecha (bandeja de programas residentes):
Este icono indica que apache-tomcat se está ejecutando. Si en vez de este icono apareciese el siguiente:
habría que despertar apache-tomcat. Para realizar esta última
acción habrá que pulsar el botón derecho del ratón
sobre este último icono:
Seleccione la opción "Start service", lo que provocará el arranque de apache-tomcat:
Realizar los siguientes pasos:
1) Se va a configurar el CLASSPATH, pues el compilador (javac) desconoce dicha información. Ir hacia el icono "Mi PC", pulsar botón derecho y seleccionar "Propiedades". En la solapa "Opciones Avanzadas" hacer clic en el botón "Variables de Entorno". En variables de usuario, presionar sobre el botón "Nueva":
Añadir en nombre de variable: CLASSPATH y en valor de variable: .;C:\Archivos de programa\Java\Tomcat 6.0\lib\servlet-api.jar;C:\C:\Archivos de programa\Java\Tomcat 6.0\lib\jsp-api.jar;C:\Archivos de programa\Java\Tomcat 6.0\lib\el-api.jar;C:\servlets
(el efecto producido sería el mismo que redefinir la variable de entorno CLASSPATH de la siguiente manera: CLASSPATH=.;C:\Archivos de programa\Java\Tomcat 6.0\lib\servlet-api.jar;C:\C:\Archivos de programa\Java\Tomcat 6.0\lib\jsp-api.jar;C:\Archivos de programa\Java\Tomcat 6.0\lib\el-api.jar;C:\servlets)
Fíjese que el último directorio es la propia carpeta creada en el primer paso. La ruta "C:\Archivos de programa\Java\Tomcat 6.0\lib\" podría cambiar si apache-tomcat se ha instalado en otra carpeta.
¡Una vez realizado este paso ya se puede compilar código fuente que use la tecnología servlet!
2) PASO OPCIONAL. Si se quiere cambiar de número de puerto (por defecto es el 8080) solamente habría que modificar el archivo "conf/server.xml", lógicamente la carpeta "conf" estaría situada en la ruta de instalación (C:\Archivos de programa\Java\Tomcat 6.0\conf). Habría que hacer el cambio en la siguiente línea:
<Connector port="80" ...
Para no tener que buscar línea por línea, abre el archivo con el bloc de notas (notepad.exe) y ejecutar una búsqueda del texto "Connector"
3) Ahora habrá que indicarle a apache-tomcat que compruebe las fechas (fecha y hora) de los archivos (servlets, programas java, etc...), para verificar si hay que refrescar los contenidos que actualmente residen en la memoria del servidor. Por ejemplo, se ha podido modificar o cambiar un programa java y estar todavía ejecutándose la versión anterior.
En el archivo "context.xml" situado en la ruta "C:\Archivos
de programa\Java\Tomcat 6.0\conf" cambiar la línea <Context>
a <Context reloadable="true" privileged="true">
4) Se va a habilitar el invocador de servlets. Éste es usado cuando estás probando tu código fuente (en tu etapa de desarrollo inicial). Lo usarás sobre todo como una herramienta didáctica. Cuando ya esté todo desarrollado y tengas ya la aplicación final deberás deshabilitarlo para utilizar un servidor de aplicaciones.
Para ello tendrás que quitar los comentarios de los dos siguientes párrafos en el archivo "web.xml" situado en la carpeta "C:\Archivos de programa\Java\Tomcat 6.0\conf":
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
...
</servlet>
...
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
Quitar comentarios en xml supone eliminar los siguientes caracteres: " <!--" y "-->"
5) PASO OPCIONAL. Si se quiere que se liste el contenido de directorios y archivos en nuestro navegador cuando se indica una ruta específica, habrá que modificar el valor "listings" a "true" (ver en el listado la cadena de texto que está en negrita y cursiva) del archivo "web.xml" del directorio "C:\Archivos de programa\Java\Tomcat 6.0\conf":
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
6) PASO OPCIONAL. Si deseas hacer copias de los scripts de arranque y apagado de Tomcat (startup.bat, shutdown.bat, etc...), habrá que configurar la variable de entorno CATALINA_HOME. Esta variable identifica el directorio de instalación de apache-tomcat. Para modificar esta variable de entorno habría que realizar los mismos pasos descritos para la modificación de CLASSPATH, solo que este valor sería "C:\Archivos de programa\Java\Tomcat 6.0".
Ya está todo listo (para y arranca apache-tomcat para que se reflejen los cambios en memoria), comprobar su funcionamiento escribiendo la siguiente dirección: http://localhost:8080/ en tu navegador. Tendrás que ver un mensaje de bienvenida y algunos consejos (sino aparece correctamente revisar pasos anteriores).
En la página de bienvenida indicará en que carpeta tendrías que alojar tus archivos: $CATALINA_HOME/webapps/ROOT/index.html (recuerda que la variable de entorno CATALINA_HOME definía simplemente la carpeta de instalación). En este tutorial sería la carpeta: "C:\Archivos de programa\Java\Tomcat 6.0\webapps\ROOT".
Se va a comprobar si funciona correctamente y para ello haremos un ejemplo muy sencillo. Crea un archivo con el siguiente contenido:
<HTML>
<HEAD><TITLE>Comprueba JSP</TITLE></HEAD>
<H1>BIENVENIDO AL MUNDO DEL JSP</H1>
Fecha: <%= new java.util.Date() %>
</BODY></HTML>
Guárdalo como "hola.jsp".
Coloca este archivo en la carpeta "C:\Archivos de programa\Java\Tomcat 6.0\webapps\ROOT". En el navegador, introduce la siguiente dirección "http://localhost:8080/hola.jsp". Tendrá que aparecer una página en la que se indica la fecha y hora actual (sino te funciona prueba a apagar y arrancar apache-tomcat)
NOTA: Cuando reinicies el equipo si no tenías seleccionada la opción de arranque automático tendrás que ejecutar, dentro del grupo de programas de apache-tomcat, "Monitor Tomcat". Cuando aparezca el icono en la bandeja de programas residentes pulsa el botón derecho y después haz clic en "Start Service".
Generación de páginas dinámicas mediante Servlets
Se va a crear una página web en la que se le solicite al usuario su nombre. Cuando el usuario pulse sobre el botón "Enviar" se le devolverá una página html en la que contenga su nombre:
El código de dicho formulario sería el siguiente:
<html>
<head>
<title>Pagina html</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head><body>
<form name="formulario"
method="post" action="http://localhost:8080/servlet/paginasDinamicas">
Nombre: <input name="nombre" type="text" id="nombre">
<input name="bEnviar" type="submit" id="bEnviar"
value="Enviar">
</form>
</body>
</html>
Grabarlo como "cliente.html".
En el formulario se ha usado POST como método de envío. POST es bastante versátil; es usado para enviar datos.
Generalmente el método GET se usa para obtener un archivo u otro recurso. Vendrá incluida toda la información en la propia URL. Ejemplo:
http://pagina.com/peticion.cgi?campo1=valor1&campo2=valor2
En el siguiente trozo de código: "action="http://localhost:8080/servlet/paginasDinamicas" se está indicando cuál será el servlet que atenderá la petición. ATENCIÓN: El archivo java tendrá que ir "sin la extensión". Además hace una referencia a una carpeta denominada "servlet" que veremos a continuación.
El código del servidor sería el siguiente (se le ha puesto como nombre de archivo "paginasDinamicas.java"):
import java.io.*;
import javax.servlets.*;
import javax.servlets.http.*;
//Para implementar un servlets habrá que heredar de la clase "HttpServlet", sobrecargando los siguientes métodos:
//1)public void init(ServletConfig
conf) throws ServletException
//Se llamará automáticamente para la inicialización del
servlet(una única vez).
//2)public void destroy()
//Será invocado cuando se destruya el servlet
//3)public void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, java.io.IOException
//Procedimiento invocado cuando el cliente use el método Get como método
de envío de información
//4)public void doPost(HttpServletRequest req,HttpServletResponse resp) throws
ServletException,java.io.IOException
//Procedimiento invocado cuando el cliente use el método Post como método
de envío de información
public class paginasDinamicas extends HttpServlet
{
public void init(ServletConfig conf) throws ServletException
{
super.init(conf); //Se llama a la superclase
System.out.println("El servidor se ha arrancado a las " + new Date());
}
public void destroy()
{
System.out.println("Se ha parado el servidor a las " + new Date());
}
public void doGet(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, java.io.IOException
{
//Se le pasa la tarea a DoPost. De todas formas
en este ejemplo al usar el método POST como envío
//nunca se invocaría "doGet"
doPost(req, resp);
}
public void doPost(HttpServletRequest req,HttpServletResponse
resp) throws ServletException,java.io.IOException
{
//Se obtiene el valor pasado en el formulario.
En este ejemplo
//es el valor que ha introducido el usuario en el formulario
String name = req.getParameter("nombre");
//Se establece el tipo
de contenido que se va a devolver al cliente: archivo de tipo texto
//en formato html
resp.setContentType("text/html");
//A continuación se va a obtener la salida
PrintWriter salida = resp.getWriter();
//Ahora con sólo
usar el objeto salida se escribirá en el cliente
salida.println("<HTML>\n" +
"<HEAD><TITLE>Saludo</TITLE></HEAD>\n" +
"<BODY>\n" +
"<H1>Hola " + name + "</H1>\n" +
"</BODY></HTML>");
}
}
Seguir los siguientes pasos:
1) Compilar el código "paginasDinamicas.java" (javac paginasDinamicas.java).
2) Copiar el archivo "cliente.html" en la carpeta "C:\Archivos de programa\Java\Tomcat 6.0\webapps\ROOT
3) Crear la carpeta "servlet" en la ruta ""C:\Archivos de programa\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\WEB-INF\"
4) Copiar el archivo "paginasDinamicas.class" en la carpeta "C:\Archivos de programa\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\WEB-INF\classes".
5) Dirígirse al navegador e indicar la siguiente dirección: http://localhost:8080/cliente.html. En el formulario que aparece en el navegador, rellenar la caja de texto "Nombre" con su nombre y posteriormente pulsar el botón "Enviar".