
Tommybox ist ein eigenständiger ausführbarer Container, mit dem statische und dynamische Web-Apps auf einem Desktop gestartet werden können, indem integrierte Server- und Browserfunktionen bereitgestellt werden.
Tommybox ähnelt Electron und NW.Js.
Eine App kann als Verzeichnis bereitgestellt oder als Kriegsarchiv (oder ZIP) gepackt werden, das JSP, Servlets und statische Dinge wie CSS, JavaScript usw. enthalten kann.
Unter der Haube ist Tommybox auf dem Tommy Web Server und dem SWT -Browser -Widget aufgebaut. Die App kann als Kriegs- oder ZIP -Archiv verpackt und optional PWA -Manifest, JSP, Servlets und alle statischen Dinge wie CSS, JavaScript -Dateien usw. enthalten.
Siehe Tommybox in Aktion: https://github.com/xnbox/tommybox_demo
tb.jar herunter 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
Führen Sie die ZIP -Datei (oder Krieg) aus:
java -jar tb.jar --app MyKillerApp.warFühren Sie die ZIP-Datei (oder Krieg) mit benutzerdefinierten Befehlszeilen-Argumenten aus:
java -jar tb.jar --app MyKillerApp.war myparam1 myparam2 ...Führen Sie ZIP (oder Krieg) vom Webserver aus:
java -jar tb.jar --app https://example.com/MyKillerApp.zipFühren Sie die explodierte Web -App aus dem Verzeichnis aus:
java -jar tb.jar --app MyKillerAppDirFühren Sie passwortgeschütztes ZIP-Archiv (oder Krieg) aus:
java -jar tb.jar --app MyKillerApp.zip --password mysecret/app des tb.jar .app.war oder app.zip (das Archiv kann verschlüsselt werden) und kopieren Sie das Archiv in das Stammverzeichnis des tb.jar . Brand Ihre App, indem Sie den tb.jar in MyKillerApp.jar umbenennen.
Führen Sie die eingebettete App aus:
java -jar MyKillerApp.jarFühren Sie die eingebettete App mit benutzerdefinierten Befehlszeilen-Argumenten aus:
java -jar MyKillerApp.jar myparam1 myparam2 ...Führen Sie eine eingeschützte eingebettete App aus, die mit Kennwort geschützt ist:
java -jar MyKillerApp.jar --password mysecretFühren Sie eine einkennwortgeschützte eingebettete App mit benutzerdefinierten Befehlszeilen-Argumenten aus:
java -jar MyKillerApp.jar --password mysecret myparam1 myparam2 ...| Schlüssel | Typ | Standardwert | Beschreibung |
|---|---|---|---|
display | string | standalone | Standard -PWA display .Mögliche Werte: standaloneminimal_uibrowserfullscreenminimized_window (nicht standardard)maximized_window (nicht standardmäßig)desktop_area (nicht standardmäßig)headless (nicht standardmäßig) |
enable_fullscreen | boolean | true | Vollbildmodus zulassen |
tray_icon | boolean | true | Tablettsymbol |
window_buttons | array | ["minimize", "maximize", "close"] | Fensterschaltflächenliste. Mögliche Elemente: minimizemaximizeclose |
window_menu | string | none | Fenstermenümodus. Mögliche Werte: customnativenone |
window_always_on_top | boolean | false | Immer auf dem Grundstück der oberen Fenster |
window_size | string | null | Fenstergröße als Zeichenfolge zB: 640x480 |
window_x | number | null | Fensterposition X -Koordinate (in Pixeln) |
window_y | number | null | Fensterstandort Y -Koordinate (in Pixel) |
strings | array | [] | I18n Wörterbuch für benutzerdefinierte Zeichenfolgen |
| Protokoll | Beschreibung | HTML -Beispiel |
|---|---|---|
home: | Heimaktion | <a href="home:">Home</a> |
back: | Rückaktion | <a href="back:">Back</a> |
forward: | Vorwärtsaktion | <a href="forward:>Forward</a> |
reload: | Aktion neu laden | <a href="reload:">Reload</a> |
quit: | Ausgehen nach Betriebssystem | <a href="quit:">Exit</a> |
minimize: | Fenster minimieren | <a href="minimize:">Minimize</a> |
fullscreen: | Wechseln Sie zum Vollbild | <a href="fullscreen:">Fullscreen</a> |
open: | Öffnen Sie die angegebene URL in Betriebssystem | <a href="open:file://home/john/my.pdf">Open PDF</a> |
open_in_new_window: | Öffnen Sie die gegebene URL im neuen Fenster | <a href="open_in_new_window:http://example.com">Open in New Window</a> |
open_in_browser: | Öffnen Sie die gegebene URL im Browser | <a href="open_in_browser:http://example.com">Open in Browser</a> |
java: | Starten Sie den Java -Code | <a href="java:javax.swing.JOptionPane.showMessageDialog(null, "Hello, Java!")">Launch Java Code</a> |
js: | Starten Sie den JavaScript -Code | <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. Meine App ist mit java.lang.ClassNotFoundException: javax.servlet.*
A. Infolge des Wechsels von Java ee nach Jakarta EE stützt Apache Tomcat nur die Jakarta ee -Spezifikation. javax.servlet.* wird nicht mehr unterstützt. Ersetzen Sie das javax.servlet.* Importiert in Ihrem Code durch jakarta.servlet.* .