
Tommybox -это отдельный исполняемый контейнер, который позволяет запускать статические и динамические веб-приложения на рабочем столе, предоставляя встроенные функции сервера и браузера.
Tommybox похож на Electron и NW.JS.
Приложение может быть предоставлено в качестве каталога или упаковано в виде архива войны (или молнии), который может содержать JSP, сервлеты и статические вещи, такие как CSS, JavaScript и т. Д.
Под капотом Tommybox строится на вершине веб -сервера Tommy и виджета браузера SWT. Приложение может быть упаковано в качестве архива войны или ZIP и может при желании содержать PWA Manifest, JSP, сервлеты и все статические вещи, такие как CSS, файлы JavaScript и т. Д.
См. Tommybox в действии: 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
Запустите файл Zip (или War):
java -jar tb.jar --app MyKillerApp.warЗапустите файл Zip (или War) с помощью пользовательской командной строки Args:
java -jar tb.jar --app MyKillerApp.war myparam1 myparam2 ...Запустите Zip (или War) с веб -сервера:
java -jar tb.jar --app https://example.com/MyKillerApp.zipЗапустить взорванное веб -приложение из каталога:
java -jar tb.jar --app MyKillerAppDirЗапустите защищенную паролем архив ZIP (или войны):
java -jar tb.jar --app MyKillerApp.zip --password mysecret/app tb.jar .app.war или app.zip (архив может быть зашифрован) и скопируйте архив в корневой каталог tb.jar . Отправьте свое приложение, переименовав tb.jar в MyKillerApp.jar .
Запустить встроенное приложение:
java -jar MyKillerApp.jarЗапустите встроенное приложение с помощью пользовательской командной строки Args:
java -jar MyKillerApp.jar myparam1 myparam2 ...Запустите встроенное приложение, защищенное паролем:
java -jar MyKillerApp.jar --password mysecretЗапустите встроенное приложение, защищенное паролем, с помощью пользовательской командной строки Args:
java -jar MyKillerApp.jar --password mysecret myparam1 myparam2 ...| Ключ | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
display | string | standalone | Стандартный режим display PWA.Возможные значения: standaloneminimal_uibrowserfullscreenminimized_window (нестандартный)maximized_window (нестандартный)desktop_area (нестандартный)headless (нестандартный) |
enable_fullscreen | boolean | true | Разрешить полноэкранную режим |
tray_icon | boolean | true | Икона подноса |
window_buttons | array | ["minimize", "maximize", "close"] | Список оконных кнопок. Возможные элементы: minimizemaximizeclose |
window_menu | string | none | Режим меню окон. Возможные значения: customnativenone |
window_always_on_top | boolean | false | Всегда на свойстве верхнего окна |
window_size | string | null | Размер окна как строка, например: 640x480 |
window_x | number | null | Расположение окна x координата (в пикселях) |
window_y | number | null | Расположение окна y координата (в пикселях) |
strings | array | [] | Словарь I18N для пользовательских строк |
| Протокол | Описание | Html пример |
|---|---|---|
home: | Домашнее действие | <a href="home:">Home</a> |
back: | Назад действие | <a href="back:">Back</a> |
forward: | Прямое действие | <a href="forward:>Forward</a> |
reload: | Перезагрузить действие | <a href="reload:">Reload</a> |
quit: | Выход в ОС | <a href="quit:">Exit</a> |
minimize: | Минимизировать окно | <a href="minimize:">Minimize</a> |
fullscreen: | Переключитесь на полноэкранную | <a href="fullscreen:">Fullscreen</a> |
open: | Откройте заданный URL в ОС | <a href="open:file://home/john/my.pdf">Open PDF</a> |
open_in_new_window: | Откройте заданный URL в новом окне | <a href="open_in_new_window:http://example.com">Open in New Window</a> |
open_in_browser: | Откройте заданный URL в браузере | <a href="open_in_browser:http://example.com">Open in Browser</a> |
java: | Запустить код Java | <a href="java:javax.swing.JOptionPane.showMessageDialog(null, "Hello, Java!")">Launch Java Code</a> |
js: | Запустите код 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" );
// ...
В. Мое приложение не удалось с java.lang.ClassNotFoundException: javax.servlet.*
A. В результате перехода от Java EE в Jakarta EE, начиная с V10, Apache Tomcat поддерживает только спецификацию Jakarta EE. javax.servlet.* больше не поддерживается. Замените javax.servlet.* Импорт в вашем коде с jakarta.servlet.* .