
O TommyBox é um contêiner executável independente que possibilita o lançamento de aplicativos da Web estáticos e dinâmicos em uma área de trabalho, fornecendo funcionalidade de servidor e navegador embutido.
Tommybox é semelhante ao Electron e NW.JS.
Um aplicativo pode ser fornecido como um diretório ou embalado como arquivo de guerra (ou zip) que pode conter JSP, servlets e coisas estáticas como CSS, JavaScript, etc.
Sob o capô, o TommyBox é construído sobre o Web Server Tommy e o widget SWT Browser. O aplicativo pode ser embalado como Arquivo de Guerra ou Zip e, opcionalmente, pode conter o manifesto PWA, JSP, servlets e todas as coisas estáticas, como CSS, arquivos JavaScript etc.
Veja Tommybox em ação: 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
Execute o arquivo zip (ou guerra):
java -jar tb.jar --app MyKillerApp.warExecute o arquivo zip (ou guerra) com args de linha de comando personalizado:
java -jar tb.jar --app MyKillerApp.war myparam1 myparam2 ...Execute zip (ou guerra) do servidor da web:
java -jar tb.jar --app https://example.com/MyKillerApp.zipExecutar aplicativo da web explodido do diretório:
java -jar tb.jar --app MyKillerAppDirExecute o arquivo ZIP (ou guerra) protegido por senha:
java -jar tb.jar --app MyKillerApp.zip --password mysecret/app do tb.jar .app.war ou app.zip (o arquivo pode ser criptografado) e copie o arquivo para o diretório raiz do tb.jar . Marque seu aplicativo renomeando o tb.jar no MyKillerApp.jar .
Execute o aplicativo incorporado:
java -jar MyKillerApp.jarExecute o aplicativo incorporado com args de linha de comando personalizada:
java -jar MyKillerApp.jar myparam1 myparam2 ...Execute o aplicativo incorporado protegido por senha:
java -jar MyKillerApp.jar --password mysecretExecute o aplicativo incorporado protegido por senha com args de linha de comando personalizado:
java -jar MyKillerApp.jar --password mysecret myparam1 myparam2 ...| Chave | Tipo | Valor padrão | Descrição |
|---|---|---|---|
display | string | standalone | Modo display PWA padrão.Valores possíveis: standaloneminimal_uibrowserfullscreenminimized_window (fora do padrão)maximized_window (fora do padrão)desktop_area (fora do padrão)headless (fora do padrão) |
enable_fullscreen | boolean | true | Permitir o modo de tela cheia |
tray_icon | boolean | true | Ícone da bandeja |
window_buttons | array | ["minimize", "maximize", "close"] | Lista de botões da janela. Possíveis elementos: minimizemaximizeclose |
window_menu | string | none | Modo de menu da janela. Valores possíveis: customnativenone |
window_always_on_top | boolean | false | Sempre na propriedade da janela superior |
window_size | string | null | Tamanho da janela como string, por exemplo: 640x480 |
window_x | number | null | Localização da janela x coordenada (em pixels) |
window_y | number | null | Localização da janela y Coordenada (em pixels) |
strings | array | [] | I18n Dicionário para Strings Custom |
| Protocolo | Descrição | Exemplo HTML |
|---|---|---|
home: | Ação em casa | <a href="home:">Home</a> |
back: | Ação de volta | <a href="back:">Back</a> |
forward: | Ação para a frente | <a href="forward:>Forward</a> |
reload: | Recarregar a ação | <a href="reload:">Reload</a> |
quit: | Saia para OS | <a href="quit:">Exit</a> |
minimize: | Minimizar a janela | <a href="minimize:">Minimize</a> |
fullscreen: | Mude para tela cheia | <a href="fullscreen:">Fullscreen</a> |
open: | Abra o URL dado no sistema operacional | <a href="open:file://home/john/my.pdf">Open PDF</a> |
open_in_new_window: | Abra o URL dado na nova janela | <a href="open_in_new_window:http://example.com">Open in New Window</a> |
open_in_browser: | Abra o URL dado no navegador | <a href="open_in_browser:http://example.com">Open in Browser</a> |
java: | Inicie o código Java | <a href="java:javax.swing.JOptionPane.showMessageDialog(null, "Hello, Java!")">Launch Java Code</a> |
js: | Inicie o 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. Meu aplicativo falhou com java.lang.ClassNotFoundException: javax.servlet.*
A. Como resultado da mudança de Java Ee para Jacarta EE, a partir do V10, o Apache Tomcat suporta apenas a especificação Jacarta EE. javax.servlet.* Não é mais suportado. Substitua o javax.servlet.* Importa seu código com jakarta.servlet.* .