Prácticas
Para el desarrollo de las siguientes prácticas ya debes de contar con la instalación y configuración de Apache Tomcat Eclipse. Deten la ejecución de Apache Tomcat mediante Eclipse antes de proceder.
Práctica 01
El objetivo de esta práctica es crear un proyecto web dinámico en Eclipse con contenido estático (HTML, CSS e imágenes) y desplegarlo (deployment) en Apache Tomcat.
En Eclipse accede a File > New > Dynamic Web Project, lo que abrirá la ventana New Dynamic Web Project.
En la ventana New Dynamic Web Project rellena el campo Project (nombre del proyecto) con el valor jee01.
Verifica que en Location el valor establecido sea un directorio dentro de tu Workspace configurado previamente:
$HOME/www/eclipse/jee
.Verifica que en Target runtime la opción seleccionada sea el servidor de Apache Tomcat configurado previamente: Apache Tomcat 8.5.34 y da dos clicks al botón Next, lo que te llevará a la ventana de Web Module.
En la ventana de Web Module verifica que el campo Context root (contexto ráiz) tenga por valor el nombre del proyecto y que el campo Content directory (directorio de contenido estático) sea WebContent. Finalmente da click al botón de Finish.
NOTA: la palabra context es usado en otras ocasiones como sinónimo de proyecto, módulo o aplicación web.
En el directorio del proyecto contarás con la siguiente estructura:
alumno@servidor:~ $ tree $HOME/www/eclipse/jee/jee01 . ├── build │ └── classes ├── src └── WebContent ├── META-INF │ └── MANIFEST.MF └── WEB-INF └── lib 7 directories, 1 files
Accede al directorio del proyecto y crea los directorios
WebContent/assets/css
yWebContent/assets/img
:alumno@servidor:~ $ cd $HOME/www/eclipse/jee/jee01 alumno@servidor:~/www/eclipse/jee/jee01 $ mkdir -p WebContent/assets/css WebContent/assets/img
NOTA: el objetivo del directorio
assets
es mantener todos los recursos estáticos necesarios (o bienes) para el proyecto: archivos de CSS, imágenes, vídeos, documentos de ofimatica (Word, Excel, PDF), archivos comprimidos (ZIP, RAR, TAR, etc), entre muchos otros.Descarga a Normalize.css y crea el archivo vácio
WebContent/assets/css/main.css
:alumno@servidor:~/www/eclipse/jee/jee01 $ wget \ https://raw.githubusercontent.com/necolas/normalize.css/master/normalize.css -P WebContent/assets/css alumno@servidor:~/www/eclipse/jee/jee01 $ touch WebContent/assets/css/main.css
Descarga la imágen de patrón disponible en https://www.toptal.com/designers/subtlepatterns/sakura/ y el favicon disponible en https://www.iconfinder.com/icons/98329/java_icon#size=128
alumno@servidor:~/www/eclipse/jee/jee01 $ wget \ https://www.toptal.com/designers/subtlepatterns/patterns/sakura.png -P WebContent/assets/img alumno@servidor:~/www/eclipse/jee/jee01 $ wget \ https://www.iconfinder.com/icons/98329/download/png/128 -O WebContent/assets/img/favicon.png
En Eclipse accede a Window > Show View > Project Explorer, en la pestaña resaltada da click derecho sobre el nodo WebContent y selecciona New > HTML file lo que abrirá la ventana New HTML File.
En la ventana New HTML File rellena el campo File name con el valor
index.html
y da click al botón Finish. Eclipse abrirá inmediatamente el archivo recien creado.Modifica el contenido del archivo
index.html
con lo siguiente:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 01</title> <link rel="icon" href="assets/img/favicon.png"> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <!-- CONTENIDO --> <!-- /CONTENIDO --> </body> </html>
En Eclipse accede a Window > Show View > Project Explorer, en la pestaña resaltada da click derecho sobre el nodo ráiz jee01 y selecciona Refresh.
IMPORTANTE: cuando agregas/modificas algún archivo al proyecto fuera de Eclipse es necesario refrescar la vista Project Explorer.
En Eclipse accede a Window > Show View > Project Explorer, en la pestaña resaltada da dos clicks izquierdos continuos sobre el nodo WebContent > assets > css > main.css lo que abrirá inmediatamente el archivo.
Modifica el contenido del archivo
main.css
con lo siguiente:body { background-image: url("../img/sakura.png"); }
Al terminal en el directorio del proyecto contarás con la siguiente estructura:
alumno@servidor:~ $ tree $HOME/www/eclipse/jee/jee01 /home/alumno/www/eclipse/jee/jee01 . ├── WebContent │ ├── META-INF │ │ └── MANIFEST.MF │ ├── WEB-INF │ │ └── lib │ ├── assets │ │ ├── css │ │ │ ├── main.css │ │ │ └── normalize.css │ │ └── img │ │ ├── favicon.png │ │ └── sakura.png │ └── index.html ├── build │ └── classes └── src 10 directories, 6 files
Deployment
El despliegue (deployment) de una aplicación se entiende como su instalación dentro de un entorno de ejecución (runtime environment) ó contenedor de aplicaciones (application container) ó servidor de aplicaciones (application server). Apache Tomcat es un entorno de ejecución para Java Servlets y JavaServer Pages.
Para realizar el despliegue del proyecto realiza lo siguiente:
En Eclipse accede a Window > Show View > Project Explorer, en la pestaña resaltada da click derecho sobre el nodo ráiz jee01 y selecciona Run As > Run on Server. Lo anterior abrirá la ventana Run On Server.
En la ventana Run On Server selecciona la opción Choose an existing server, selecciona el servidor de Apache Tomcat previamente configurado, selecciona la opción Always use this server when running this project (para que Eclipse en los proximos despliegues use este mismo servidor de Apache Tomcat) y da click al botón Finish.
IMPORTANTE: no debe existir algún proceso esperando conexiones en el puerto TCP 8080 (default en Apache Tomcat) ya que de ser así podrías obtener un error como el siguiente:
Port 8080 required by apache-tomcat-8.5.34 is already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).
Al terminar de llevar a cabo el despliegue accede con un navegador web a http://localhost:8080/jee01
OBSERVACIONES:
- jee01 es el proyecto en Eclipse.
$HOME/www/eclipse/jee/jee01
es el directorio del proyecto, dentro del workspace de Eclipse.- jee01 es un contexto en Apache Tomcat.
$HOME/www/eclipse/tomcat/apache-tomcat-8.5.34/wtpwebapps/jee01
es el directorio ráiz del contexto, dentro del directorio donde se encuentra instalado Apache Tomcat.- Otra forma de ver el despliegue de un proyecto es como la sincronización del directorio del proyecto con el directorio ráiz del contexto.
Si accedes al directorio ráiz del contexto encontrarás una estructura similar al directorio del proyecto en Eclipse:
alumno@servidor:~/www/eclipse/tomcat/apache-tomcat-8.5.34/wtpwebapps/jee01 $ tree
.
├── META-INF
│ └── MANIFEST.MF
├── WEB-INF
│ ├── classes
│ └── lib
├── assets
│ ├── css
│ │ ├── main.css
│ │ └── normalize.css
│ └── img
│ ├── favicon.png
│ └── sakura.png
└── index.html
7 directories, 6 files
Práctica 02
El objetivo de esta práctica es crear Java Servlets que regresen al cliente (navegador web) un documento HTML generado de forma dinámica en el lado del servidor (Apache Tomcat) mediante el lenguaje de programación Java.
A su vez esta práctica consiste en plantear el procesamiento de un formulario HTML.
Los formularios HTML son uno de los puntos principales de interacción entre un usuario y un sitio web o aplicación. Ellos permiten a los usuarios enviar información a un sitio web. La mayor parte de las veces se envía información a un servidor web, pero la pagina web también puede interceptarla para usarla por su lado. Un formulario HTML está hecho de uno o más widgets. Estos widgets puede ser campos de texto (de una linea o multilínea), cajas de selección, botones, checkboxes, o botones de radio. La mayoría del tiempo, estos widgets están junto a un label que describe su propósito. - Mi primer formulario HTML en MDN Web Docs
Realiza los pasos del 1 al 7 expuestos en la Práctica 01 pero tomando en cuenta que ahora el proyecto o contexto será nombrado jee02.
Contempla el despliegue del proyecto y su ubicación en http://localhost:8080/jee02.
Crea el archivo
WebContent/index.html
con el siguiente contenido:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 02</title> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <div class="contenedor"> <div class="cabecera"> <h1>Inicio</h1> </div> <div class="menu"> <ul> <li><a href=".">Inicio</a></li> <li><a href="ServletHtmlDinamico">ServletHtmlDinamico</a></li> <li><a href="ServletHtmlFormulario">ServletHtmlFormulario</a></li> </ul> </div> <div class="cuerpo"></div> </div> </body> </html>
Servlets
A continuación se dan los pasos para crear dos servlets:
- ServletHtmlDinamico: ante solicitudes GET de HTTP regresa un documento HTML al cliente con contenido dinámico.
- ServletHtmlFormulario: ante solicitudes GET de HTTP regresa un documento HTML al cliente con un formulario de HTML vácio, mientras que ante solicitudes POST de HTTP regresa un documento HTML al cliente con lo ingresado en el formulario de HTML.
Los siguientes pasos son llevados a cabo dentro de la vista Project Explorer en Eclipse:
Accede a Window > Show View > Project Explorer, en la pestaña resaltada da click derecho sobre el nodo jee02 > Java Resources > src y selecciona New > Servlet lo que abrirá la ventana Create Servlet.
En la ventana Create Servlet, rellena los siguientes campos con los datos indicados:
Java package:
io.bitbucket.NombreDeUsuario.jee02.servlets
NOTA: sustituye
NombreDeUsuario
con tu nombre de usuario en Bitbucket.Class name:
ServletHtmlDinamico
Da click al botón Finish.
Eclipse abrirá inmediatamente el archivo jee02 > Java Resources > src > io.bitbucket.NombreDeUsuario.jee02.servlets > ServletHtmlDinamico, de acuerdo a la vista Project Explorer.
Modifica el contenido del archivo jee02 > Java Resources > src > io.bitbucket.NombreDeUsuario.jee02.servlets > ServletHtmlDinamico con lo siguiente: ServletHtmlDinamico.java.txt.
OBSERVACIÓN: sustituye
NombreDeUsuario
con tu nombre de usuario en Bitbucket.Una vez más, en Eclipse accede a Window > Show View > Project Explorer, en la pestaña resaltada da click derecho sobre el nodo Deployment Descriptor: jee02 > Servlets y selecciona New > Servlet lo que abrirá la ventana Create Servlet.
En la ventana Create Servlet, rellena los siguientes campos con los datos indicados:
Java package:
io.bitbucket.NombreDeUsuario.jee02.servlets
NOTA: sustituye
NombreDeUsuario
con tu nombre de usuario en Bitbucket.Class name:
ServletHtmlFormulario
Da click al botón Finish.
Eclipse abrirá inmediatamente el archivo jee02 > Java Resources > src > io.bitbucket.NombreDeUsuario.jee02.servlets > ServletHtmlFormulario, de acuerdo a la vista Project Explorer.
Modifica el contenido del archivo jee02 > Java Resources > src > io.bitbucket.NombreDeUsuario.jee02.servlets > ServletHtmlFormulario con lo siguiente: ServletHtmlFormulario.java.txt.
OBSERVACIÓN: sustituye
NombreDeUsuario
con tu nombre de usuario en Bitbucket.Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee02/, en caso contrario realiza su despliegue e ingresa a él.
Códificación UTF-8 en solicitudes GET y POST
Para poder decodificar (o interpretar) los parámetros enviados por el cliente en la codificación UTF-8 se lleva a cabo lo siguiente en Apache Tomcat, una sola vez:
Accede en Eclipse a Window > Show View > Project Explorer, en la pestaña resaltada abre el archivo Servers > apache-tomcat-8.5.34-config > web.xml y agrega lo siguiente al final, una línea antes del cierre del elemento
<web-app>
:<filter> <filter-name>setCharacterEncodingFilter</filter-name> <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>setCharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Reinicia a Apache Tomcat y realiza el despliegue de tu proyecto.
Fuente: https://wiki.apache.org/tomcat/FAQ/CharacterEncoding
IMPORTANTE:
- Uno debe reconocer que elementos y atributos forman parte de HTML4/XHTML y cuales de HTML5.
- Recordar que aún cuando HTML5 ofrece nuevos elementos o atributos para un formulario HTML, una aplicación web atiende solicitudes por parte de un cliente (navegador web) el cual posiblemente no ofresca el soporte de estos nuevos elementos o atributos.
- Los datos capturados por el usuario en un formulario son secuencia de caracteres.
- Observa los registros en la pestaña Network o Red en las herramientas de desarrollador de Firefox y por cada una de ellas la información encontrada en la pestaña Parameters o Parámetros.
Validación de un documento HTML
Puedes hacer uso del complemento html-validator para el navegador web Firefox y determinar si el código HTML generado en el servidor es válido.
Dar formato al código HTML
Puedes notar que el código de HTML entregado por el Java Servlet no cuenta con una estructura que facilite su lectura, puedes hacer uso de la pestaña Inspector en las herramientas de desarrollo de Firefox para resolver esto.
Lecturas
- Envío de datos de un formulario a un servidor: Sea paranoico: Nunca confíe en los usuarios.
- Introducción a XHTML - Formularios.
- Formularios en HTML5.
- Elementos HTML para formularios
- Estilizando formularios HTML
Videos
- Firefox y sus herramientas de desarrollo web
- Inspector HTML de Firefox
- Herramientas de desarrollador de Firefox
Práctica 03
El objetivo de esta práctica es trabajar con Cookies en Java Servlets
y poder almacenar información en el cliente (navegador web). Uso de la clase javax.servlet.http.Cookie
.
Realiza los pasos del 1 al 7 expuestos en la Práctica 01 pero tomando en cuenta que ahora el proyecto o contexto será nombrado jee03.
Contempla el despliegue del proyecto y su ubicación en http://localhost:8080/jee03.
Crea el archivo
WebContent/index.html
con el siguiente contenido:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 03</title> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <div class="contenedor"> <div class="cabecera"> <h1>Inicio</h1> </div> <div class="menu"> <ul> <li><a href=".">Inicio</a></li> <li><a href="creacion-y-entrega-de-cookies">ServletCreacionEntragaCookies</a></li> <li><a href="lectura-de-cookies">ServletLecturaCookies</a></li> <li><a href="modificacion-de-cookies">ServletModificacionCookies</a></li> <li><a href="borrado-de-cookies">ServletBorradoCookies</a></li> </ul> </div> <div class="cuerpo"></div> </div> </body> </html>
Cookies
Crea lo siguiente en Eclipse:
Java package:
io.bitbucket.NombreDeUsuario.jee03.servlets
.- Servlet: ServletBorradoCookies.java.txt
- Servlet: ServletCreacionEntregaCookies.java.txt
- Servlet: ServletLecturaCookies.java.txt
- Servlet: ServletModificacionCookies.java.txt
NOTA: sustituye NombreDeUsuario
con tu nombre de usuario en Bitbucket.
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee03/, en caso contrario realiza su despliegue e ingresa a él.
Administración de Cookies
Puedes hacer uso de los complementos Cookie Manager, Cookie Quick Manager, Cookie Editor o Cookiebro para el navegador web Firefox y poder crear, editar, o borrar cookies.
Práctica 04
El objetivo de esta práctica es trabajar con Sesión (Sesión de HTTP)
en Java Servlets y poder rastrear al cliente (navegador web) en cuanto a las solicitudes realizadas mediante un
Token de sesión HTTP (Cookie JSESSIONID).
Uso de la interfaz javax.servlet.http.HttpSession
.
Realiza los pasos del 1 al 7 expuestos en la Práctica 01 pero tomando en cuenta que ahora el proyecto o contexto será nombrado jee04.
Contempla el despliegue del proyecto y su ubicación en http://localhost:8080/jee04.
Crea el archivo
WebContent/index.html
con el siguiente contenido:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 04</title> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <div class="contenedor"> <div class="cabecera"> <h1>Inicio</h1> </div> <div class="menu"> <ul> <li><a href=".">Inicio</a></li> <li><a href="crear-o-iniciar-sesion">ServletCrearIniciarSesion</a></li> <li><a href="leer-atributos-de-sesion">ServletLeerAtributosSesion</a></li> <li><a href="modificar-atributos-de-sesion">ServletModificarAtributosSesion</a></li> <li><a href="invalidar-o-cerrar-sesion">ServletInvalidarCerrarSesion</a></li> </ul> </div> <div class="cuerpo"></div> </div> </body> </html>
Session
Crea lo siguiente en Eclipse:
Java package:
io.bitbucket.NombreDeUsuario.jee04.servlets
.- Servlet: ServletCrearIniciarSesion.java.txt
- Servlet: ServletInvalidarCerrarSesion.java.txt
- Servlet: ServletLeerAtributosSesion.java.txt
- Servlet: ServletModificarAtributosSesion.java.txt
NOTA: sustituye NombreDeUsuario
con tu nombre de usuario en Bitbucket.
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee04/, en caso contrario realiza su despliegue e ingresa a él.
Mantener activa una sesión (session keep alive)
Una sesión suele tener un tiempo de vida máximo, 15 mins. por ejemplo, por lo que si el cliente (navegador web) no realiza alguna solicitud en dicho tiempo la sesión es invalidada o cerrada por el servidor.
Puedes hacer uso de complementos como mSession Keeper o Session Alive para forzar a que el navegador web Firefox mantenga la sesión abierta haciendo solicitudes al servidor en segundo plano y de manera automática.
Práctica 05
El objetivo de esta práctica consiste en crear un conjunto de clases de Java que permitan generar distintos formatos de texto plano para la serialización de datos como respuesta de HTTP:
- CSV (Comma-Separated Values): es un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas y las filas por saltos de línea.
- JSON (JavaScript Object Notation): es un formato de texto ligero para el intercambio de datos.
- XML (eXtensible Markup Language): es un meta-lenguaje que permite definir lenguajes de marcas, utilizado para almacenar datos en forma legible.
Para lo anterior se define un servlet quien encamina la solicitud a una clase para que esta última se encargue de generar el documento en el formato solicitado:
Ejemplos:
/serializacion-de-datos?formato=csv
/serializacion-de-datos?formato=xml
/serializacion-de-datos?formato=json
Los datos son mantenidos en memoria en una colección y obtenidos para generar una representación de los mismos mediante el formato solicitado.
Realiza los pasos del 1 al 7 expuestos en la Práctica 01 pero tomando en cuenta que ahora el proyecto o contexto será nombrado jee05.
Contempla el despliegue del proyecto y su ubicación en http://localhost:8080/jee05.
Crea el archivo
WebContent/index.html
con el siguiente contenido:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 05</title> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <div class="contenedor"> <div class="cabecera"> <h1>Inicio</h1> </div> <div class="menu"> <ul> <li><a href=".">Inicio</a></li> <li><a href="serializacion-de-datos?formato=csv">serializacion-de-datos?formato=csv</a></li> <li><a href="serializacion-de-datos?formato=xml">serializacion-de-datos?formato=xml</a></li> <li><a href="serializacion-de-datos?formato=json">serializacion-de-datos?formato=json</a></li> </ul> </div> <div class="cuerpo"></div> </div> </body> </html>
Serialización
Crea lo siguiente en Eclipse:
Java package:
io.bitbucket.NombreDeUsuario.jee05.servlets
Java package:
io.bitbucket.NombreDeUsuario.jee05.generadores
- Clase: DocumentoCsv.java.txt
- Clase: DocumentoJson.java.txt
- Clase: DocumentoXml.java.txt
- Clase: DocumentoHtml.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee05.colecciones
- Clase: Libros.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee05.pojos
- Clase: Libro.java.txt
NOTA: sustituye NombreDeUsuario
con tu nombre de usuario en Bitbucket.
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee05/, en caso contrario realiza su despliegue e ingresa a él.
Práctica 06
El objetivo de esta práctica es integrar librerías externas a un proyecto web. Las librerías a integrar serán:
- Apache POI: para la generación de documentos Hojas de Cálculo (Microsoft Excel, Apache OpenOffice Calc, LibreOffice Calc, etc)
- iText 7 Community: para la generación de documentos en el Formato de Documento Portátil (PDF) (Adobe Acrobat Reader, Okular, Evince, etc).
- Simple Logging Facade for Java (SLF4J): como dependencia de iText 7 Community.
Las anteriores librerías son solo a modo de ejemplo, existen otras tantas que ofrecen una funcionalidad similar: OpenPDF, Apache PDFBox, PDF Clown, JXLS o JExcelAPI (Java Excel API).
Realiza los pasos del 1 al 7 expuestos en la Práctica 01 pero tomando en cuenta que ahora el proyecto o contexto será nombrado jee06.
Contempla el despliegue del proyecto y su ubicación en http://localhost:8080/jee06.
Crea el archivo
WebContent/index.html
con el siguiente contenido:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 06</title> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <div class="contenedor"> <div class="cabecera"> <h1>Inicio</h1> </div> <div class="menu"> <ul> <li><a href=".">Inicio</a></li> <li><a href="impresion-de-documento?formato=xls">impresion-de-documento?formato=xls</a></li> <li><a href="impresion-de-documento?formato=xlsx">impresion-de-documento?formato=xlsx</a></li> <li><a href="impresion-de-documento?formato=pdf">impresion-de-documento?formato=pdf</a></li> </ul> </div> <div class="cuerpo"></div> </div> </body> </html>
Librerías externas
Crea el directorio $HOME/Downloads/jars/repositorio
para mantener un repositorio de librerías de Java
(archivos con extensión JAR).
Apache POI:
Accede a https://poi.apache.org/download.html y descarga el archivo con nombre
poi-bin-*.tar.gz
en$HOME/Downloads/jars/repositorio/apache-poi
.En este caso se ha descargado el archivo
poi-bin-3.17-20170915.tar.gz
.Descomprime el contenido del archivo descargado en el directorio donde se encuentra.
Obtendrás el directorio
$HOME/Downloads/jars/repositorio/apache-poi/poi-3.17
.En Eclipse accede a Window Preferences > Java > User Libraries, da clic al botón New, en el campo User library name ingresa poi-3.17 y da clic al botón OK.
En la ventana de User Libraries selecciona poi-3.17, da clic al botón Add External JARs..., dirijete al directorio
$HOME/Downloads/jars/repositorio/apache-poi/poi-3.17
y selecciona/agrega los archivos:poi-*.jar
poi-excelant-*.jar
poi-ooxml-*.jar
poi-ooxml-schemas-*.jar
poi-scratchpad-*.jar
lib/commons-codec-*.jar
lib/commons-collections*.jar
lib/commons-logging-*.jar
ooxml-lib/curvesapi-*.jar
ooxml-lib/xmlbeans-*.jar
iText 7 Community:
Accede a https://github.com/itext/itext7/releases y descarga el archivo con nombre
itext7-*.zip
en$HOME/Downloads/jars/repositorio/itext7
.En este caso se ha descargado el archivo
itext7-7.0.7.zip
.Descomprime el contenido del archivo descargado en el directorio
itext7-7.0.7
(crealo) donde se encuentra.Obtendrás el directorio
$HOME/Downloads/jars/repositorio/itext7/itext7-7.0.7
En Eclipse accede a Window Preferences > Java > User Libraries, da clic al botón New, en el campo User library name ingresa itext7-7.0.7 y da clic al botón OK.
En la ventana de User Libraries selecciona itext7-7.0.7, da clic al botón Add External JARs..., dirijete al directorio
$HOME/Downloads/jars/repositorio/itext7/itext7-7.0.7
y selecciona/agrega los archivos:barcodes-*.jar
font-asian-*.jar
forms-*.jar
hyph-*.jar
io-*.jar
kernel-*.jar
layout-*.jar
pdfa-*.jar
pdftest-*.jar
sign-*.jar
styled-xml-parser-*.jar
svg-*.jar
Simple Logging Facade for Java (SLF4J):
Accede a https://www.slf4j.org/download.html y descarga el archivo con nombre
slf4j-*.tar.gz
en$HOME/Downloads/jars/repositorio/slf4j
.En este caso se ha descargado el archivo
slf4j-1.7.25.tar.gz
.Descomprime el contenido del archivo descargado en el directorio donde se encuentra.
Obtendrás el directorio
$HOME/Downloads/jars/repositorio/slf4j/slf4j-1.7.25
En Eclipse accede a Window Preferences > Java > User Libraries, da clic al botón New, en el campo User library name ingresa slf4j-1.7.25 y da clic al botón OK.
En la ventana de User Libraries selecciona slf4j-1.7.25, da clic al botón Add External JARs..., dirijete al directorio
$HOME/Downloads/jars/repositorio/slf4j/slf4j-1.7.25
y selecciona/agrega los archivos:jcl-over-slf4j-*.jar
jul-to-slf4j-*.jar
log4j-over-slf4j-*.jar
osgi-over-slf4j-*.jar
slf4j-android-*.jar
slf4j-api-*.jar
slf4j-ext-*.jar
slf4j-jcl-*.jar
slf4j-jdk14-*.jar
slf4j-log4j12-*.jar
slf4j-migrator-*.jar
slf4j-nop-*.jar
slf4j-simple-*.jar
En Eclipse:
En la vista Project Explorer, da clic drecho sobre el proyecto jee06, selecciona la opción de Properties, dirijete a Java Build Path > Libraries, da clic al botón Add Library.... Ante la ventana Add Library selecciona User Library da clic al botón Next, selecciona las 3 librerías (User Libraries) recien creadas-agregadas en Eclipse, da clic al botón Finish y finalmente al botón Apply.
En la vista Project Explorer, da clic drecho sobre el proyecto jee06, selecciona la opción de Properties, dirijete a Deployment Assembly y da clic al botón Add. Ante la ventana New Assembly Directive selecciona Java Build Path Entries, da clic al botón Next, selecciona las 3 librerías (User Libraries) recien creadas-agregadas en Eclipse, da clic al botón Finish y finalmente al botón Apply.
Crea lo siguiente en Eclipse:
Java package:
io.bitbucket.NombreDeUsuario.jee06.servlets
- Servlet: ServletImpresionDocumento.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee06.generadores
- Clase: DocumentoHtml.java.txt
- Clase: DocumentoPdf.java.txt
- Clase: DocumentoXls.java.txt
- Clase: DocumentoXlsx.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee06.colecciones
- Clase: Libros.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee06.pojos
- Clase: Libro.java.txt
NOTA: sustituye NombreDeUsuario
con tu nombre de usuario en Bitbucket.
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee06/, en caso contrario realiza su despliegue e ingresa a él.
Práctica 07
El objetivo de esta práctica es hacer uso de la librería externa ofrecida por PostgreSQL para permitir la comunicación de una aplicación (escrita en el lenguaje de programación Java) con una instancia de dicho sistema gestor de base de datos: PostgreSQL JDBC Driver.
Java Database Connectivity (JDBC) es una API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el dialecto SQL del modelo de base de datos que se utilice. - Wikipedia
Realiza los pasos del 1 al 7 expuestos en la Práctica 01 pero tomando en cuenta que ahora el proyecto o contexto será nombrado jee07.
Contempla el despliegue del proyecto y su ubicación en http://localhost:8080/jee07.
Crea el archivo
WebContent/index.html
con el siguiente contenido:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 07</title> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <div class="contenedor"> <div class="cabecera"> <h1>Inicio</h1> </div> <div class="menu"> <ul> <li><a href=".">Inicio</a></li> <li><a href="conexion-a-postgresql">conexion-a-postgresql</a></li> </ul> </div> <div class="cuerpo"></div> </div> </body> </html>
Integración de PostgreSQL JDBC Driver al proyecto
En base a lo expuesto en la Práctica 06:
Accede a https://jdbc.postgresql.org/download.html y descarga el archivo con nombre
postgresql-*.jar
.En este caso se ha descargado el archivo
postgresql-42.2.2.jar
el cual corresponse a PostgreSQL JDBC 4.2 Driver, 42.2.2.NOTA: en dicha página encontrarás las indicaciones sobre que versión de la librería se ha usar en base a la versión del JDK que uno use: If you are using Java 8 or newer then you should use the JDBC 4.2 version.
En Eclipse, crea una User Library (postgresql-42.2.2), agrégala al proyecto jee07 en Java Build Path y Deployment Assembly.
Declaración del JDBC Data Sources JNDI Resource en el entorno de ejecución (Apache Tomcat)
En Eclipse da clic derecho sobre el proyecto jee07 en la vista Project Explorer y selecciona
Java EE Tools > Generate Deployment Descriptor Stub. Lo anterior creará el archivo WebContent/WEB-INF/web.xml
que es
el Descriptor de Despliegue.
Agrea lo siguiente al descriptor de despliegue una línea antes de la etiqueta de cierre del elemento <web-app>
:
<resource-ref>
<description>Recurso para el acceso a PostgreSQL disponible mediante JNDI</description>
<res-ref-name>jdbc/PostgreSQL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Guarda los cambios hechos al descriptor de despligue.
Configuración del JDBC Data Sources JNDI Resource en el contexto (Proyecto jee07)
En Eclipse crea el archivo WebContent/META-INF/context.xml
con el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Context>
<Context>
<Resource
name="jdbc/PostgreSQL"
auth="Container"
type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver"
maxActive="10"
maxIdle="5"
username="✖ ✖ ✖ ✖ ✖"
password="✖ ✖ ✖ ✖ ✖"
url="✖ ✖ ✖ ✖ ✖" />
</Context>
En el elemento <Resource>
:
El atributo
username
estable el nombre de usuario con el cual se accederá a PostgreSQL.El atributo
password
estable la contraseña del usuario con el cual se accederá a PostgreSQL.El atributo
url
del elemento<Resource>
tiene como valor una cadena de carácteres en la cual se indican algunos parámetros para la conexión a PostgreSQL. Puedes encontrar más información y ejemplos en: https://jdbc.postgresql.org/documentation/head/connect.html Sintaxis:jdbc:postgresql://
dirección IP o nombre de host:
puerto TCP/
base de datosPor ejemplo:
Si trabajas en tu entorno local y te conectas a la base de datos postgres en el puerto TCP
5432
:url="jdbc:postgresql://localhost:5432/postgres"
Si trabajas en tu entorno local y te conectas a la base de datos changoleon en el puerto TCP
5432
:url="jdbc:postgresql://127.0.0.1:5432/changoleon"
Si despliegas tu aplicación a tu entorno de producción, suponiendo que tu base de datos es chilaquil y PostgreSQL espere conexiones en el puerto TCP
9696
:url="jdbc:postgresql://localhost:9696/chilaquil"
NOTAS:
En el archivo
META-INF/context.xml
se configura un recurso, el cual es controlado por Apache Tomcat y puesto a disposición de las clases que requieran dicho recurso.La clase que requiera del recurso lo localiza (a esto se le conoce como JNDI, Java Naming Directory Interface) en el contexto y hace uso de las clases para realizar 3 pasos: abrir una conexión, crear una sentencia de SQL y ejecutar una sentencia de SQL, obteniendo un conjunto de resultados. Una vez obtenido el conjunto de resultados, cierra el conjunto de resultados, la sentencia de SQL y la conexión a PostgreSQL.
OBSERVACIONES:
Para el correcto funcionamiento es necesario que una instancia de PostgreSQL ya se encuentre en ejecución y de realizar las modificaciones necesarias al archivo
META-INF/context.xml
Con respecto a la instancia de PostgreSQL leer la sección de sgbd para PostgreSQL.
Crea lo siguiente en Eclipse:
Java package:
io.bitbucket.NombreDeUsuario.jee07.servlets
- Servlet: ServletConexionPostgreSQL.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee07.generadores
- Clase: DocumentoHtml.java.txt
NOTA: sustituye NombreDeUsuario
con tu nombre de usuario en Bitbucket.
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee07/, en caso contrario realiza su despliegue e ingresa a él.
Lecturas
- Como crear un pool de conexiones en Tomcat por Iván Salas
- JNDI (Java Naming Directory Interface). Configurando recursos en Tomcat por Antonio Manuel Bellido Romero
- Tomcat Java DataSource y @Resource por Cecilio Álvarez Caules
Práctica 08
El objetivo de esta práctica es hacer uso Filters y Listeners ante solicitudes, respuestas y/o eventos que se presentán durante la ejecución de la aplicación (contexto) en el entorno de ejecución).
Realiza los pasos del 1 al 7 expuestos en la Práctica 01 pero tomando en cuenta que ahora el proyecto o contexto será nombrado jee08.
Contempla el despliegue del proyecto y su ubicación en http://localhost:8080/jee08.
Crea el archivo
WebContent/index.html
con el siguiente contenido:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Práctica 08</title> <link rel="stylesheet" href="assets/css/normalize.css"> <link rel="stylesheet" href="assets/css/main.css"> </head> <body> <div class="contenedor"> <div class="cabecera"> <h1>Inicio</h1> </div> <div class="menu"> <ul> <li><a href=".">Inicio</a></li> <li><a href="servlets/a">servlets/a</a></li> <li><a href="servlets/b">servlets/b</a></li> <li><a href="servlets/c">servlets/c</a></li> <li><a href="crear-o-iniciar-sesion">crear-o-iniciar-sesion</a></li> <li><a href="invalidar-o-cerrar-sesion">invalidar-o-cerrar-sesion</a></li> </ul> </div> <div class="cuerpo"></div> </div> </body> </html>
Crea lo siguiente en Eclipse:
Java package:
io.bitbucket.NombreDeUsuario.jee08.filters
- Filter: FilterRaiz.java.txt
- Filter: FilterServlets.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee08.listeners
- Listener: ListenerContexto.java.txt
- Listener: ListenerContextoAtributos.java.txt
- Listener: ListenerSesion.java.txt
- Listener: ListenerSesionAtributos.java.txt
- Listener: ListenerSolicitud.java.txt
- Listener: ListenerSolicitudAtributos.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee08.servlets
- Servlet: ServletA.java.txt
- Servlet: ServletB.java.txt
- Servlet: ServletC.java.txt
- Servlet: ServletCrearIniciarSesion.java.txt
- Servlet: ServletInvalidarCerrarSesion.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee08.utilities
- Clase: Console.java.txt
- Clase: SesionHttp.java.txt
Java package:
io.bitbucket.NombreDeUsuario.jee08.generadores
- Clase: DocumentoHtml.java.txt
NOTA: sustituye NombreDeUsuario
con tu nombre de usuario en Bitbucket.
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee08/, en caso contrario realiza su despliegue e ingresa a él.
Es importante que en todo momento prestes atención a lo impreso en la Consola de Eclipse y determines quien (Filter o Listener) está imprimiendo dichos mensajes.
Lecturas
- Usando filtros en una aplicación Web Java por Novacreations
- Servlet 3.0 y Java Filter y Java ServletContextListener por Cecilio Álvarez Caules.
- Crear un Servlet Listener de sesión por Fernando Pablo
Práctica 09
El objetivo de esta práctica es hacer uso del elemento <form enctype="multipart/data-form" ...>
y del elemento
<input type="file">
para permitir subir un archivo desde el cliente (navegador web) al servidor
(Apache Tomcat) haciendo uso de:
Commons FileUpload: librería externa que permite procesar solicitudes que contengan multipartes (
multipart/data-form
).Podrás encontrar el archivo a descargar en http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi. El archivo descargado ha sido
commons-fileupload-1.3.3-bin.tar.gz
, descomprime su contenido y agregalo a Eclipse como una User Library.Commons IO: como dependencia de Commons FileUpload
Podrás encontrar el archivo a descargar en https://commons.apache.org/proper/commons-io/download_io.cgi. El archivo descargado ha sido
commons-io-2.6-bin.tar.gz
, descomprime su contenido y agregalo a Eclipse como una User Library.
HttpServletRequest.html#getParts: método ofrecido por HttpServletRequest para procesar las multipartes de la solicitud. Se consideraría de forma nativa (ya está integrado en el entorno de ejecución o Apache Tomcat) por lo que no se requiere de integrar ninguna otra librería externa al proyecto para su uso.
La presente práctica se entrega en el archivo jee09.war el cual debe ser descargado e importado a Eclipse:
En Eclipse accede a File > Import lo cual abrirá la ventana Import.
Busca en la ventana Import el nodo Web > WAR file, seleccionalo y da click en el botón Next.
Ante la ventana WAR Import:
- En el campo WAR file ingresa la ubicación completa del archivo jee09.war previamente descargado.
- En el campo Web project se habrá mostrado el valor jee09, determinado a partir del nombre del archivo WAR.
- En el campo Target runtime selecciona el Apache Tomcat en prácticas previamente configurado.
Da click al botón Finish para terminar y que Eclipse creee un proyecto a partir del archivo WAR.
Como usuario alumno crea el directorio /var/tmp/tomcat/jee09/archivos-subidos/
y realiza lo siguiente al archivo de configuración
de la instancia de Apache Tomcat en Eclipse:
En server.xml
agrega lo siguiente, entre el cuerpo del elemento <Host appBase="webapps" ...>
(línea 140 aprox.):
<Context docBase="/var/tmp/tomcat/jee09/archivos-subidos" path="/jee09/archivos-subidos" />
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee09/, en caso contrario realiza su despliegue e ingresa a él.
Sugerencia
Mediante un programa para descomprimir archivos en formato ZIP estudia el contenido del archivo jee09.war
:
alumno@servidor:~ $ file jee09.war
jee09.war: Zip archive data, at least v2.0 to extract
alumno@servidor:~ $ xarchiver jee09.war
alumno@servidor:~ $ ark jee09.war
Lecturas
- Modulos de Java (I) Empaquetamiento JAR y Modulos de Java (II) Web Archive (WAR) por Cecilio Álvarez Caules.
- Aplicaciones web java y directorio WEB-INF por Carlos Pesquera.
- Subir archivos al servidor usando un formulario HTML en aprenderaprogramar.com
- Upload de ficheros en Java (2003); por Roberto Canales Mora
- File upload con JSP: en chuwiki.chuidiang.org
Práctica 10
El objetivo de esta práctica consiste en:
Plantear la separación entre atender una solicitud GET o POST de HTTP, obtener datos de una fuente de datos y generar una representación de los datos.
Hacer uso de un motor de plantillas (template engine) para generar una representación de los datos. Esto se ejemplifica con el uso de:
JSP: JavaServer Pages
JavaServer Pages (JSP) es una tecnología que ayuda a los desarrolladores de software a crear páginas web dinámicas basadas en HTML y XML, entre otros tipos de documentos. JSP puede ser visto como una abstracción de alto nivel de los servlets Java. Las JavaServer Pages son traducidas a servlets en tiempo real; cada servlet es guardado en caché y rehusado hasta que la JSP original es modificada. Dicho en otras palabras un JSP son páginas java para un ambiente web. - Wikipedia
JSP es un acrónimo de Java Server Pages, que en castellano vendría a decir algo como Páginas de Servidor Java. Es, pues, una tecnología orientada a crear páginas web con programación en Java. Las páginas JSP están compuestas de código HTML/XML mezclado con etiquetas especiales para programar scripts de servidor en sintaxis Java. - desarrolloweb.com (2002)
Thymeleaf: a modern server-side Java template engine for both web and standalone environments.
Thymeleaf es una librería Java que implementa un motor de plantillas de XML/XHTML/HTML5 (también extensible a otros formatos) que puede ser utilizado tanto en modo web como en otros entornos no web. - Wikipedia
Apache FreeMarker: a Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data.
- Mustache (mustache.java): implementation of mustache.js for Java. Influenciado por http://mustache.github.io.
- Trimou: a Mustache templating engine implementation written in Java. Influenciado por http://mustache.github.io.
Otras opciones como motores de plantillas:
- jade4j: influenciado por https://github.com/jadejs/jade (JavaScript), ahora llamado https://github.com/pugjs/pug.
- Pebble: influenciado por https://twig.sensiolabs.org (PHP).
- Jtwig: influenciado por https://twig.sensiolabs.org (PHP).
- Handlebars.java: influenciado por http://handlebarsjs.com (JavaScript).
- jmustache: influenciado por http://mustache.github.io.
- carrot: influenciado por http://jinja.pocoo.org (Python).
- jinjava: influenciado por http://jinja.pocoo.org (Python).
- Rocker: autonombrado como el más rápido de los motores de plantillas en Java.
- StringTemplate
- watertemplate-engine
- Rythm
- httl
- Chunk
- Apache Tiles
- Apache Velocity: actualizaciones en https://github.com/apache/velocity-engine
La presente práctica se entrega en el archivo jee10.war el cual debe ser descargado e importado a Eclipse, similar a lo llevado a cabo en los dos pasos para la Práctica 09.
En Eclipse se deberá integrar las siguientes librerías externas (User Libraries):
Thymeleaf:
- Descarga: https://dl.bintray.com/thymeleaf/downloads/thymeleaf/3.0.9.RELEASE/thymeleaf-3.0.9.RELEASE-dist.zip
- JARs:
thymeleaf-*.jar
,ognl-*.jar
,javassist-*.jar
,attoparser-*.jar
yunbescape-*.jar
.
Apache FreeMarker:
- Descarga: http://www-us.apache.org/dist/freemarker/engine/2.3.28/binaries/apache-freemarker-2.3.28-bin.tar.gz
- JARs:
freemarker.jar
Mustache (mustache.java):
- Descarga: http://central.maven.org/maven2/com/github/spullara/mustache/java/compiler/0.9.5/compiler-0.9.5.jar
- JARs:
compiler-*.jar
Trimou:
Descargas:
JARs:
trimou-core-*.jar
ytrimou-extension-servlet-*.jar
Simple Logging Facade for Java (SLF4J): reutiliza la User Library definida en prácticas previas, slf4j-1.7.25.
Al final obtendrás algo similar a esto en Eclipse:
Java Build Path para el proyecto jee10:
Web Deployment Assembly para el proyecto jee10:
Guarda los cambios hechos en el proyecto y si ya has hecho su despliegue accede a él en el URL http://localhost:8080/jee10/, en caso contrario realiza su despliegue e ingresa a él:
Observaciones
JavaServer Pages no es un motor de plantillas sin embargo su uso es principalmente para la generación de un documento a partir de contenido estático (código de HTML/XML) y contenido dinámico (código de Java). Sería más correcto compararlo al lenguaje de programación PHP o bien a ASP Clásico.
Todos los motores de plantillas usados en el proyecto jee10 generán HTML, algunos de ellos pueden generar XML, JSON, CSV, CSS, JavaScript, etc.
Independientemente del tipo de solicitud HTTP realizada (GET o POST) se hace uso de un motor de plantilla para generar la respuesta.
La clase
io.bitbucket.hernandezblasantonio.jee10.generadores.Datos
es usado por todas las solicitudes GET o POST de tal forma que todos los motores de plantillas presentan la misma información. Este punto es para ver que similitudes o diferencias existen entre los distintos motores de plantillas.Posiblemente las respuestas generadas mediante Java y JSP sean las más fáciles de abordar por la familiaridad de su sintaxis.
Uno de los objetivos finales sería evitar tener lógica de programación (código) en aquello que se use para generar la presentación de la información.
Lecturas
- Motor de plantillas (templates)
- Motores de plantillas (Templates engines)
- Plantillas HTML5 en Java con Thymeleaf
- FreeMarker: Motor de plantillas
- Thymeleaf , un motor de plantillas
- Apache FreeMarker VS Apache Velocity
- Thymeleaf, un nuevo motor de plantillas XML/XHTML/HTML5
Práctica 11
El objetivo de esta práctica consiste en realizar el deployment de una aplicación web escrita en Java al servicio de hospedaje Heroku.
Suponiendo que ya tienes una cuenta de usuario en Heroku y ya cuentas con la instalación de Heroku CLI realiza lo siguiente:
Verifica la instalación de JAVA (JRE/JDK):
which java
,java -version
yjavac -version
.Verifica que la variable de entorno
JAVA_HOME
tengan un valor acorde a la instalación de JAVA:alumno@servidor:~ $ echo $JAVA_HOME /usr/lib64/java
Verifica la instalación de Heroku CLI:
alumno@servidor:~ $ which heroku /home/alumno/.local/opt/heroku-cli/heroku/bin/heroku alumno@servidor:~ $ heroku --version heroku/7.0.94 linux-x64 node-v10.4.1
Puedes iniciar sesión en Heroku, si no lo has hecho aún, con el comando
heroku login
.Instala el plugin heroku-cli-deploy para Heroku CLI:
alumno@servidor:~ $ heroku plugins:install heroku-cli-deploy Installing plugin heroku-cli-deploy... installed v0.4.2
Con el comando
heroku plugins
puedes obtener una lista de los plugins de Heroku CLI que ya has instalado.Crea una app (aplicación) en Heroku accediendo a https://dashboard.heroku.com/new-app y rellena el formulario presentado tomando en cuenta lo siguiente:
- App name: el nombre de tu app, por ejemplo jee11 (
$APP
más abajo). - Choose a region: selecciona United States.
Al finalizar da click al botón Create app. Serás enviado al dashboard de tu app, por ejemplo: https://dashboard.heroku.com/apps/$APP.
Accediendo a https://dashboard.heroku.com/apps/$APP/settings, en la sección Domains and certificates, podrás obtener el URL mediante el cual podrás acceder a tu aplicación web, por ejemplo: https://$APP.herokuapp.com
- App name: el nombre de tu app, por ejemplo jee11 (
Realiza el deployment de una aplicación web en Java haciendo uso de un archivo WAR.
Como prueba puedes hacer uso del archivo WAR de ejemplo ofrecido por Apache Tomcat:
sample.war
.alumno@servidor:~ $ wget https://tomcat.apache.org/tomcat-8.5-doc/appdev/sample/sample.war
Mediante Heroku CLI realiza el deployment de
sample.war
($APP.WAR
más abajo) estableciendo la versión de Apache Tomcat a usar en Heroku ($TOMCAT
más abajo):alumno@servidor:~ $ heroku war:deploy $APP.WAR --app $APP --webapp-runner $TOMCAT Uploading $APP.WAR -----> Packaging application... - app: $APP - including: webapp-runner.jar - including: $APP.WAR -----> Creating build... - file: slug.tgz - size: 16MB -----> Uploading build... - success -----> Deploying... remote: remote: -----> heroku-deploy app detected remote: -----> Installing JDK 1.8... done remote: -----> Discovering process types remote: Procfile declares types -> web remote: remote: -----> Compressing... remote: Done: 66.7M remote: -----> Launching... remote: Released v3 remote: https://$APP.herokuapp.com/ deployed to Heroku remote: -----> Done
Para este ejemplo el comando ejecutado ha sido:
heroku war:deploy sample.war --app jee11 --webapp-runner 8.5.34.1
NOTA: este proceso puede durar alrededor de 5 minutos.
Al terminar accede al URL dado por Heroku: