p> basique
La configuration est un objet qui stocke les informations de configuration communes au niveau de l'application et les variables partagées globales qui peuvent être utilisées par le modèle. Il est également responsable de la création et de la mise en cache des instances de modèle. La configuration est en fait une instance de l'objet Freemarker.Template.Configuration, créé à l'aide de son constructeur. En règle générale, les applications utilisent un objet de configuration d'instance unique partagé.
Les objets de configuration peuvent être utilisés par la méthode des objets de modèle. Chaque instance de modèle est associée à une instance de configuration. Il est associé au constructeur de modèle. Habituellement, vous utilisez cette méthode pour obtenir l'objet de modèle par configuration.getTemplate.
Variables partagées
Les variables partagées sont celles définies pour une utilisation par tous les modèles. Vous pouvez ajouter des variables partagées via la méthode SetSharedVariable de l'objet de configuration.
Configuration cfg = new configuration (); ... cfg.setSharedVariable ("wrap", new wrapdirective ()); cfg.setSharedVariable ("Company", "Foo Inc."); // Utilisation d'ObjectWrapper.default_WrapperToutes les instances de modèle associées à cet objet de configuration peuvent obtenir des chaînes en obtenant le convertisseur TO_UPPER, l'entreprise, et vous n'avez donc pas besoin d'ajouter ces variables pour rooter encore et encore. Si vous ajoutez une variable avec le même nom à root, la variable nouvellement ajoutée écrasera la variable partagée précédente.
avertir!
Si l'objet de configuration est appelé multithread, n'utilisez pas la classe d'implémentation TemplateModel comme variables partagées, car ce sont des sites Web non-Thread-SAFE, tels que les sites Web basés sur les servlet.
L'objet de configuration est initialisé avec quelques variables de convertisseur partagées déjà:
Classe de noms
Paramètres de configuration
Les paramètres de configuration sont les paramètres nommés qui peuvent affecter le comportement opérationnel de Freemarker. Par exemple, Locale, Number_Format.
Les paramètres de configuration sont stockés dans l'instance de configuration, et ils peuvent être modifiés par l'instance de modèle. Par exemple, si vous définissez les paramètres régionaux égaux à "EN_US" dans la configuration, tous les objets de modèle seront utilisés, "EN_US" Sauf si vous utilisez la méthode SetLocale pour modifier la configuration par défaut dans une instance de modèle unique. Par conséquent, les paramètres définis par configuration peuvent être considérés comme des paramètres par défaut, qui peuvent être remplacés par les paramètres définis au premier niveau du modèle, et les informations des paramètres définies par les deux peuvent être écrasées par les paramètres définis dans l'environnement (c'est-à-dire les instructions de fichiers de modèle définies) comme suit:
$ {1.2} <# Définition des paramètres locale = "en_us"> $ {1.2}Vous pouvez imaginer cette méthode d'appel comme 3 couches (calque d'objet de configuration, couche de modèle et couche d'environnement en cours d'exécution). Le tableau suivant montre les paramètres des paramètres de chaque couche:
Ensuite, les résultats finaux des paramètres de configuration sont les suivants: a = 1, b = 2, c = 3, d = 1, e = 2. Le paramètre F est probablement nul.
Si vous souhaitez interroger une liste de paramètres qui peuvent être définis, vous pouvez consulter les deux parties suivantes de la documentation de l'API Freemarker:
Toutes les couches de configuration
freemarker.core.configurable.setseting (chaîne, chaîne)
Configuration de la couche de configuration
freemarker.template.configuration.setsetting (String, String)
Modèles de chargement
Chargeur de modèle
Un chargeur de modèle est un objet qui charge les données d'origine basées sur un chemin abstrait ("index.ftl" ou "produits / catalog.ftl"), et quel type de ressources (données de fichiers dans un répertoire ou des données dans une base de données) est chargée dépend de l'implémentation spécifique du chargeur. Lorsque vous appelez cfg.getTemplate, Freemarker vous demandera le chargeur de modèle que vous avez configuré dans l'objet de configuration auparavant, qui est responsable du chargement du fichier.
Chargeur de modèle intégré <br /> Vous pouvez utiliser les trois méthodes suivantes pour configurer le chargement du modèle
void setDirectoryFortEmplateLoading (fichier dir);
ou
void setClassForTemplateLoading (classe CL, préfixe de chaîne);
ou
void setServletContextForTemplateLoading (objet ServletContext, String Path);
La première méthode ci-dessus spécifie un répertoire dans un système de fichiers. Freemarker enregistrera le modèle dans ce répertoire. Inutile de dire que ce répertoire doit exister, ou une exception sera lancée.
La deuxième méthode utilise une classe comme paramètre d'entrée. Lorsque vous souhaitez utiliser Classloader pour charger le modèle, vous pouvez utiliser cette méthode. Cette méthode sera appelée pour trouver le fichier de modèle. Dans le même temps, cette méthode de chargement de modèle est plus stable que la précédente, en particulier dans les systèmes de production. Vous pouvez facilement emballer des fichiers de ressources, des icônes, etc. dans des fichiers .jar.
La troisième méthode prend le chemin de contexte et de base de l'application Web (par rapport au chemin parent de Wen-Inf) en tant que paramètres. Le chargeur de modèle de cette méthode chargera le modèle à partir du contexte de l'application Web.
Modèles de chargement à partir de plusieurs emplacements
Si vous souhaitez charger des modèles à partir de plusieurs emplacements, vous pouvez créer un chargeur de modèle unique correspondant à différents emplacements, puis les envelopper dans un chargeur de modèle appelé MultemplateLoader, et enfin le définir sur l'objet de configuration via la méthode SettlemplateLader (TemplateLoader chargeur). Voici un exemple de modèles de chargement à partir de deux emplacements différents:
importer freemarker.cache. *; // Les chargeurs de modèles vivent dans ce package ... fileTemplateLoader ftl1 = new FileTemplateLoader (nouveau fichier ("/ tmp / modèles")); FileTemplateLoader ftl2 = new FileTemplateLoader (nouveau fichier ("/ usr / data / modèles")); ClasstemPlateLoader ctl = new ClasstemPlateLoader (getClass (), ""); TemplateLoader [] chargeurs = new TemplateLoader [] {ftl1, ftl2, ctl}; Multitemplateloader MTL = nouveau Multemplateloader (chargeurs); cfg.setTemplateLoader (MTL);Freemarker recherchera d'abord le fichier de modèle dans le chemin / TMP / les modèles. Si cela n'est pas trouvé, revenez au chemin / usr / data / modèles. S'il n'est pas trouvé, essayez de le charger en chargeur de classe.
Obtenez des fichiers de modèle à partir d'autres ressources
Si aucun de ces chargeurs de modèles intégrés ne répond à vos exigences, vous pouvez personnaliser vous-même un chargeur de modèle, implémentez simplement l'interface freariker.cache.templateloader, puis passez à l'objet de configuration via la méthode Settlemplateloader (TemplateLoader Loder).
Modèle de cache
Modèles de caches FreeMarker signifie que lorsque vous obtenez un modèle via la méthode GetTemplate, Freemarker renverra non seulement un objet de modèle, mais cachera également l'objet. Lorsque vous demandez le modèle avec le même chemin la prochaine fois, il renverra l'objet de modèle dans le cache. Si vous modifiez le fichier de modèle, la prochaine fois que vous obtiendrez le modèle, Freemarker rechargera automatiquement et redémarrez le modèle. Malgré cela, s'il s'agit d'une opération qui prend du temps pour déterminer directement si un fichier a été modifié, Freemarker fournit un paramètre de configuration "Détage de mise à jour" au niveau de l'objet de configuration. Ce paramètre signifie combien de temps il faut à Freemarker pour déterminer la version du modèle. Le paramètre par défaut est de 5 secondes, ce qui signifie que chaque 5 secondes déterminera si le modèle a été modifié. Si vous souhaitez porter un jugement en temps réel, définissez ce paramètre sur 0. Une autre chose à noter est que tous les chargeurs ne soutiennent pas cette méthode de jugement. Par exemple, le chargeur de modèle basé sur le chargeur de classe ne constatera pas que vous avez modifié le fichier de modèle.
C'est ainsi que Freemarker supprime le modèle dans le cache, vous pouvez utiliser la méthode de configuration ClearTemplateCache pour clarifier manuellement les objets de modèle dans le cache. En fait, la pièce de cache peut être ajoutée à Freemarker en tant que composant (c'est-à-dire qu'il peut utiliser un schéma de cache tiers). Vous pouvez l'atteindre en définissant le paramètre Cache_storage. Il suffit pour la plupart des développeurs de mettre en œuvre Freemarker.cache.mrucachestorage qui vient avec Freemarker. Ce cache utilise 2 niveaux de politique récemment utilisé. Au premier niveau, toutes les entrées de cache utilisent des références fortes: les entrées ne sont pas claires par la JVM, des références doucement qui sont des références relativement faibles. Jusqu'à ce que le temps maximum soit atteint, les entrées les moins récemment utilisées seront déplacées vers le cache secondaire. À ce niveau, l'entrée est entièrement référencée jusqu'à ce qu'elle atteigne l'expiration. Si la taille des régions référencées référencées et fortes peut être définie dans le constructeur, par exemple, si vous souhaitez définir la région référencée forte sur 20 et la région référencée faible à 250, vous pouvez utiliser le code suivant:
cfg.setCachestorage (new freemarker.cache.mrucachestorage (20, 250))
Étant donné que Mrucachestorage est l'implémentation de cache par défaut, vous pouvez également le définir comme ceci:
CFG.SetSetting (configuration.cache_storage_key, "Strong: 20, Soft: 250");
Lorsque vous créez une nouvelle configuration, il est implémenté par défaut à l'aide du cache MruCacheStorage et la valeur par défaut MaxstrongSize est égale à 0, et maxsofTSize est égal à Integer.max_value (c'est-à-dire la valeur maximale théorique). Cependant, pour les systèmes de haute charge, nous vous recommandons de définir MaxStrongSize sur une valeur non 0, sinon cela entraînera un rechargement et un reparsage fréquents du modèle.
Gestion des exceptions
Exceptions possibles
Les exceptions générées par Freemarker peuvent généralement être classées dans les catégories suivantes:
Exceptions générées dans l'étape d'initialisation de Freemarker : Habituellement, il vous suffit d'initialiser Freemarker une fois dans votre application, et l'exception générée dans cette période est appelée exception d'initialisation.
Exceptions Pendant le modèle de chargement et d'analyse : lorsque vous obtenez le modèle via la méthode configuration.getTemplate () (si le modèle n'est pas mis en cache auparavant), deux types d'exceptions seront générés:
IOException: Parce que le modèle n'est pas trouvé, ou d'autres exceptions IO se produisent lors de la lecture du modèle, comme vous n'avez pas la permission de lire le fichier, etc.; freemarker.core.parseException parce que la syntaxe du fichier de modèle est incorrecte;
Exceptions pendant l'exécution: lorsque vous appelez la méthode Template.Process (...), deux types d'exceptions seront lancées:
IOException une erreur qui se produit lors de l'écriture de données dans la sortie; freemarker.template.templatexception Autres exceptions générées pendant l'exécution, telles que l'erreur la plus courante est que le modèle se réfère à une variable qui n'existe pas;