P> BASIC
Konfigurasi adalah objek yang menyimpan informasi konfigurasi umum di tingkat aplikasi dan variabel bersama global yang dapat digunakan oleh templat. Ini juga bertanggung jawab atas penciptaan dan caching instance template. Konfigurasi sebenarnya adalah instance dari objek freemarker.template.configuration, dibuat menggunakan konstruktornya. Biasanya, aplikasi menggunakan objek konfigurasi instance tunggal bersama.
Objek konfigurasi dapat digunakan dengan metode objek template. Setiap instance template dikaitkan dengan instance konfigurasi. Ini terkait dengan konstruktor template. Biasanya Anda menggunakan metode ini untuk mendapatkan objek template dengan configuration.gettemplate.
Variabel bersama
Variabel bersama adalah yang didefinisikan untuk digunakan oleh semua templat. Anda dapat menambahkan variabel bersama melalui metode setSharedVariable dari objek konfigurasi.
Konfigurasi cfg = konfigurasi baru (); ... cfg.setSharedVariable ("Wrap", New WrapDirective ()); cfg.setSharedVariable ("Company", "Foo Inc."); // Menggunakan ObjectWrapper.default_wrapperSemua instance template yang terkait dengan objek konfigurasi ini dapat memperoleh string dengan mendapatkan konverter TO_UPPER, perusahaan, sehingga Anda tidak perlu menambahkan variabel -variabel ini untuk root lagi dan lagi. Jika Anda menambahkan variabel dengan nama yang sama untuk root, variabel yang baru ditambahkan akan menimpa variabel bersama sebelumnya.
memperingatkan!
Jika objek konfigurasi disebut multithreaded, jangan gunakan kelas implementasi TemplateModel sebagai variabel bersama, karena mereka tidak aman, seperti situs web berbasis servlet.
Objek konfigurasi sudah diinisialisasi dengan beberapa variabel konverter bersama:
Kelas Nama
Parameter Konfigurasi
Parameter konfigurasi adalah parameter bernama yang dapat mempengaruhi perilaku operasional freemarker. Misalnya, lokal, number_format.
Parameter konfigurasi disimpan dalam instance konfigurasi, dan mereka dapat dimodifikasi dengan instance template. Misalnya, jika Anda mengatur lokal yang sama dengan "en_us" dalam konfigurasi, maka semua objek templat akan digunakan, "en_us" kecuali Anda menggunakan metode setLocale untuk memodifikasi konfigurasi default dalam instance templat tunggal. Oleh karena itu, parameter yang ditetapkan berdasarkan konfigurasi dapat dianggap sebagai parameter default, yang dapat ditimpa dengan parameter yang ditetapkan pada tingkat pertama templat, dan informasi parameter yang ditetapkan oleh keduanya dapat ditimpa oleh parameter yang ditetapkan dalam lingkungan (yaitu, instruksi file templat yang ditetapkan) sebagai berikut:
$ {1.2} <#pengaturan locale = "en_us"> $ {1.2}Anda dapat membayangkan metode panggilan ini sebagai 3 lapisan (lapisan objek konfigurasi, lapisan templat, dan menjalankan lapisan lingkungan). Tabel berikut menunjukkan pengaturan untuk parameter setiap lapisan:
Maka hasil akhir dari parameter konfigurasi adalah: a = 1, b = 2, c = 3, d = 1, e = 2. Parameter F kemungkinan nol.
Jika Anda ingin meminta daftar parameter yang dapat diatur, Anda dapat berkonsultasi dengan dua bagian berikut dari dokumentasi API Freemarker:
Semua lapisan konfigurasi
freemarker.core.configacle.setsetting (string, string)
Konfigurasi Lapisan Konfigurasi
freemarker.template.configuration.setsetting (string, string)
Memuat template
Template Loader
Loader template adalah objek yang memuat data asli berdasarkan jalur abstrak ("index.ftl" atau "produk/katalog.ftl"), dan sumber daya apa (data file dalam direktori atau data dalam database) dimuat tergantung pada implementasi loader spesifik. Saat Anda memanggil cfg.gettemplate, Freemarker akan meminta Anda pemuatan template yang Anda konfigurasikan ke objek konfigurasi sebelumnya, yang bertanggung jawab atas pemuatan file.
Loader template bawaan <BR /> Anda dapat menggunakan tiga metode berikut untuk mengatur pemuatan template
void setDirectoryFortemplatLoading (file dir);
atau
void setclassfortemplateloading (kelas cl, awalan string);
atau
void setSerVletContextFortemplateLoading (Object ServletContext, String Path);
Metode pertama di atas menentukan direktori dalam sistem file. Freemarker akan merekam templat di direktori ini. Tak perlu dikatakan, direktori ini harus ada, atau pengecualian akan dilemparkan.
Metode kedua menggunakan kelas sebagai parameter input. Ketika Anda ingin menggunakan ClassLoader untuk memuat templat, Anda dapat menggunakan metode ini. Metode ini akan dipanggil untuk menemukan file template. Pada saat yang sama, metode pemuatan template ini lebih stabil daripada yang sebelumnya, terutama dalam sistem produksi. Anda dapat dengan mudah mengemas file sumber daya, ikon, dll. Ke dalam file .jar.
Metode ketiga mengambil konteks dan jalur dasar aplikasi web (relatif terhadap jalur induk Wen-Inf) sebagai parameter. Loader template dari metode ini akan memuat template dari konteks aplikasi web.
Memuat templat dari beberapa lokasi
Jika Anda ingin memuat templat dari beberapa lokasi, Anda dapat membuat loader templat tunggal yang sesuai dengan lokasi yang berbeda, dan kemudian membungkusnya dalam loader template yang disebut multitemplateloader, dan akhirnya mengaturnya ke objek konfigurasi melalui metode settemplateloader (TemplatEdoader loader). Berikut adalah contoh templat pemuatan dari dua lokasi yang berbeda:
impor freemarker.cache.*; // Template Loader tinggal di paket ini ... FileTemplatEdoader ftl1 = new FileTemplateLoader (file baru ("/tmp/template")); FileTemplateloader ftl2 = baru filetemplateLoader (file baru ("/usr/data/templat")); Classtemplateloader ctl = classtemplateloader baru (getClass (), ""); Templateloader [] loaders = TemplatEdoader baru [] {ftl1, ftl2, ctl}; Multitemplateloader mtl = multitemplateloader baru (loader); cfg.settemplateloader (MTL);Freemarker pertama -tama akan mencari file template di path /tmp /template. Jika tidak ditemukan, maka kembali ke jalur/usr/data/templat. Jika tidak ditemukan, maka cobalah memuatnya di class-loader.
Dapatkan file template dari sumber daya lain
Jika tidak ada loader template bawaan ini yang memenuhi kebutuhan Anda, Anda dapat menyesuaikan sendiri Template Loader, cukup terapkan antarmuka freemarker.cache.templateLoader, dan kemudian berikan ke objek konfigurasi melalui metode settemplateloader (TemplateLoader loader).
Template cache
Templat cache Freemarker berarti bahwa ketika Anda mendapatkan template melalui metode Gettemplate, Freemarker tidak hanya akan mengembalikan objek template, tetapi juga cache objek. Saat Anda meminta templat dengan jalur yang sama lain kali, itu akan mengembalikan objek template di cache. Jika Anda mengubah file template, maka lain kali Anda mendapatkan template, Freemarker akan secara otomatis memuat ulang dan memisahkan kembali template. Meskipun demikian, jika ini adalah operasi yang memakan waktu untuk secara langsung menentukan apakah suatu file telah dimodifikasi, Freemarker memberikan parameter konfigurasi "Pembaruan Delay" pada tingkat objek konfigurasi. Parameter ini berarti berapa lama bagi Freemarker untuk menentukan versi templat. Pengaturan default adalah 5 detik, yang berarti bahwa setiap 5 detik akan menentukan apakah templat telah dimodifikasi. Jika Anda ingin membuat penilaian waktu nyata, atur parameter ini ke 0. Hal lain yang perlu diperhatikan adalah bahwa tidak semua loader mendukung metode penilaian ini. Misalnya, loader template berdasarkan kelas-loader tidak akan menemukan bahwa Anda telah memodifikasi file template.
Beginilah cara freemarker menghapus templat dalam cache, Anda dapat menggunakan metode objek konfigurasi cleartemplatecache untuk secara manual mengklarifikasi objek templat dalam cache. Faktanya, bagian cache dapat ditambahkan ke Freemarker sebagai komponen (yaitu, ia dapat menggunakan skema cache pihak ketiga). Anda dapat mencapainya dengan mengatur parameter Cache_Storage. Cukup bagi sebagian besar pengembang untuk mengimplementasikan freemarker.cache.mrucachestorage yang datang dengan freemarker. Cache ini menggunakan 2 tingkat kebijakan yang paling baru digunakan. Pada tingkat pertama, semua entri cache menggunakan referensi yang kuat: entri tidak jelas oleh JVM, referensi lembut yang relatif lemah referensi. Sampai waktu maksimum tercapai, entri -entri yang paling tidak baru digunakan akan dipindahkan ke cache sekunder. Pada level ini, entri semua lemah direferensikan sampai mencapai kedaluwarsa. Jika ukuran daerah yang direferensikan dan kuat dapat diatur dalam konstruktor, misalnya, jika Anda ingin mengatur wilayah yang dirujuk kuat ke 20 dan wilayah yang dirujuk lemah ke 250, Anda dapat menggunakan kode berikut:
cfg.setCachestorage (baru freemarker.cache.mrucachestorage (20, 250))
Karena Mrucachestorage adalah implementasi cache default, Anda juga dapat mengaturnya seperti ini:
cfg.setsetting (configuration.cache_storage_key, "Strong: 20, Soft: 250");
Saat Anda membuat konfigurasi baru, itu diimplementasikan secara default menggunakan cache mrucachestorage dan nilai default maxstrongSize sama dengan 0, dan maxSoftSize sama dengan integer.max_value (yaitu, nilai maksimum teoritis). Namun, untuk sistem beban tinggi, kami sarankan mengatur maxStrongsize ke nilai non-0, jika tidak, ia akan sering menyebabkan pemuatan ulang dan pelarangan ulang templat yang sering.
Penanganan pengecualian
Kemungkinan pengecualian
Pengecualian yang dihasilkan oleh Freemarker umumnya dapat diklasifikasikan ke dalam kategori berikut:
Pengecualian yang dihasilkan dalam tahap inisialisasi Freemarker : biasanya, Anda hanya perlu menginisialisasi freemarker sekali dalam aplikasi Anda, dan pengecualian yang dihasilkan dalam periode waktu ini disebut pengecualian inisialisasi.
Pengecualian Selama Template Pemuatan dan Parsing : Saat Anda mendapatkan templat melalui metode konfigurasi.gettemplate () (jika templat tidak di -cache sebelumnya), dua jenis pengecualian akan dihasilkan:
IOException: Karena templat tidak ditemukan, atau pengecualian IO lainnya terjadi saat membaca templat, seperti Anda tidak memiliki izin untuk membaca file, dll.; freemarker.core.parseException karena sintaks file template salah;
Pengecualian Selama Eksekusi: Saat Anda memanggil metode template.process (...), dua jenis pengecualian akan dilemparkan:
IoException kesalahan yang terjadi saat menulis data dalam output; freemarker.template.templatException Pengecualian lain yang dihasilkan selama runtime, seperti kesalahan yang paling umum adalah bahwa templat mengacu pada variabel yang tidak ada;