tommybox
v2.14.2

Tommybox是一个独立的可执行容器,可以通过提供内置服务器和浏览器功能在桌面上启动静态和动态的Web应用程序。
Tommybox类似于Electron和NW.J。
一个应用程序可以作为目录或包装作为战争(或zip)档案的目录提供,该档案可以包含JSP,Servlet和CSS,JavaScript等静态物品。
在引擎盖下,Tommybox建立在Tommy Web服务器和SWT浏览器小部件的顶部。应用程序可以用作战争或邮政编码的包装,并且可以选择包含PWA清单,JSP,Servlet和所有静态内容,例如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(或战争)文件:
java -jar tb.jar --app MyKillerApp.war使用自定义命令行args运行zip(或战争)文件:
java -jar tb.jar --app MyKillerApp.war myparam1 myparam2 ...从Web服务器运行ZIP(或WAR):
java -jar tb.jar --app https://example.com/MyKillerApp.zip从目录运行爆炸的Web应用程序:
java -jar tb.jar --app MyKillerAppDir运行受密码保护的ZIP(或战争)档案:
java -jar tb.jar --app MyKillerApp.zip --password mysecrettb.jar的/app目录中。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 | 标准PWA display模式。可能的值: 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: | 退出OS | <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.*
答:由于从v10开始,Apache Tomcat仅支持Jakarta EE Spec。 javax.servlet.*不再支持。替换javax.servlet.*用jakarta.servlet.* 。