
Tommybox เป็นคอนเทนเนอร์ที่ใช้งานได้แบบสแตนด์อโลนซึ่งทำให้สามารถเปิดใช้งานเว็บแอพพลิเคชั่นแบบคงที่และแบบไดนามิกบนเดสก์ท็อปโดยให้ฟังก์ชั่นเซิร์ฟเวอร์และเบราว์เซอร์ในตัว
Tommybox คล้ายกับอิเล็กตรอนและ NW.JS.
แอพสามารถให้เป็นไดเรกทอรีหรือบรรจุเป็นคลังเก็บสงคราม (หรือซิป) ที่สามารถมี JSP, servlets และสิ่งของคงที่เช่น CSS, JavaScript ฯลฯ
ภายใต้ประทุน Tommybox สร้างขึ้นบนเว็บเซิร์ฟเวอร์ Tommy และวิดเจ็ตเบราว์เซอร์ SWT แอพสามารถบรรจุเป็นสงครามหรือ zip เก็บถาวรและสามารถเลือก PWA Manifest, JSP, Servlets และสิ่งของคงที่ทั้งหมดเช่น 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เรียกใช้ไฟล์ zip (หรือสงคราม) ที่มีบรรทัดคำสั่งที่กำหนดเอง args:
java -jar tb.jar --app MyKillerApp.war myparam1 myparam2 ...เรียกใช้ zip (หรือสงคราม) จากเว็บเซิร์ฟเวอร์:
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.jarapp.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 | ตำแหน่งหน้าต่างพิกัด (เป็นพิกเซล) |
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" );
// ...
Q. แอปของฉันล้มเหลวด้วย java.lang.ClassNotFoundException: javax.servlet.*
A. อันเป็นผลมาจากการย้ายจาก Java EE ไปยังจาการ์ตา EE เริ่มต้นจาก V10 Apache Tomcat รองรับเฉพาะสเป็คจาการ์ตา EE javax.servlet.* ไม่ได้รับการสนับสนุนอีกต่อไป แทนที่ javax.servlet.* นำเข้าในรหัสของคุณด้วย jakarta.servlet.*