
Tommybox هي حاوية قابلة للتنفيذ قائمة بذاتها تتيح تشغيل تطبيقات الويب الثابتة والديناميكية على سطح المكتب من خلال توفير وظائف الخادم والمتصفح المدمج.
يشبه Tommybox الإلكترون و NW.JS.
يمكن توفير تطبيق كدليل أو معبأة كأرشيف للحرب (أو الرمز البريدي) يمكن أن يحتوي على JSP ، Servlets ، وأشياء ثابتة مثل CSS ، JavaScript ، إلخ.
تحت الغطاء ، تم تصميم Tommybox على رأس خادم الويب Tommy و SWT مستعرض. يمكن تعبئة التطبيق كأرشيف للحرب أو الرمز البريدي ويمكن أن يحتوي اختياريًا على بيان PWA و 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.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 | حجم النافذة كسلسلة على سبيل المثال: 640 × 480 |
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.* .