
Tommybox es un contenedor ejecutable independiente que hace posible iniciar aplicaciones web estáticas y dinámicas en un escritorio al proporcionar una funcionalidad de servidor incorporada y navegador.
Tommybox es similar a Electron y NW.JS.
Se puede proporcionar una aplicación como un directorio o embalado como archivo de guerra (o zip) que puede contener JSP, servlets y cosas estáticas como CSS, JavaScript, etc.
Debajo del capó, Tommybox está construido sobre el servidor web de Tommy y el widget del navegador SWT. La aplicación se puede empacar como War o Zip Archive y opcionalmente puede contener PWA Manifest, JSP, Servlets y todas las cosas estáticas como CSS, archivos JavaScript, etc.
Ver Tommybox en acción: https://github.com/xnbox/tommybox_demo
tb.jar java -jar tb.jar [options] [custom arg]...
Options:
--help print help message
--app <file|dir|URL> run app from ZIP or WAR archive, directory or URL
--password <string> provide password for encrypted ZIP or WAR archive
Ejecutar el archivo zip (o guerra):
java -jar tb.jar --app MyKillerApp.warEjecutar el archivo zip (o guerra) con args de línea de comandos personalizados:
java -jar tb.jar --app MyKillerApp.war myparam1 myparam2 ...Ejecutar Zip (o guerra) desde el servidor web:
java -jar tb.jar --app https://example.com/MyKillerApp.zipEjecute la aplicación web explosiva desde el directorio:
java -jar tb.jar --app MyKillerAppDirEjecutar el archivo de ZIP (o guerra) protegido con contraseña:
java -jar tb.jar --app MyKillerApp.zip --password mysecret/app de tb.jar .app.war o app.zip (el archivo se puede encriptar) y copie el archivo al directorio raíz del tb.jar . Marca su aplicación renombrando el tb.jar a MyKillerApp.jar .
Ejecutar la aplicación incrustada:
java -jar MyKillerApp.jarEjecutar la aplicación integrada con args de línea de comandos personalizados:
java -jar MyKillerApp.jar myparam1 myparam2 ...Ejecutar la aplicación incrustada protegida con contraseña:
java -jar MyKillerApp.jar --password mysecretEjecute la aplicación integrada protegida con contraseña con args de línea de comandos personalizados:
java -jar MyKillerApp.jar --password mysecret myparam1 myparam2 ...| Llave | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
display | string | standalone | Modo display PWA estándar.Valores posibles: standaloneminimal_uibrowserfullscreenminimized_window (no estándar)maximized_window (no estándar)desktop_area (no estándar)headless (no estándar) |
enable_fullscreen | boolean | true | Permitir el modo de pantalla completa |
tray_icon | boolean | true | Icono de bandeja |
window_buttons | array | ["minimize", "maximize", "close"] | Lista de botones de la ventana. Posibles elementos: minimizemaximizeclose |
window_menu | string | none | Modo de menú de ventana. Valores posibles: customnativenone |
window_always_on_top | boolean | false | Siempre en la propiedad de la ventana superior |
window_size | string | null | Tamaño de la ventana como cadena Eg.: 640x480 |
window_x | number | null | Ubicación de la ventana X coordenada (en píxeles) |
window_y | number | null | Ubicación de la ventana y coordenada (en píxeles) |
strings | array | [] | Diccionario I18N para cuerdas personalizadas |
| Protocolo | Descripción | Ejemplo de HTML |
|---|---|---|
home: | Acción en casa | <a href="home:">Home</a> |
back: | Acción posterior | <a href="back:">Back</a> |
forward: | Acción hacia adelante | <a href="forward:>Forward</a> |
reload: | Recarga de acción | <a href="reload:">Reload</a> |
quit: | Salir al sistema operativo | <a href="quit:">Exit</a> |
minimize: | Minimizar la ventana | <a href="minimize:">Minimize</a> |
fullscreen: | Cambiar a pantalla completa | <a href="fullscreen:">Fullscreen</a> |
open: | Abra la URL dada en el sistema operativo | <a href="open:file://home/john/my.pdf">Open PDF</a> |
open_in_new_window: | Abra la URL dada en la nueva ventana | <a href="open_in_new_window:http://example.com">Open in New Window</a> |
open_in_browser: | Abra la URL dada en el navegador | <a href="open_in_browser:http://example.com">Open in Browser</a> |
java: | Iniciar código Java | <a href="java:javax.swing.JOptionPane.showMessageDialog(null, "Hello, Java!")">Launch Java Code</a> |
js: | Iniciar código JavaScript | <a href="js:javax.swing.JOptionPane.showMessageDialog(null, 'Hello, JavaScript!')">Launch JavaScript Code</a> |
// ...somewhere in your Servlet or JSP
InitialContext ctx = new InitialContext ();
/* get custom command-line args */
String [] args = ( String []) ctx . lookup ( "java:comp/env/tommy/args" );
/* get standard input (stdin) */
InputStream stdin = ( InputStream ) ctx . lookup ( "java:comp/env/tommy/stdin" );
/* get standard output (stdout) */
PrintStream stdout = ( PrintStream ) ctx . lookup ( "java:comp/env/tommy/stdout" );
/* get standard error (stderr) */
PrintStream stderr = ( PrintStream ) ctx . lookup ( "java:comp/env/tommy/stderr" );
/* get "--app" parameter value */
String app = ( String ) ctx . lookup ( "java:comp/env/tommy/app" );
// ...
P. Mi aplicación falló con java.lang.ClassNotFoundException: javax.servlet.*
A. Como resultado del movimiento de Java EE a Yakarta EE, a partir de V10, Apache Tomcat admite solo la especificación de Yakarta EE. javax.servlet.* ya no es compatible. Reemplace el javax.servlet.* Importa en su código con jakarta.servlet.* .