P> Basic
التكوين هو كائن يخزن معلومات التكوين الشائعة على مستوى التطبيق والمتغيرات المشتركة العالمية التي يمكن استخدامها بواسطة القالب. كما أنها مسؤولة عن إنشاء وتخزين المؤقتة لحالات القالب. التكوين هو في الواقع مثيل لكائن freemarker.template.configuration ، تم إنشاؤه باستخدام مُنشئه. عادة ، تستخدم التطبيقات كائن تكوين مثيل واحد مشترك.
يمكن استخدام كائنات التكوين بواسطة طريقة كائن القالب. يرتبط كل مثيل قالب بمثيل التكوين. يرتبط مع مُنشئ القالب. عادةً ما تستخدم هذه الطريقة للحصول على كائن القالب بواسطة configuration.getTemplate.
المتغيرات المشتركة
المتغيرات المشتركة هي تلك المحددة للاستخدام من قبل جميع القوالب. يمكنك إضافة متغيرات مشتركة من خلال طريقة setSharedVariable لكائن التكوين.
التكوين cfg = تكوين جديد () ؛ ... cfg.setsharedVariable ("wrap" ، wrapdirective ()) ؛ cfg.setsharedVariable ("Company" ، "Foo Inc.") ؛ // باستخدام ObjectWrapper.default_wrapperيمكن لجميع مثيلات القالب المرتبطة بكائن التكوين هذا الحصول على سلاسل عن طريق الحصول على محول TO_UPPER ، وبالتالي لا تحتاج إلى إضافة هذه المتغيرات إلى الجذر مرارًا وتكرارًا. إذا قمت بإضافة متغير بنفس الاسم إلى الجذر ، فسيقوم المتغير المضافة حديثًا بكتابة المتغير المشترك السابق.
حذر!
إذا تم استدعاء كائن التكوين multureded ، فلا تستخدم فئة تنفيذ TemplateModel كمتغيرات مشتركة ، لأنها غير آمنة ، مثل مواقع الويب المستندة إلى Servlet.
تتم تهيئة كائن التكوين مع بعض متغيرات المحول المشترك بالفعل:
فئة الاسم
معلمات التكوين
معلمات التكوين هي تلك المعلمات المسماة التي يمكن أن تؤثر على السلوك التشغيلي لـ Freemarker. على سبيل المثال ، locale ، number_format.
يتم تخزين معلمات التكوين في مثيل التكوين ، ويمكن تعديلها بواسطة مثيل القالب. على سبيل المثال ، إذا قمت بتعيين لغة مساوية لـ "EN_US" في التكوين ، فسيتم استخدام جميع كائنات القالب ، "EN_US" ما لم تستخدم طريقة setLocale لتعديل التكوين الافتراضي في مثيل قالب واحد. لذلك ، يمكن اعتبار المعلمات التي يتم تعيينها حسب التكوين معلمات افتراضية ، والتي يمكن الكتابة عليها من خلال المعلمات المحددة في المستوى الأول من القالب ، ويمكن كتابة معلومات المعلمة التي تم تعيينها بواسطة كلاهما بواسطة المعلمات المحددة في البيئة (أي مجموعة تعليمات ملف القالب) على النحو التالي:
$ {1.2} <#setting locale = "en_us"> $ {1.2}يمكنك أن تتخيل طريقة الاتصال هذه على أنها 3 طبقات (طبقة كائن التكوين ، طبقة القالب ، وطبقة البيئة الجارية). يوضح الجدول التالي إعدادات المعلمات لكل طبقة:
ثم النتائج النهائية لمعلمات التكوين هي: a = 1 ، b = 2 ، c = 3 ، d = 1 ، e = 2. من المحتمل أن تكون المعلمة f فارغة.
إذا كنت ترغب في الاستعلام عن قائمة بالمعلمات التي يمكن تعيينها ، فيمكنك الرجوع إلى الجزءين التاليين من وثائق واجهة برمجة تطبيقات Freemarker:
جميع طبقات التكوين
freemarker.core.configable.setsetting (سلسلة ، سلسلة)
تكوين طبقة التكوين
freemarker.template.configuration.setsetting (سلسلة ، سلسلة)
قوالب التحميل
القالب اللودر
محمل القالب هو كائن يقوم بتحميل البيانات الأصلية استنادًا إلى مسار مجردة ("index.ftl" أو "Products/Catalog.ftl") ، ويتم تحميل أي نوع من الموارد (بيانات الملف في دليل أو بيانات في قاعدة بيانات) على تطبيق المحمل المحدد. عند الاتصال بـ cfg.getTemplate ، ستطلب منك FreeMarker محمل القالب الذي قمت بتكوينه إلى كائن التكوين من قبل ، وهو المسؤول عن تحميل الملف.
محمل القالب المدمج <br /> يمكنك استخدام الطرق الثلاث التالية لإعداد تحميل القالب
void setDirectoryfortEmplateLoading (file dir) ؛
أو
void setClassFortEmplateLoading (Class CL ، prefix سلسلة) ؛
أو
void setServletContextfortEmplateLoading (كائن servletContext ، مسار السلسلة) ؛
تحدد الطريقة الأولى أعلاه دليلًا في نظام الملفات. سيقوم Freemarker بتسجيل القالب في هذا الدليل. وغني عن القول ، يجب أن يكون هذا الدليل موجودًا ، أو سيتم طرح استثناء.
تستخدم الطريقة الثانية فئة كمعلمة إدخال. عندما تريد استخدام ClassLoader لتحميل القالب ، يمكنك استخدام هذه الطريقة. سيتم استدعاء هذه الطريقة للعثور على ملف القالب. في الوقت نفسه ، تكون طريقة تحميل القالب هذه أكثر استقرارًا من طريقة السابقة ، وخاصة في أنظمة الإنتاج. يمكنك بسهولة حزم ملفات الموارد ، الرموز ، إلخ. في ملفات .jar.
تأخذ الطريقة الثالثة السياق والمسار الأساسي لتطبيق الويب (نسبة إلى المسار الأصل لـ WEN-INF) كمعلمات. سيقوم محمل القالب بهذه الطريقة بتحميل القالب من سياق تطبيق الويب.
تحميل القوالب من مواقع متعددة
إذا كنت ترغب في تحميل قوالب من مواقع متعددة ، فيمكنك إنشاء محمل قالب واحد يتوافق مع مواقع مختلفة ، ثم لفها في محمل قالب يسمى MultiTemplateloader ، وأخيراً تعيينه على كائن التكوين من خلال الطريقة STEDEMITELOADER (Templateloader Loader). فيما يلي مثال على تحميل القوالب من موقعين مختلفين:
استيراد freemarker.cache.*؛ // قوالب اللوادر يعيشون في هذه الحزمة ... fileTemplateloader ftl1 = new FileTemplateloader (ملف جديد ("/tmp/templates")) ؛ fileTemplateloader ftl2 = new FileTemplateloader (ملف جديد ("/usr/data/templates")) ؛ classtemplateloader ctl = new classtemplateloader (getClass () ، "") ؛ Templateloader [] loaders = new Templateloader [] {ftl1 ، ftl2 ، ctl} ؛ multiTemplateloader MTL = جديد multitemplateloader (اللوادر) ؛ cfg.settemplateloader (MTL) ؛سيقوم Freemarker أولاً بالبحث عن ملف القالب في المسار /TMP /Templates. إذا لم يتم العثور عليها ، فاعاد إلى المسار/usr/data/templates. إذا لم يتم العثور عليها ، فحاول تحميله في فئة Loader.
احصل على ملفات القالب من موارد أخرى
إذا لم يفي أي من اللوادر المدمجة في القالب المدمج بمتطلباتك ، فيمكنك تخصيص محمل قالب بنفسك ، فقط قم بتنفيذ واجهة freemarker.cache.templateloader ، ثم تمريرها إلى كائن التكوين من خلال الطريقة SetTermeLateLoader (Templateloader Loader).
قالب ذاكرة التخزين المؤقت
تعني قوالب Caches Freemarker أنه عندما تحصل على قالب من خلال طريقة getTemplate ، لن يعيد Freemarker كائن قالب ، ولكن أيضًا تخزين الكائن. عندما تطلب القالب مع نفس المسار في المرة القادمة ، فإنه سيعيد كائن القالب في ذاكرة التخزين المؤقت. إذا قمت بتغيير ملف القالب ، في المرة القادمة التي تحصل فيها على القالب ، فسيقوم FreeMarker بإعادة تحميل القالب وإعادة تهذيبه تلقائيًا. على الرغم من ذلك ، إذا كانت عملية تستغرق وقتًا طويلاً لتحديد ما إذا كان قد تم تعديل ملف ، فإن FreeMarker يوفر معلمة تكوين "تأخير تحديث" على مستوى كائن التكوين. هذه المعلمة تعني المدة التي يستغرقها Freemarker لتحديد إصدار القالب. الإعداد الافتراضي هو 5 ثوان ، مما يعني أن كل 5 ثوانٍ ستحدد ما إذا كان قد تم تعديل القالب. إذا كنت ترغب في إصدار حكم في الوقت الفعلي ، فقم بتعيين هذه المعلمة على 0. شيء آخر يجب ملاحظته هو أنه لا يدعم كل اللوادر طريقة الحكم هذه. على سبيل المثال ، لن يجد محمل القالب الذي يستند إلى تحميل الفئة أنك قمت بتعديل ملف القالب.
هذه هي الطريقة التي يحذف بها Freemarker القالب في ذاكرة التخزين المؤقت ، يمكنك استخدام طريقة كائن التكوين ClearTemplateCache لتوضيح كائنات القالب في ذاكرة التخزين المؤقت يدويًا. في الواقع ، يمكن إضافة جزء ذاكرة التخزين المؤقت إلى Freemarker كمكون (أي ، يمكنه استخدام مخطط ذاكرة التخزين المؤقت لجهة خارجية). يمكنك تحقيق ذلك عن طريق تعيين معلمة Cache_Storage. يكفي لمعظم المطورين لتنفيذ freemarker.cache.mrucachestorage الذي يأتي مع علامة تجارية. يستخدم هذا ذاكرة التخزين المؤقت مستويين من السياسة المستخدمة مؤخرًا. في المستوى الأول ، تستخدم جميع إدخالات ذاكرة التخزين المؤقت مراجع قوية: الإدخالات غير واضحة من قبل JVM ، المراجع بهدوء مراجع ضعيفة نسبيًا. حتى يتم الوصول إلى الحد الأقصى للوقت ، سيتم نقل تلك الإدخالات التي يتم استخدامها مؤخرًا إلى ذاكرة التخزين المؤقت الثانوية. في هذا المستوى ، يتم الإشارة إلى كل الإدخال ضعيفًا حتى يصل إلى انتهاء الصلاحية. إذا كان يمكن تعيين حجم المناطق المرجعية المرجعية والقوية في المنشئ ، على سبيل المثال ، إذا كنت ترغب في تعيين المنطقة المرجعية القوية على 20 والمنطقة المرجعية الضعيفة إلى 250 ، يمكنك استخدام الرمز التالي:
cfg.setcachestorage (new freemarker.cache.mrucachestorage (20 ، 250))
نظرًا لأن Mrucachestorage هو تطبيق ذاكرة التخزين المؤقت الافتراضية ، يمكنك أيضًا تعيينه مثل هذا:
cfg.setsetting (configuration.cache_storage_key ، "Strong: 20 ، Soft: 250") ؛
عندما تقوم بإنشاء تكوين جديد ، يتم تنفيذها افتراضيًا باستخدام ذاكرة التخزين المؤقت Mrucachestorage ، والقيمة الافتراضية maxstrongsize تساوي 0 ، ويساوي maxsoftsize integer.max_value (أي القيمة القصوى النظرية). ومع ذلك ، بالنسبة للأنظمة ذات التحميل العالي ، نوصي بإعداد MaxStrongsize إلى قيمة غير 0 ، وإلا فإنه سيؤدي إلى إعادة التحميل بشكل متكرر وإعادة تشغيل القالب.
معالجة الاستثناء
استثناءات ممكنة
يمكن تصنيف الاستثناءات التي تم إنشاؤها بواسطة Freemarker بشكل عام في الفئات التالية:
الاستثناءات التي تم إنشاؤها في مرحلة التهيئة لـ FreeMarker : عادةً ما تحتاج إلى تهيئة علامة FreeMarker مرة واحدة في التطبيق الخاص بك ، ويسمى الاستثناء الذي تم إنشاؤه في هذه الفترة الزمنية استثناء التهيئة.
استثناءات أثناء قالب التحميل والتحليل : عندما تحصل على القالب من خلال configuration.getTemplate () طريقة (إذا لم يتم تخزين القالب من قبل) ، سيتم إنشاء نوعين من الاستثناءات:
IoException: نظرًا لعدم العثور على القالب ، أو تحدث استثناءات أخرى IO عند قراءة القالب ، مثل ليس لديك إذن لقراءة الملف ، إلخ. ؛ freemarker.core.parseException لأن بناء جملة ملف القالب غير صحيح ؛
استثناءات أثناء التنفيذ: عند استدعاء القالب. طريقة (...) ، سيتم طرح نوعين من الاستثناءات:
IoException خطأ يحدث عند كتابة البيانات في الإخراج ؛ freemarker.template.templatexception استثناءات أخرى تم إنشاؤها أثناء وقت التشغيل ، مثل الخطأ الأكثر شيوعًا هو أن القالب يشير إلى متغير غير موجود ؛