|
|
(37 revisiones intermedias por el mismo usuario no mostrado) |
Línea 1: |
Línea 1: |
− | ===Aplicaciones Web ===
| + | {{:Usuario:ManuelRomero/micursos/Tomcat/nav}} |
− | ;Definición de aplicación web
| + | <br> |
− | :Aplicación informática que se ejecuta en un entorno web
| + | |
− | :Modelo de ejecución Cliente /Servidor
| + | |
− | :Necesario un protocolo de comunicación .
| + | |
− | ;Elementos
| + | |
− | :'''''Cliente''''': navegador.
| + | |
− | :'''''Servidor''''': servidor web
| + | |
− | :'''''Comunicación''''': protocolo HTTP
| + | |
− | ===Servidor de aplicaciones===
| + | |
− | ;Definición de servidor de aplicaciones
| + | |
− | :Es un software que proporciona aplicaciones a los equipos o dispositivos cliente,
| + | |
− | :Es muy frecuente el uso de la red de Internet para realizarlo
| + | |
− | :Utiliza el protocolo '''''http'''''
| + | |
− | :Presenta dos diferencias con los servidores web (p.e. '''''apache''''')
| + | |
− | #Hace un extensivo del contenido dinámico
| + | |
− | #De manera muy frecuente realiza integración con bases de datos.
| + | |
− | ===Ventajas de servidor de aplicaciones===
| + | |
− | ;centralización y simplicidad en desarrollo de aplicaciones
| + | |
− | :Las aplicaciones se ensamblan desde bloques que el servidor provee
| + | |
− | ;Integridad de datos y de código
| + | |
− | :Al actulizar los datos que estás centralizados todos los clientes serán conscientes de ello
| + | |
− | ===Tomcat ===
| + | |
− | ;Definición
| + | |
− | :Tomcat es el servidor web (incluye el servidor Apache) que puede gestionar las solicitudes y respuestas http
| + | |
− | :También es servidor de aplicaciones del proyecto Yakarta contenedor de '''''Servlets y JSP'''''
| + | |
− | :Especialmente útil para porgramar aplicaciones web usando '''''java'''''
| + | |
− | :Incluye el compilador Jasper, que compila JSP covirtiéndolas en servlets.
| + | |
− | ===Servlet===
| + | |
− | ;Definición
| + | |
− | :Un servlet es un programa escrito en java
| + | |
− | :se ejecuta en un servidor
| + | |
− | :normalmente se utiliza para generar contenido html dinámico.
| + | |
− | *Ejemplo de servlet en java
| + | |
− | <source lang=java>
| + | |
− | Código de ejemplo de un Servlet que procesa una petición GET y devuelve una página web HTML sencilla:
| + | |
− | package org.pruebas;
| + | |
− |
| + | |
− | import java.io.IOException;
| + | |
− | import java.io.PrintWriter;
| + | |
− | import javax.servlet.ServletException;
| + | |
− | import javax.servlet.http.HttpServlet;
| + | |
− | import javax.servlet.http.HttpServletRequest;
| + | |
− | import javax.servlet.http.HttpServletResponse;
| + | |
− |
| + | |
− | public class HolaMundoServlet extends HttpServlet {
| + | |
− |
| + | |
− | /**
| + | |
− | * Servlet de ejemplo que procesa una petición GET
| + | |
− | * @param request
| + | |
− | * @param response
| + | |
− | * @throws ServletException
| + | |
− | * @throws IOException
| + | |
− | */
| + | |
− | @Override
| + | |
− | public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
| + | |
− | PrintWriter out = response.getWriter();
| + | |
− | out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
| + | |
− | out.println("<html>");
| + | |
− | out.println("<head><title>Ejemplo Hola Mundo</title></head>");
| + | |
− | out.println("<body>");
| + | |
− | out.println("<h1>¡Hola Mundo!</h1>");
| + | |
− | out.println("</body></html>");
| + | |
− | }
| + | |
− | }
| + | |
− | </source>
| + | |
− | *Al final del tema al estudiar el despliegue web y analizar el fichero web.xml del servidor de aplicaciones web o contendedor de servlet tomcat probaremos este fichero.
| + | |
− | ===JSP===
| + | |
− | ;Definición
| + | |
− | :JSP es un lenguaje de programación parecido al lenguaje ''php'' | + | |
− | :Es un código que ejecuta el servidor de aplicaciones web , al lado del servidor en el modelo cliente/servidor | + | |
− | :Se puede embeber junto con códgio html
| + | |
− | :El servidor interpretar JSP de la misma manera en la que interpreta PHP, generando una página html que entrega al claiente
| + | |
− | *Ejemplo sencillo de un jsp
| + | |
− | <source lang=html4strict>
| + | |
− | <html>
| + | |
− | <body>
| + | |
− | <% out.println("Hola mundo"); %>
| + | |
− | </body>
| + | |
− | </html>
| + | |
− | </source>
| + | |
− | | + | |
− | ===Tomcat contenedor de servlets===
| + | |
− | *'''''Tomcat''''' es un contenedor de servlets con un entorno JSP.
| + | |
− | *es un servidor de aplicaciones web pensado para desarrollos con java (no exclusivo para este entorno)
| + | |
− | ;Contenedor de servlets
| + | |
− | :es un shell de ejecución que maneja e invoca servlets por cuenta del usuario.
| + | |
− | | + | |
− | ===Clasificación de contenedores de servlets===
| + | |
− | ;Contenedores de servlets '''''stand-alone''''' (independientes):
| + | |
− | :Estos son una parte integral del servidor web.
| + | |
− | :Este es el caso en el que se usa un servidor web basado en Java,
| + | |
− | :Por defecto Tomcat trabaja en este modo, sin embargo, la mayoría de los servidores no están basados en Java.
| + | |
− | | + | |
− | ;Contenedores de servlets '''''dentro-de-proceso''''':
| + | |
− | :En esta configuración del servidor, el contenedor servlets es una combinación
| + | |
− | ::Un plugin para el servidor web
| + | |
− | :: y una implementación de contenedor Java.
| + | |
− | :El plugin del servidor web abre una JVM (Máquina Virtual Java)
| + | |
− | :dentro del espacio de direcciones del servidor web
| + | |
− | :permite que el contenedor Java se ejecute en él.
| + | |
− | | + | |
− | :En el caso de que una petición debiera ejecutar un servlet, el plugin toma el control sobre la petición y lo pasa al contenedor Java (usando JNI).
| + | |
− | :Un contenedor de este tipo es adecuado para servidores multithread de un sólo proceso
| + | |
− | :Además este tipo proporciona un buen rendimiento pero está limitado en escalabilidad.
| + | |
− | | + | |
− | ;Contenedores de servlets '''''fuera-de-proceso''''':
| + | |
− | :En este caso la combinación va a ser:
| + | |
− | ::plugin para el servidor web
| + | |
− | ::y una implementación de contenedor Java
| + | |
− | :'''''Este se ejecuta en una JVM fuera del servidor web.'''''
| + | |
− | :El plugin del servidor web y el JVM del contenedor Java se comunican
| + | |
− | :para ello usan algún mecanismo IPC (normalmente sockets TCP/IP).
| + | |
− | :Si una cierta petición tuviese que ejecutar un servlets, el plugin toma el control sobre la petición y lo pasa al contenedor Java (usando IPCs).
| + | |
− | :El tiempo de respuesta en este tipo de contenedores no es tan bueno como el anterior
| + | |
− | :A su favor, obtiene mejores rendimientos en otras cosas (escalabilidad, estabilidad, etc.)
| + | |
− | ===Instalación de Tomcat===
| + | |
− | *Necesitamos tener instalado JDK
| + | |
− | *buscamos el paquete java que más nos interese
| + | |
− | aptitude search "?provides(java-runtime)"
| + | |
− | *instalamos java-runtime
| + | |
− | apt-get install default-jre
| + | |
− | *actualizamos el PATH del sistema en nuestro profile
| + | |
− | *Indicando donde se ubican los binarios que acabamos de instalar
| + | |
− | JAVA_HOME=/usr/lib/jvm/java6openjdk/ jre/
| + | |
− | PATH=$PATH:$JAVA_HOME/bin
| + | |
− | export PATH JAVA_HOME
| + | |
− | *actualizamos las variables de entorno
| + | |
− | $ source /etc/profile
| + | |
− | o bien
| + | |
− | $ . /etc/profile
| + | |
− | *Vamos a la web de tomcat y vemos la última version
| + | |
− | http://apache.rediris.es/tomcat/
| + | |
− | [[Imagen:webTomcat.png]]
| + | |
− | *Tomamos la última version ''''' v7.0.32''''' y la descargamos
| + | |
− | $ wget http://apache.rediris.es/tomcat/tomcat-7/v7.0.32/src/apache-tomcat-7.0.32-src.tar.gz
| + | |
− | | + | |
− | *Descomprimimos y desenpaquetamos el fichero
| + | |
− | $ tar xvzf apache-tomcat-7.0.32-src.tar.gz
| + | |
− | *Movemos a una carpeta de destino
| + | |
− | $ mv -fv apache-tomcat-7.0.32-src /usr/local
| + | |
− | *Creamos un enlace para referenciar más comodamente el directorio
| + | |
− | $ ln -s /usr/local/apache-tomcat-7.0.32-src/ /usr/local/tomcat
| + | |
− | *De este modo tenemos acceso al directorio de tomcat de forma más sencilla
| + | |
− | | + | |
− | ===Arranque del sistema===
| + | |
− | *Un script llamado '''''catalina''''' gestiona el servicio de '''''Tomcat'''''
| + | |
− | *''''''catalina.hs''''' debe recibir en la invocación parámetros start|stop|restart para actuar.
| + | |
− | *También disponemos de un shell que invoca explícitamente a este fichero '''''startup.sh'''''
| + | |
− | *verificamos el funcionamiento escribiendo en la url
| + | |
− | http://127.0.0.1:8080
| + | |
− | *Debe aparecernos una página como la que sigue
| + | |
− | [[Imagen:paginaTomcat.png]]
| + | |
− | ===Iniciando Tomcat===
| + | |
− | *Por defecto '''''tomcat'''''
| + | |
− | #puerto '''''8080'''''
| + | |
− | #directorio ./tomcat/webapps/ROOT
| + | |
− | *Por defecto '''''apache'''''
| + | |
− | #puerto '''''80'''''
| + | |
− | #directorio ./var/www o ./apache/htdocs ''según como se haya instalado''
| + | |
− | *Vamos a hacer que apache escuche todo
| + | |
− | *Lo configuramos como proxy
| + | |
− | *Apache derivará lo que considere a tomcat
| + | |
− | *aplicamos el principio de escalabilidad
| + | |
− | **Si nuestras necesidades crecen ponemos más tomcat en el sistema
| + | |
− | ===Fichero de configuración===
| + | |
− | '''''/usr/local/tomcat/conf/server.xml'''''
| + | |
− | *Al ser un fichero '''''xml''''' se configura por ''elementos'' y ''atributos''
| + | |
− | #localizamos el elemenot '''''host'''''
| + | |
− | #modificamos el atributo '''''appBase'''''
| + | |
− | <source lang=xml> | + | |
− | <Host name="localhost" appBase="/var/www"
| + | |
− | </source>
| + | |
− | ===Haciendo a apache proxy===
| + | |
− | *Cargaremos los módulos para hacer que sea apache un proxy
| + | |
− | *para ello usaremos el comando '''''a2enmod'''''
| + | |
− | *Este comando sirve para cargar módulos nuevos
| + | |
− | *Apache se gestiona por módulos
| + | |
− | *La lista de módulos que necesitamos son
| + | |
− | ; proxy, proxyf_ajp, proxy_balancer
| + | |
− | *A continuación rearrancamos el sistema
| + | |
− | $a2enmod proxy
| + | |
− | $a2enmod proxyf_ajp
| + | |
− | $a2enmod proxy_balancer
| + | |
− | $ /etc/init.d/apache2 restart
| + | |
− | ===Protocolo ajp===
| + | |
− | *En lugar de usar http para comunicar apache-tomcat usamos ajp
| + | |
− | *Es un protocolo interno, veloz y que usa conexiones '''''TCP persistentes'''''
| + | |
− | ===Configuración de '''''virtualhost'''''===
| + | |
− | *Debemos modificar el fichero de configuración de virtualhost
| + | |
− | *Editamos /etc/apache2/sites-enabled/000-default
| + | |
− | *Añadimos los siguientes elementos
| + | |
− | <source lang=xml>
| + | |
− | <Proxy balancer://tomcat_cluster>
| + | |
− | Order allow,deny
| + | |
− | Allow from all
| + | |
− | BalancerMember ajp://localhost:8009
| + | |
− | </Proxy>
| + | |
− | ProxyPreserveHost On
| + | |
− | ProxyPass /phpmyadmin/ !
| + | |
− | ProxyPass / balancer://tomcat_cluster/
| + | |
− | ProxyPassReverse / balancer://tomcat_cluster/
| + | |
− | </source>
| + | |
− | ===Conceptos de los parámetros===
| + | |
− | ;Proxy balancer://tomcat_cluster
| + | |
− | :definimos el cluster con mobmre '''''tomcat_cluster'''''
| + | |
− | ;BalancerMember jap://localhost:8009
| + | |
− | :Se define un miembre a '''''tomcat_cluster'''''
| + | |
− | ::protocolo '''''ajp'''''
| + | |
− | ::IP '''''localhost'''''' o '''''127.0.0.1'''''
| + | |
− | ::Puerto '''''8009''''' que es el que por defecto usa ''tomcat''
| + | |
− | ;ProxyPass / balancer://tomcat_cluster/:
| + | |
− | ::"/" y todo lo que cuelgue de ella, sea pasado al cluster del tomcat para que lo procese él.
| + | |
− | | + | |
− | ;ProxyPreserveHost On
| + | |
− | : Mantiene la cabecera http host original, en vez de reescribirla.
| + | |
− | | + | |
− | * "DocumentRoot" y "<Directory /var/www/>" para que apunten a /var/www/ROOT
| + | |