Jetty

Jetty es un servidor HTTP 100% basado en Java y un contenedor de Servlets escrito en Java. Jetty se publica como un proyecto de software libre bajo la licencia Apache 2.0. Jetty es utilizado por otros proyectos, como por ejemplo los servidores de aplicación JBoss y Apache Geronimo; y por el plug-in Google Web Toolkit para Eclipse. -Wikipedia

  1. Verifica la instalación de JAVA (JRE/JDK): which java, which javac, java -version y javac -version.

  2. Descarga el archivo comprimido en formato zip encontrado en http://www.eclipse.org/jetty/download.html.

    En este caso se ha descargado el archivo jetty-distribution-9.4.12.v20180830.zip en el directorio $HOME/Downloads.

  3. Crea el directorio $HOME/www/jetty01 y accede a él:

     alumno@servidor:~$ mkdir -p $HOME/www/jetty01
     alumno@servidor:~$ cd $HOME/www/jetty01
    
  4. Descomprime el archivo jetty-distribution-9.4.12.v20180830.zip, obteniendo de él el directorio jetty-distribution-9.4.12.v20180830/ y accede a dicho directorio recien creado:

     alumno@servidor:~/www/jetty01$ unzip -o $HOME/Downloads/jetty-distribution-9.4.12.v20180830.zip
     alumno@servidor:~/www/jetty01$ cd jetty-distribution-9.4.12.v20180830
    
  5. Crea el directorio base y accede a él:

     alumno@servidor:~/www/jetty01/jetty-distribution-9.4.12.v20180830$ mkdir base
     alumno@servidor:~/www/jetty01/jetty-distribution-9.4.12.v20180830$ cd base
    
  6. Ejecuta el siguiente comando para establecer el directorio base como un directorio separado de los archivos ejecutables y de configuración propios de Jetty:

     alumno@servidor:~/www/jetty01/jetty-distribution-9.4.12.v20180830/base$ java -jar ../start.jar  --create-startd --add-to-start=http,deploy
     MKDIR : ${jetty.base}/start.d
     INFO  : webapp          transitively enabled, ini template available with --add-to-start=webapp
     INFO  : server          transitively enabled, ini template available with --add-to-start=server
     INFO  : security        transitively enabled
     INFO  : servlet         transitively enabled
     INFO  : http            initialized in ${jetty.base}/start.d/http.ini
     INFO  : deploy          initialized in ${jetty.base}/start.d/deploy.ini
     MKDIR : ${jetty.base}/webapps
     INFO  : Base directory was modified
    

    Al terminar el directorio $HOME/www/jetty01/jetty-distribution-9.4.12.v20180830/base tendrá la siguiente estructura:

     alumno@servidor:~/www/jetty01/jetty-distribution-9.4.12.v20180830/base$ pwd && tree
     /home/alumno/www/jetty01/jetty-distribution-9.4.12.v20180830/base
     .
     ├── start.d
     │   ├── deploy.ini
     │   └── http.ini
     └── webapps
     2 directories, 2 files
    
  7. Crea el directorio webapps/ROOT que será el directorio ráiz:

     alumno@servidor:~/www/jetty01/jetty-distribution-9.4.12.v20180830/base$ mkdir webapps/ROOT
    
  8. Ejecuta a Jetty indicando el puerto TCP a usar:

     alumno@servidor:~/www/jetty01/jetty-distribution-9.4.12.v20180830/base$ java -jar ../start.jar jetty.http.port=1234
     2018-01-28 12:24:29.975:INFO::main: Logging initialized @669ms to org.eclipse.jetty.util.log.StdErrLog
     ...
     ...
     ...
     2018-01-28 12:24:30.747:INFO:oejs.Server:main: Started @1441ms
    

    Observarás que la terminal se queda bloqueada mientras Jetty esté en ejecución.

  9. Verifica la ejecución de Jetty, en otra terminal:

    alumno@servidor:~$  netstat -plutn
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
     tcp        0      0 0.0.0.0:1234            0.0.0.0:*               LISTEN      1180/java
    

    En este caso Jetty (el proceso java) está atendiendo (LISTEN) conexiones en todas las interfaces de red (0.0.0.0) en el puerto TCP 1234.

Para realizar una petición a Jetty haremos uso de un navegador web, simplemente visita la dirección http://127.0.0.1:1234 o bien http://localhost:1234.

Configuración de Jetty para el despliegue de contenido estático

Para exponer recursos estáticos dentro de la aplicación web ROOT en Jetty es necesario crear un descriptor de despliegue (archivo en formato XML). Crea el archivo webapps/ROOT.xml con el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
  <Set name="contextPath">/</Set>
  <Set name="handler">
    <New class="org.eclipse.jetty.server.handler.ResourceHandler">
      <Set name="welcomeFiles">
        <Array type="String">
          <Item>index.html</Item>
        </Array>
      </Set>
      <Set name="resourceBase">/home/alumno/www/jetty01/jetty-distribution-9.4.12.v20180830/base/webapps/ROOT</Set>
      <Set name="directoriesListed">true</Set>
    </New>
  </Set>
</Configure>

Al terminar la estructura del directorio base será:

alumno@servidor:~/www/jetty01/jetty-distribution-9.4.12.v20180830/base$ pwd && tree
/home/alumno/www/jetty01/jetty-distribution-9.4.12.v20180830/base
.
├── start.d
│   ├── deploy.ini
│   └── http.ini
└── webapps
    ├── ROOT
    └── ROOT.xml
3 directories, 4 files

NOTAS:

  • El atributo welcomeFiles establece el archivo por default que será buscado y entregado (en el disco duro) por Jetty a los clientes: index.html.
  • El atributo resourceBase establece el directorio ráiz para la busqueda y entrega de recursos estáticos por parte de Jetty.

Reinicia a Jetty y podrás crear-depositar contenido estático en el directorio base/webapps/ROOT.

En las lecturas con respecto al protocolo HTTP encontrarás términos como GET, POST, Header o Cabecera, User-Agent, etc. Para que dichos términos tengan un sentido más práctico, mientras Jetty está en ejecución, en Firefox pulsa el juego de teclas Ctrl+Shift+Q, lo anterior te abrirá una ventana incrustada en Firefox, accede a Jetty y observa la información otorgada por Web Developer Tools en su pestaña Red o Network.

Lecturas