
Tommybox est un conteneur exécutable autonome qui permet de lancer des applications Web statiques et dynamiques sur un bureau en fournissant des fonctionnalités de serveur et de navigateur intégrées.
Tommybox est similaire à Electron et NW.Js.
Une application peut être fournie en tant que répertoire ou emballé comme archive de guerre (ou zip) qui peut contenir JSP, servlets et des trucs statiques comme CSS, JavaScript, etc.
Sous le capot, Tommybox est construit au-dessus du serveur Web Tommy et du widget de navigateur SWT. L'application peut être emballée sous forme d'archive de guerre ou de zip et peut éventuellement contenir PWA Manifest, JSP, servlets et toutes les choses statiques comme CSS, les fichiers JavaScript, etc.
Voir Tommybox en action: 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
Exécuter le fichier zip (ou war):
java -jar tb.jar --app MyKillerApp.warExécutez le fichier zip (ou war) avec des args de ligne de commande personnalisés:
java -jar tb.jar --app MyKillerApp.war myparam1 myparam2 ...Exécutez Zip (ou War) depuis le serveur Web:
java -jar tb.jar --app https://example.com/MyKillerApp.zipExécutez l'application Web explosée à partir du répertoire:
java -jar tb.jar --app MyKillerAppDirExécutez l'archive de zip protégée par mot de passe:
java -jar tb.jar --app MyKillerApp.zip --password mysecret/app du tb.jar .app.war ou app.zip (l'archive peut être cryptée) et copiez l'archive dans le répertoire racine du tb.jar . Marquez votre application en renommant le tb.jar sur MyKillerApp.jar .
Exécutez l'application intégrée:
java -jar MyKillerApp.jarExécutez l'application embarquée avec des args de ligne de commande personnalisés:
java -jar MyKillerApp.jar myparam1 myparam2 ...Exécutez l'application embarquée protégée par mot de passe:
java -jar MyKillerApp.jar --password mysecretExécutez l'application embarquée protégée par mot de passe avec des args de ligne de commande personnalisés:
java -jar MyKillerApp.jar --password mysecret myparam1 myparam2 ...| Clé | Taper | Valeur par défaut | Description |
|---|---|---|---|
display | string | standalone | Mode display PWA standard.Valeurs possibles: standaloneminimal_uibrowserfullscreenminimized_window (non standard)maximized_window (non standard)desktop_area (non standard)headless (non standard) |
enable_fullscreen | boolean | true | Autoriser le mode plein écran |
tray_icon | boolean | true | Icône du plateau |
window_buttons | array | ["minimize", "maximize", "close"] | Liste des boutons de fenêtre. Éléments possibles: minimizemaximizeclose |
window_menu | string | none | Mode du menu de fenêtre. Valeurs possibles: customnativenone |
window_always_on_top | boolean | false | Toujours sur la propriété supérieure de la fenêtre |
window_size | string | null | Taille de la fenêtre comme chaîne par exemple: 640x480 |
window_x | number | null | Emplacement de la fenêtre x Coordonnées (en pixels) |
window_y | number | null | Coordonnée de l'emplacement de la fenêtre Y (en pixels) |
strings | array | [] | Dictionnaire i18n pour les chaînes personnalisées |
| Protocole | Description | Exemple HTML |
|---|---|---|
home: | Action à domicile | <a href="home:">Home</a> |
back: | Action arrière | <a href="back:">Back</a> |
forward: | Action à terme | <a href="forward:>Forward</a> |
reload: | Recharger l'action | <a href="reload:">Reload</a> |
quit: | Sortir du système d'exploitation | <a href="quit:">Exit</a> |
minimize: | Minimiser la fenêtre | <a href="minimize:">Minimize</a> |
fullscreen: | Passer à l'écran complet | <a href="fullscreen:">Fullscreen</a> |
open: | Ouvrez l'URL donnée dans le système d'exploitation | <a href="open:file://home/john/my.pdf">Open PDF</a> |
open_in_new_window: | Ouvrez l'URL donnée dans la nouvelle fenêtre | <a href="open_in_new_window:http://example.com">Open in New Window</a> |
open_in_browser: | Ouvrez l'URL donnée dans le navigateur | <a href="open_in_browser:http://example.com">Open in Browser</a> |
java: | Lancez le code Java | <a href="java:javax.swing.JOptionPane.showMessageDialog(null, "Hello, Java!")">Launch Java Code</a> |
js: | Lancez le code 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" );
// ...
Q. Mon application a échoué avec java.lang.ClassNotFoundException: javax.servlet.*
A. À la suite de la décision de Java EE à Jakarta EE, à partir de V10, Apache Tomcat ne prend en charge que la spécification Jakarta EE. javax.servlet.* n'est plus pris en charge. Remplacez le javax.servlet.* Imports dans votre code par jakarta.servlet.* .