p> grundlegend
Die Konfiguration ist ein Objekt, das gemeinsame Konfigurationsinformationen auf Anwendungsebene und globale freigegebene Variablen speichert, die von der Vorlage verwendet werden können. Es ist auch verantwortlich für die Erstellung und das Ausschneiden von Vorlageninstanzen. Die Konfiguration ist tatsächlich eine Instanz des Objekts von Freemarker.template.Configuration, das mit seinem Konstruktor erstellt wurde. In der Regel verwenden Anwendungen ein gemeinsam genutztes Einzelinstanzkonfigurationsobjekt.
Konfigurationsobjekte können von der Template -Objektmethode verwendet werden. Jede Vorlageninstanz ist einer Konfigurationsinstanz zugeordnet. Es ist dem Vorlagenkonstruktor zugeordnet. Normalerweise verwenden Sie diese Methode, um das Vorlagenobjekt per configuration.getTemplate zu erhalten.
Gemeinsame Variablen
Freigegebene Variablen sind diejenigen, die für alle Vorlagen verwendet werden. Sie können gemeinsame Variablen über die setSharedVariable -Methode des Konfigurationsobjekts hinzufügen.
Konfiguration CFG = neue Konfiguration (); ... cfg.setsharedVariable ("Wrap", New WrapDirective ()); cfg.setsharedvariable ("Company", "Foo Inc."); // Verwenden von ObjectWrapper.default_wrapperAlle mit diesem Konfigurationsobjekt zugeordneten Vorlageninstanzen können Zeichenfolgen erhalten, indem Sie den TO_UPPER -Konverter, das Unternehmen, erhalten und diese Variablen nicht immer wieder zum Root hinzufügen. Wenn Sie demselben Namen eine Variable hinzufügen, überschreibt die neu hinzugefügte Variable die vorherige gemeinsame Variable.
warnen!
Wenn das Konfigurationsobjekt als Multithread bezeichnet wird, verwenden Sie die Templatemodel-Implementierungsklasse nicht als gemeinsame Variablen, da sie nicht-thread-safe sind, wie z. B. Servlet-basierte Websites.
Das Konfigurationsobjekt wird bereits mit einigen gemeinsam genutzten Konvertervariablen initialisiert:
Nennen Sie Klasse
Konfigurationsparameter
Konfigurationsparameter sind die benannten Parameter, die das Betriebsverhalten von Freemarker beeinflussen können. Zum Beispiel Gebietsschema, Number_Format.
Die Konfigurationsparameter werden in der Konfigurationsinstanz gespeichert und können durch die Vorlageninstanz geändert werden. Wenn Sie beispielsweise das Gebietsschema in der Konfiguration feststellen, werden alle Vorlagenobjekte "eN_us" verwendet, sofern Sie die SetLocale -Methode verwenden, um die Standardkonfiguration in einer einzelnen Vorlageninstanz zu ändern. Daher können die durch Konfiguration festgelegten Parameter als Standardparameter angesehen werden, die durch die auf der ersten Ebene der Vorlage festgelegten Parameter überschrieben werden können, und die von beiden festgelegten Parameterinformationen können durch die in der Umgebung festgelegten Parameter (dh die Vorlagendateianweisungen festgelegt) wie folgt überschrieben werden:
$ {1.2} <#Einstellung locale = "en_us"> $ {1.2}Sie können sich diese aufrufende Methode als 3 Ebenen vorstellen (Konfigurationsobjektebene, Vorlagenebene und laufende Umgebungsschicht). Die folgende Tabelle zeigt die Einstellungen für Parameter jeder Ebene:
Dann sind die endgültigen Ergebnisse der Konfigurationsparameter: a = 1, b = 2, c = 3, d = 1, e = 2. Der Parameter f ist wahrscheinlich null.
Wenn Sie eine Liste von Parametern abfragen möchten, die festgelegt werden können, können Sie die folgenden zwei Teile der Freemarker -API -Dokumentation konsultieren:
Alle Konfigurationsebenen
freemarker.core.configurable.setsetting (String, String)
Konfigurationsschichtkonfiguration
freemarker.template.configuration.setsetting (String, String)
Ladevorlagen
Vorlagenlader
Ein Vorlagenloader ist ein Objekt, das die Originaldaten basierend auf einem abstrakten Pfad ("index.ftl" oder "products/catalog.ftl") lädt und welche Art von Ressourcen (Dateidaten in einem Verzeichnis oder Daten in einer Datenbank) geladen wird, hängt von der spezifischen Laderimplementierung ab. Wenn Sie CFG.GetTemplate aufrufen, werden Sie Freemarker nach dem Vorlagenlader, den Sie zuvor für das Ladedatei für das Konfigurationsobjekt konfiguriert haben, aufgefragt.
Integriertes Vorlagenloader <BR /> Sie können die folgenden drei Methoden zum Einrichten der Vorlagelade verwenden
void setDirectoryForTemPlatelaDing (Datei dir);
oder
void setClassOnFortemPlatelaDing (Klasse CL, String Prefix);
oder
void setServletContextForTorTemPlatElaDing (Object ServletContext, String Path);
Die erste Methode oben gibt ein Verzeichnis in einem Dateisystem an. Freemarker wird die Vorlage in diesem Verzeichnis aufzeichnen. Unnötig zu erwähnen, dass dieses Verzeichnis existieren muss, oder eine Ausnahme wird ausgelöst.
Die zweite Methode verwendet eine Klasse als Eingabeparameter. Wenn Sie den Classloader zum Laden der Vorlage verwenden möchten, können Sie diese Methode verwenden. Diese Methode wird aufgerufen, um die Vorlagendatei zu finden. Gleichzeitig ist diese Vorlagelademethode stabiler als die vorherige, insbesondere in Produktionssystemen. Sie können Ressourcendateien, Symbole usw. problemlos in .jar -Dateien paket.
Die dritte Methode nimmt den Kontext und den Basispfad der Webanwendung (relativ zum übergeordneten Pfad von Wen-inf) als Parameter ein. Der Vorlagenloader dieser Methode lädt die Vorlage aus dem Webanwendungskontext.
Laden Vorlagen von mehreren Stellen
Wenn Sie Vorlagen an mehreren Stellen laden möchten, können Sie einen einzelnen Vorlagenloader erstellen, der verschiedenen Stellen entspricht, und dann in einen Vorlagenloader mit dem Namen Multitemplateloader und schließlich in das Konfigurationsobjekt über die Methode setzungsemplateloader (TemplatelaDelader) einstellen. Hier ist ein Beispiel für Ladevorlagen von zwei verschiedenen Orten:
Freemarker importieren.cache.*; // Vorlagenlader Live in diesem Paket ... FileTemPlateloader ftl1 = neuer FileTemPlateloader (neue Datei ("/tmp/templates"); FileTemPlatEloader ftl2 = new FileTemPlatEloader (neue Datei ("/usr/data/templates"); ClasstemPlateloader ctl = new ClasStemPlatelaDer (getClass (), ""); Templateloader [] lader = new templateloader [] {ftl1, ftl2, ctl}; Multitemplateloader mtl = neuer MultitemplatelaDer (Loader); cfg.settemplateloader (MTL);Freemarker sucht zunächst nach der Vorlagendatei im Pfad /TMP /Vorlagen. Wenn es nicht gefunden wird, kehren Sie zum Pfad/USR/Daten/Vorlagen zurück. Wenn es nicht gefunden wird, versuchen Sie, es in Klassenlader zu laden.
Holen Sie sich Vorlagendateien aus anderen Ressourcen
Wenn keiner dieser integrierten Vorlagenlader Ihren Anforderungen entspricht, können Sie einen Vorlagenloader selbst anpassen, einfach die Schnittstelle für Freemarker.cache.templateloader implementieren und dann über die Methode setzungsemplateloader (templatelaLader lader) an das Konfigurationsobjekt weitergeben.
Cache -Vorlage
Freemarker Caches -Vorlagen bedeutet, dass Freemarker, wenn Sie eine Vorlage über die GetTemplate -Methode erhalten, nicht nur ein Vorlagenobjekt zurückgibt, sondern auch das Objekt zwischenspeichert. Wenn Sie die Vorlage beim nächsten Mal mit demselben Pfad anfordern, wird das Vorlagenobjekt im Cache zurückgegeben. Wenn Sie die Vorlagendatei ändern, wird Freemarker beim nächsten Mal die Vorlage erhalten, die Vorlage automatisch neu laden und erneut anordnen. Wenn es sich um eine zeitaufwändige Operation handelt, um direkt zu bestimmen, ob eine Datei geändert wurde, bietet Freemarker einen Konfigurationsparameter "Aktualisierungsverzögerung" auf der Ebene der Konfigurationsobjekte. Dieser Parameter bedeutet, wie lange es dauert, bis Freemarker die Version der Vorlage ermittelt hat. Die Standardeinstellung beträgt 5 Sekunden, was bedeutet, dass jede 5 Sekunden bestimmt, ob die Vorlage geändert wurde. Wenn Sie ein Echtzeit-Urteil fällen möchten, setzen Sie diesen Parameter auf 0. Eine weitere zu beachten, dass nicht alle Lader diese Urteilsmethode unterstützen. Beispielsweise wird der Vorlagenlader basierend auf Klassenlader nicht festgestellt, dass Sie die Vorlagendatei geändert haben.
Auf diese Weise löscht Freemarker die Vorlage im Cache. Tatsächlich kann der Cache-Teil als Komponente zu Freemarker hinzugefügt werden (dh ein Cache-Schema von Drittanbietern). Sie können dies erreichen, indem Sie den Parameter cache_storage einstellen. Es reicht für die meisten Entwickler aus, Freemarker.cache.mrucachestorage zu implementieren, die mit Freemarker einhergeht. Dieser Cache verwendet 2 Ebenen der zuletzt verwendeten Richtlinien. Auf der ersten Ebene verwenden alle Cache -Einträge starke Referenzen: Die Einträge sind nicht durch die JVM, leise Referenzen, die relativ schwache Referenzen sind. Bis die maximale Zeit erreicht ist, werden die Einträge, die kürzlich am wenigsten verwendet werden, in den sekundären Cache verschoben. Auf dieser Ebene ist der Eintrag nur schwach verwiesen, bis er den Ablauf erreicht. Wenn die Größe der referenzierten und starken referenzierten Regionen im Konstruktor festgelegt werden kann, können Sie den folgenden Code verwenden, wenn Sie beispielsweise den starken referenzierten Bereich und den schwachen referenzierten Bereich auf 250 festlegen möchten:
CFG.SetCachestorage (New Freemarker.Cache.Mrucachestorage (20, 250))
Da Mrucachestorage die Standard -Cache -Implementierung ist, können Sie sie auch so festlegen:
CFG.Setsetting (configuration.cache_storage_key, "Strong: 20, Soft: 250");
Wenn Sie eine neue Konfiguration erstellen, wird sie standardmäßig mit dem Mrucachestorage -Cache implementiert, und der Standardwert maxstrongSize ist gleich 0, und MaxSoftSize ist gleich integer.max_value (dh der theoretische Maximalwert). Für Hochlastsysteme empfehlen wir jedoch, maxstrongsize auf einen Nicht-0-Wert festzulegen, andernfalls führt dies zu häufigem Nachladen und Wiederieren der Vorlage.
Ausnahmebehandlung
Mögliche Ausnahmen
Ausnahmen von Freemarker können im Allgemeinen in die folgenden Kategorien eingeteilt werden:
Ausnahmen in der Initialisierungsphase von Freemarker : Normalerweise müssen Sie Freemarker nur einmal in Ihrer Anwendung initialisieren, und die in diesem Zeitraum generierte Ausnahme wird als Initialisierungsausnahme bezeichnet.
Ausnahmen während der Lade- und Parsenvorlage : Wenn Sie die Vorlage über die Konfiguration erhalten.GetTemplate () (wenn die Vorlage vorher nicht zwischenstrahlt ist) werden zwei Arten von Ausnahmen generiert:
IOException: Da die Vorlage nicht gefunden wird oder andere IO -Ausnahmen beim Lesen der Vorlage auftreten, wie Sie nicht die Erlaubnis haben, die Datei zu lesen, usw.; Freemarker.core.ParseException Da die Syntax der Vorlagendatei falsch ist;
Ausnahmen während der Ausführung: Wenn Sie die Vorlage aufrufen.
IoException Ein Fehler, der beim Schreiben von Daten in der Ausgabe auftritt; freemarker.template.templatexception Andere Ausnahmen, die während der Laufzeit generiert wurden, z. B. der häufigste Fehler ist, dass sich die Vorlage auf eine Variable bezieht, die nicht existiert.