Download Taller de Programación

Document related concepts
no text concepts found
Transcript
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
Taller de Programación
Instructivo de uso de Tomcat
1
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
Índice
ÍNDICE ......................................................................................................................................... 2
1 ¿CÓMO HACER UNA APLICACIÓN WEB SOBRE TOMCAT? ................................................... 3
1.1 Lineamientos generales .................................................................................................................. 3
1.1.1 Estructura de directorios de una aplicación Web en Tomcat ............................................. 3
1.1.1.1 Páginas ................................................................................................................................ 3
1.1.1.2 Deployment descriptor ..................................................................................................... 3
1.1.1.3 Servlets y otras clases Java................................................................................................ 3
1.1.1.4 Archivos JAR ...................................................................................................................... 4
1.1.2 Aplicaciones Web fuera del directorio webapps .................................................................. 4
1.2 Compilación de Servlets ................................................................................................................ 4
1.3 Modificación de Servlets ................................................................................................................. 4
1.3.1 Reinicio del servidor ................................................................................................................ 4
1.3.2 Utilización del Manager .......................................................................................................... 5
1.3.3 Configuración para autoreload en un contexto .................................................................... 5
1.4 Archivo de deploy: “web.xml” ...................................................................................................... 5
1.4.1 Tag “display-name” ................................................................................................................. 6
1.4.2 Tag “servlet”.............................................................................................................................. 6
1.4.3 Tag “servlet-mapping” ............................................................................................................ 6
1.4.4 Tag “welcome-file-list” ............................................................................................................ 6
2 EJEMPLO “HELLOWORLD” ...................................................................................................... 7
2.1 inicio.html ........................................................................................................................................ 7
2.2 HelloWorld.java ............................................................................................................................... 7
3 CORRIENDO LA APLICACIÓN CREADA EN FING ................................................................... 8
4 REFERENCIAS ............................................................................................................................ 8
2
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
1 ¿Cómo hacer una aplicación Web sobre Tomcat?
1.1 Lineamientos generales
En un servidor Web pueden residir varias aplicaciones simultáneamente. Cada aplicación Web
estará compuesta por páginas HTML, páginas JSP, Servlets, otras clases Java y un archivo XML
que tiene parámetros de configuración de la aplicación llamado deployment descriptor.
La creación de una nueva aplicación requiere crear una determinada estructura de directorios
debajo del directorio webapps del Tomcat, tal como se detalla a continuación.
1.1.1 Estructura de directorios de una aplicación Web en Tomcat
A continuación se detalla la estructura de directorios que debe tener una aplicación:
Observación: “jakarta-tomcat” es el directorio donde se instaló el Tomcat.
1.1.1.1 Páginas
Las páginas HTML y JSP deben colocarse en el directorio “MiAplicacionWeb”. Es posible crear
subdirectorios dentro dicho directorio para colocar las páginas, siempre y cuando se referencien
correctamente desde las otras páginas y Servlets.
1.1.1.2 Deployment descriptor
El archivo de deploy “web.xml” debe colocarse dentro del directorio “WEB-INF” de la
aplicación.
Observación: El archivo de deploy DEBE llamarse exactamente “web.xml” respetando
mayúsculas y minúsculas. Lo mismo para el directorio “WEB-INF”.
1.1.1.3 Servlets y otras clases Java
Dentro del directorio “WEB-INF/classes” de la aplicación deben colocarse todos los Servlets
compilados y opcionalmente las clases Java utilizadas por los diferentes componentes Web
(.class) respetando la estructura de packages.
El Tomcat crea un class loader separado para cada aplicación Web haciendo visible así todas las
clases que se coloquen dentro de este directorio para dicha aplicación, pero no las de ninguna
otra.
3
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
1.1.1.4 Archivos JAR
Cualquier librería que se desee utilizar debe colocarse dentro del directorio “WEB-INF/lib”, el
cual también se hace visible gracias al class loader que el Tomcat crea para la aplicación.
Observación: Tener en cuenta que cualquier clase referenciada desde la aplicación Web debe
estar, o bien en uno de estos directorios, o bien en el CLASSPATH de la máquina donde se
levanta el servidor, o bien en el directorio “lib” del Tomcat (por más información referirse a [2]).
1.1.2 Aplicaciones Web fuera del directorio webapps
Es posible configurar el servidor Web para que tome aplicaciones de otros directorios además
de la opción por defecto que es el directorio webapps como se vio anteriormente.
Para lograr esto es necesario crear un archivo XML de nombre a elección dentro el directorio
“directorio_tomcat_instalado/conf/Catalina/localhost” (con extensión “xml”). Dicho archivo
debe definir un “Contexto” para una aplicación Web particular, que entre otras cosas, definirá
el directorio de la misma.
A modo de ejemplo:
<Context reloadable="true"
docBase="/ens/home01/n/nombre.apellido/mywebapps/exampleApp">
</Context>
El directorio “/ens/home01/n/nombre.apellido/” representa el directorio base de cada
usuario “nombre.apellido”.
Esto define una aplicación llamada igual que el nombre del archivo de contexto, que se ubicará
en el directorio “~/mywebapps/exampleApp” (el ~ representa el home dir de cada usuario
“nombre.apellido”). Esto quiere decir, que para esta aplicación particular, dicho directorio
jugará el papel del directorio “MiAplicacionWeb” visto en el punto 1.1.1.
Por más información acerca de contextos de aplicación ver [5].
1.2 Compilación de Servlets
Antes de compilar los Servlets debe agregarse al CLASSPATH el archivo
“directorio_tomcat_instalado/lib/servlet-api.jar”. Luego se compilan como cualquier otra clase
Java con “javac”.
La razón de esto, es que las APIs de Java Servlets y Java Server Pages son parte de J2EE (Java 2
Plataform, Enterprise Edition), por lo cual no se encuentran en J2SE (Java 2 Plataform, Standard
Edition). El archivo “servlet-api.jar” es una biblioteca que viene con el Tomcat e incluye una
implementación de estas APIs.
1.3 Modificación de Servlets
Las clases que se encuentran dentro del directorio “WEB-INF/classes” (entre ellas los Servlets)
pueden ser modificadas como cualquier otra clase simplemente cambiando los “.class” que allí
se encuentren. El problema reside en que el Tomcat debe darse cuenta de que han ocurrido
cambios de manera de volver a iniciar la aplicación y hacer visibles dichos cambios. A
continuación se presentarán algunas de las distintas formas de lograr esto.
1.3.1 Reinicio del servidor
La primera opción que se puede utilizar es simplemente bajar y volver a levantar el servidor.
Obviamente, si bien esta es una forma segura de lograr el cometido, es también bastante pesada
ya que no sólo se tendrá que reiniciar la aplicación en cuestión sino que también se reiniciará
4
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
todo el resto de las aplicaciones y el servidor, lo cual puede llegar a llevar un tiempo
significativo para una etapa de desarrollo.
1.3.2 Utilización del Manager
El Tomcat contiene una aplicación denominada “Tomcat Web Application Manager”, que está
incluida a partir de las versiones 4.x del mismo, y sirve para controlar el resto de las
aplicaciones que residen dentro del servidor Web. Este manager, consta de una interfaz gráfica
muy
sencilla
de
usar
y
que
puede
ser
accedida
mediante
la
URL
“http://host_del_tomcat:puerto/manager/html”. Gracias a ella es posible agregar, quitar y
reiniciar cualquier aplicación sobre el Tomcat sin tener que bajar y levantar el mismo. De esta
forma simplemente se tendría que reiniciar la aplicación a la cual se le hicieron cambios, de
manera que el servidor vuelva a cargar las clases actualizadas en memoria.
Para poder acceder al “Tomcat Web Application Manager” se debe tener un usuario con los
permisos adecuados. Para el manejo de permisos, el Tomcat utiliza un sistema de definición de
roles y usuarios. Tanto los roles como los usuarios son definidos en el archivo
“directorio_tomcat_instalado/conf/tomcat-users.xml”. Existe un rol predefinido llamado
“manager” que es el que permite el acceso al “Tomcat Web Application Manager”. Por más
información ver [3].
Observación: El último comando de la lista de comandos de cada aplicación, “Replegar”,
elimina físicamente toda la aplicación, por lo tanto se recomienda tener cuidado al utilizar
dichas operaciones.
1.3.3 Configuración para autoreload en un contexto
Como se vio en el punto 1.1.2, es posible definir contextos de ejecución para las aplicaciones
Web. En dicho contexto se puede marcar la aplicación como “reloadable”, lo cual quiere decir
que el Tomcat estará atento a posibles cambios en el conjunto de clases que conforman la
aplicación Web, y en caso de ocurrir alguno, él mismo se encargará de reiniciar dicha aplicación
automáticamente.
<Context reloadable="true"
docBase="/ens/home01/n/nombre.apellido/mywebapps/exampleApp”>
</Context>
1.4 Archivo de deploy: “web.xml”
Este archivo XML contiene información de configuración de la aplicación Web. Sirve para que
el servidor entienda la configuración de la misma. Veremos aquí un ejemplo con algunos de los
tags más utilizados y luego se explicará cada uno de ellos (por más información referirse a [6]).
<web-app>
<display-name>Hello World</display-name>
<servlet>
<servlet-name>hello-world</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello-world</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
5
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
<welcome-file>/inicio.html</welcome-file>
</welcome-file-list>
</web-app>
1.4.1 Tag “display-name”
Nombre de la aplicación. Este tag indica el nombre desplegado, por ejemplo, en el “Manager”
del Tomcat.
1.4.2 Tag “servlet”
Este tag declara un Servlet dándole un nombre para poder referenciarlo, por ejemplo, en el tag
”servlet-mapping”. En “servlet-name” se proporciona el nombre (a libre elección) y en
“servlet-class” el nombre completo (incluyendo packages) de la clase Java de ese Servlet.
1.4.3 Tag “servlet-mapping”
Este tag indica que patrones de URL que atenderá un Servlet en particular. Dicho patrón se
indica en el elemento “url-pattern”. El Servlet se indica en “servlet-name” (definido en
el tag “servlet”).
El contenido del elemento “url-pattern” puede ser cualquiera de los siguientes:
Un string comenzado con “/”
Un string comenzado con “/”
y terminado con “/*”
Un string comenzado con “*.”
Descripción
Macheo exacto.
Machea con según el prefijo definido,
sin importar la terminación.
Machea contra la terminación definida.
Un
string
conteniendo
únicamente el carácter “/”
Servlet por defecto, machea si ningún
otro mapping es aplicable.
Ejemplos
/actions
/actions/*
/actions/concrete/*
*.do
*.all
/
Por más información referirse a [6].
1.4.4 Tag “welcome-file-list”
En este tag se indica la página de inicio de la aplicación Web, en este caso “inicio.html”.
6
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
2 Ejemplo “HelloWorld”
En esta sección se presenta un ejemplo de una mini aplicación Web llamada “HelloWorld”. El
mismo consta de una página y de un Servlet, además del archivo de deploy mostrado en la
sección 1.4. La idea es que el Servlet atienda el pedido HTTP que se genera al apretar el botón
etiquetado “Use Servlet” de la página. Lo único que hace luego es devolver una página con el
mensaje “Hello World!!”.
2.1 inicio.html
<html>
<head>
<title>Taller de programación: HelloWorld</title>
</head>
<body>
<h1>HelloWorld</h1>
<form action="hello" method="POST">
<input type="submit" value="Use Servlet">
</form>
</body>
</html>
Observación: Notar que en el tag “form” el atributo “action” tiene valor “hello” que es
justamente lo que se configuró que atendiera el Servlet en el archivo de deploy.
2.2 HelloWorld.java
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
public class HelloWorld extends HttpServlet{
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
PrintWriter out = response.getWriter();
out.println("Hello World!!");
}
}
7
UNIVERSIDAD DE LA REPÚBLICA | FACULTAD DE INGENIERÍA | INSTITUTO DE COMPUTACIÓN
3 Corriendo la aplicación creada en FIng
Esto se basa en el ejemplo “HelloWorld” presentado en el punto 2.
1- Compilar el Servlet “HelloWorld.java” según lo explicado en el punto 1.2.
2- Armar la siguiente estructura de directorios con los archivos indicados dentro del directorio
webapps:
3- Levantar el servidor Web Tomcat.
4- Abrir un browser e ir al Manager (“http://host_del_tomcat:puerto/manager/html”) con el
usuario “tprog” y password “pass”.
“host_del_tomcat” indica donde esta hosteado el Tomcat, generalmente va a ser “localhost”
pero en caso de problemas en la sala de maquinas de la Fing puede probar sustituirlo
“pcunixZZ.fing.edu.uy”, siendo “ZZ” el número de la máquina donde levantó el Tomcat.
5- Verificar que en la lista de aplicaciones aparezca la aplicación creada “HelloWorld”. En caso
contrario, en la sección Install (Desplegar) luego de la lista de aplicaciones, escribir
“HelloWorld” en el campo etiquetado “WAR or Directory URL” (“URL de WAR o
Directorio”) y hacer submit. De esta forma se instala la aplicación.
6- Abrir un browser e ir a la dirección “http://host_del_tomcat:puerto/HelloWorld”. Notar
que la página que aparece inicialmente es “inicio.html” como se indicó en el archivo de
deploy.
Observación 1: Es importante que SIEMPRE recuerden bajar los Tomcat que levanten en la FIng
antes de irse porque de otra manera quedará ejecutándose un proceso pesado inútilmente, que
solamente ocupará recursos y dificultará el trabajo del resto de los estudiantes.
Observación 2: Hay un conjunto de ejemplos de uso de Servlets y JSP’s en las aplicaciones que
vienen con la distribución de Tomcat bajo el nombre “examples”.
Observación 3: Cuidar el tamaño de los archivos de log generados en el directorio “logs” en la
raíz del Tomcat ya que pueden crecer rápidamente y consumir mucha cuota en disco.
4 Referencias
[1]
[2]
[3]
[4]
[5]
[6]
Apache Tomcat
http://tomcat.apache.org/
Tomcat – Class Loader HOW-TO
http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
Tomcat – Web Application Manager HOW-TO
http://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html
Tomcat – Server Configuration Reference
http://tomcat.apache.org/tomcat-7.0-doc/config/index.html
Tomcat – Server Configuration Reference – The Context Container
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html
Java Servlet 2.5 Specification
http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index.html
8