أين أضع الملفات الثابتة لتطبيق GWT؟ مجلد الحرب أو المجلد العمومي؟
-
19-09-2019 - |
سؤال
لدي بعض ملفات JavaScript، وملف HTML الرئيسي، وملف CSS الرئيسي، وبعض ملفات CSS التي يتم استيرادها في المرحلة الرئيسية.
أفهم أنه يمكنني وضع ملفات ثابتة في مكانين: أ) مجلد "الحرب"؛ أو ب) المجلد "العام".
أين هو أفضل مكان لوضع ملفاتي الثابتة؟ هل تعامل الموقعان بشكل مختلف؟ هل هناك "أفضل الممارسات" في هذه المشكلة؟
المحلول
الفرق بين المواقع 2 هو أن الملفات الموجودة في المجلدات العامة يتم نسخها بواسطة برنامج التحويل البرمجي GWT إلى مجلد "الوحدة النمطية" في مجلد "الحرب". هذا يعني إذا قمت بنشر "الحرب" (على سبيل المثال عبر البرنامج المساعد Google إلى Google Appengine) الملفات من المجلد "العام" ليست في Toplevel.
على سبيل المثال، إذا كان لديك index.html في المجلد "العام" مع وحدة نمطية GWT باسم "MyModule" وأنت تنشره إلى www.example.com يبدو على النحو التالي، تحتاج إلى الوصول إليه عبر:
www.example.com/mymodule/index.html
إذا كان لديك index.html في مجلد "الحرب"، فستحصل على:
www.example.com/index.html
تلخيص. يجب أن تكون صفحتك المقصودة في مجلد "الحرب". يمكن أيضا تخزين ملفات الموارد المستخدمة من قبل صفحة الهبوط هنا (CSS والصور). يجب تخزين أي ملف مورد آخر يشار إليه في أي ملف وحدة نمطية GWT (أو رمز مثل الصور) في المجلد "العام" المرتبط به وحدة GWT.
نصائح أخرى
الطريقة الجديدة للعمل في GWT هي استخدام مجلد الحرب.
ولكن، إذا كان لديك مشروع عبارة عن مكتبة القطعة القابلة لإعادة الاستخدام يتم استخدامها في تطبيق GWT، فعليك وضع الموارد في المجلد العمومي. سوف يتأكد المحول البرمجي على إدراج الملفات تلقائيا في الحزمة التي تم إنشاؤها تلقائيا.
كما أراها، فإنه يعتمد على الاحتياجات الخاصة بك، ولكن دعنا نبدأ في مثال على التحدث أولا ...
أجد. توثيق (يجب أن تكون GWT 2.6.0) حول هذا لتكون غير صحيحة أو غير كاملة غير كاملة / مربكة. كما اراه (أنا لست جرو لذا يرجى تصحيح لي إذا كانت التحقيقات مخطئ!) أبحث في ما يلي مثال بنية ProJ.
myproj/
src/my/gwtproj/
client/
img/
foo1.png
AppClientBundle.java
foo2.png
public/
img/
foo3.png
foo4.png
war/
img/foo5.png
foo6.png
.classpath
.project
تخيل أننا قد (أو لا) بحاجة إلى الإشارة هذه الموارد في بعض AppClientBundle
واجهة (أو سياق مرجعي آخر):
interfaces AppClientBundle extends ClientBundle {
@Source("img/foo1.png")
ImageResource fooImg();
}
ثم يبدو ل تعتمد على الاحتياجات الخاصة بك, ، على سبيل المثال:
- RA) هذه الموارد (مثل الصور) هي المشار إليها في رمز التطبيق, ، على سبيل المثال في لدينا
AppClientBundle
واجهة عبر@Source
التوضيحية - RB) هذه الموارد هي أن تكون مجمعة بواسطة مجلدات, ، على سبيل المثال
foo2.png
ضد.img/foo1.png
- RC) يجب أن تكون هذه الموارد متاحة خارج مسار سياق URL للتطبيق المحدد، على سبيل المثال إذا استخدمت مكتبة القطعة، على سبيل المثال
http://host1/gwtapp1/foo4.png
ضد.http://host1/gwtapp2/foo4.png
- بحث وتطوير) هذه الموارد تحتاج إلى أن تكون تطبيقية - بشكل مستقل (على سبيل المثال خارجيا) - مراجع عنوان URL، على سبيل المثال
http://host1/gwtapp1/foo4.png
ضد.http://host1/foo6.png
إليك ما يمكن للمرء القيام به (الاحتمالات) وهي آثار فيما يتعلق رديئة* في الاعلى:
- P.1) (موصى به عموما كما أراها) وضع لطيف موارد منظمة مجلد تحت
my.gwtproj.client
(هنا على سبيل المثالfoo1.png
)- من هنا
@Source("img/foo1.png")...
يعمل بشكل جيد - في المستندات أعلاه يخبرون عن بعض
public
مجلد (في حالتيmy.gwtproj.public
)، ولكن خلقها كحزمة في الكسوف لا يسمح لي بذلك (منذpublic
هي كلمة مفاتيح جافا محفوظة, ، ولكن خلقها عبرNavigator
عرض الأشغال)- ومع ذلك، بهذه الطريقة
@Source
أعلاه لا يعمل (المحتمل لأنه مشكلة مع النسبيةAppClientBundle
نظام الملفات الموقع) - ومع ذلك، إذا كان المورد متاحا للجمهور بموجب سياق التطبيق، فقد يتعين على المرء القيام بذلك عن طريق هذا
public
مجلد
- ومع ذلك، بهذه الطريقة
- من هنا
- P.2) وضع الموارد "غير المجموعات" مباشرة تحت
myproj/war
, ، على سبيل المثالprojdir/war/foo6.png
- بهذه الطريقة يمكن استخدامها / وجدت في التعليقات التوضيحية، على سبيل المثال
@Source
- ويمكن الإشارة إلى خارج التطبيق نفسه عبر مثل
http://host1/foo6.png
- بهذه الطريقة يمكن استخدامها / وجدت في التعليقات التوضيحية، على سبيل المثال
- P.3) وضع موارد منظمة مجلد تحت
myproj/war
, ، على سبيل المثالprojdir/war/img/foo5.png
- على النقيض من P.2)
@Source("img/foo5.png")
لن تعمل بعد الآن
- على النقيض من P.2)