P> básico
La configuración es un objeto que almacena la información de configuración común en el nivel de aplicación y las variables compartidas globales que la plantilla puede utilizar. También es responsable de la creación y almacenamiento en caché de instancias de plantilla. La configuración es en realidad una instancia del objeto freemarker.template.configuration, creado usando su constructor. Por lo general, las aplicaciones utilizan un objeto de configuración de instancia única compartida.
Los objetos de configuración pueden ser utilizados por el método de objeto de plantilla. Cada instancia de plantilla está asociada con una instancia de configuración. Está asociado con el constructor de plantillas. Por lo general, utiliza este método para obtener el objeto de plantilla por configuración.gettemplate.
Variables compartidas
Las variables compartidas son las definidas para usar todas las plantillas. Puede agregar variables compartidas a través del método SetSharedVariable del objeto de configuración.
Configuración cfg = nueva configuración (); ... cfg.setSharedVariable ("wrap", new wrapDirective ()); cfg.setSharedVariable ("Compañía", "Foo Inc."); // usando objectwrapper.default_wrapperTodas las instancias de plantilla asociadas con este objeto de configuración pueden obtener cadenas obteniendo el convertidor To_upper, la empresa, por lo que no necesita agregar estas variables a root una y otra vez. Si agrega una variable con el mismo nombre a la raíz, la variable recientemente agregada sobrescribirá la variable compartida anterior.
¡advertir!
Si el objeto de configuración se llama multithreaded, no use la clase de implementación de TemplateModel como variables compartidas, ya que no son seguros, como sitios web basados en servlet.
El objeto de configuración se inicializa con algunas variables del convertidor compartido ya:
Clase de nombre
Parámetros de configuración
Los parámetros de configuración son aquellos parámetros nombrados que pueden afectar el comportamiento operativo de Freemarker. Por ejemplo, localidad, número_format.
Los parámetros de configuración se almacenan en la instancia de configuración, y pueden modificarse mediante la instancia de plantilla. Por ejemplo, si establece la configuración local igual a "EN_US" en la configuración, se utilizarán todos los objetos de plantilla, "EN_US" a menos que use el método SetLocale para modificar la configuración predeterminada en una sola instancia de plantilla. Por lo tanto, los parámetros establecidos por la configuración pueden considerarse como parámetros predeterminados, que pueden sobrescribirse por los parámetros establecidos en el primer nivel de la plantilla, y la información de parámetros establecida por ambos puede sobrescribirse por los parámetros establecidos en el entorno (es decir, el conjunto de instrucciones de archivo de plantilla) como sigue:
$ {1.2} <#setting lugare = "en_us"> $ {1.2}Puede imaginar este método de llamada como 3 capas (capa de objeto de configuración, capa de plantilla y capa de entorno en ejecución). La siguiente tabla muestra la configuración de los parámetros de cada capa:
Entonces, los resultados finales de los parámetros de configuración son: a = 1, b = 2, c = 3, d = 1, e = 2. Es probable que el parámetro F sea nulo.
Si desea consultar una lista de parámetros que se pueden establecer, puede consultar las siguientes dos partes de la documentación de la API de Freemarker:
Todas las capas de configuración
freemarker.core.configurable.setsetting (string, string)
Configuración de la capa de configuración
freemarker.template.configuration.setsetting (string, string)
Plantillas de carga
Cargador de plantilla
Un cargador de plantilla es un objeto que carga los datos originales basados en una ruta abstracta ("index.ftl" o "productos/catálogos. Cuando llame a cfg.gettemplate, Freemarker le preguntará el cargador de plantilla que configuró al objeto de configuración antes, que es responsable de la carga del archivo.
Cargador de plantilla incorporado <Br /> Puede usar los siguientes tres métodos para configurar la carga de la plantilla
void setDirectoryfortEmplateloading (archivo dir);
o
void setClassfortEmplateloading (clase CL, prefijo de cadena);
o
void setServletContextfortEmplateloading (objeto servletContext, ruta de cadena);
El primer método anterior especifica un directorio en un sistema de archivos. Freemarker grabará la plantilla en este directorio. No hace falta decir que este directorio debe existir, o se lanzará una excepción.
El segundo método utiliza una clase como parámetro de entrada. Cuando desee usar ClassLoader para cargar la plantilla, puede usar este método. Se llamará a este método para encontrar el archivo de plantilla. Al mismo tiempo, este método de carga de plantilla es más estable que el anterior, especialmente en los sistemas de producción. Puede empaquetar fácilmente archivos de recursos, iconos, etc. en archivos .jar.
El tercer método toma la ruta de contexto y base de la aplicación web (en relación con la ruta principal de WEN-INF) como parámetros. El cargador de plantilla de este método cargará la plantilla del contexto de la aplicación web.
Carga de plantillas desde múltiples ubicaciones
Si desea cargar plantillas desde múltiples ubicaciones, puede crear un cargador de plantilla único correspondiente a diferentes ubicaciones, y luego envuélvalas en un cargador de plantilla llamado MultitEmplateLoader, y finalmente establecerlo en el objeto de configuración a través del método SetTemplateloader (TemplateLoader Loader). Aquí hay un ejemplo de plantillas de carga de dos ubicaciones diferentes:
import freemarker.cache.*; // Los cargadores de plantillas viven en este paquete ... FiletEmplateloader ftl1 = new FiletEmplateloader (nuevo archivo ("/tmp/plantplates")); FiletEmplateloader ftl2 = new FiletEmplateLoader (nuevo archivo ("/usr/data/plantlates")); ClasstemPlateloader CTL = new ClasstemPlateloader (getClass (), ""); TEMPLATELOADER [] cargadores = new Templateloader [] {ftl1, ftl2, ctl}; Multitemplateloader mtl = nuevo multitemplateloader (cargadores); cfg.settemplateloader (MTL);Freemarker primero buscará el archivo de plantilla en la ruta /TMP /plantillas. Si no se encuentra, vuelva a la ruta/usr/data/plantillas. Si no se encuentra, intente cargarlo en el cargador de clase.
Obtenga archivos de plantilla de otros recursos
Si ninguno de estos cargadores de plantillas incorporados cumple con sus requisitos, puede personalizar un cargador de plantilla usted mismo, simplemente implementa la interfaz freemarker.cache.templateloader y luego pasarlo al objeto de configuración a través del método setTemplateloader (Templateloader cargador).
Plantilla de caché
Freemarker Caches Plantlates significa que cuando obtienes una plantilla a través del método GetTemplate, Freemarker no solo devolverá un objeto de plantilla, sino que también almacena en caché el objeto. Cuando solicite la plantilla con la misma ruta la próxima vez, devolverá el objeto de plantilla en el caché. Si cambia el archivo de plantilla, la próxima vez que obtenga la plantilla, Freemarker recargará automáticamente y volverá a marcar la plantilla. A pesar de esto, si se trata de una operación que requiere mucho tiempo determinar directamente si se ha modificado un archivo, Freemarker proporciona un parámetro de configuración "Retraso de actualización" en el nivel de objeto de configuración. Este parámetro significa cuánto tiempo tarda Freemarker en determinar la versión de la plantilla. La configuración predeterminada es de 5 segundos, lo que significa que cada 5 segundos determinará si la plantilla ha sido modificada. Si desea hacer un juicio en tiempo real, establezca este parámetro en 0. Otra cosa a tener en cuenta es que no todos los cargadores respaldan este método de juicio. Por ejemplo, el cargador de plantillas basado en el cargador de clases no encontrará que haya modificado el archivo de plantilla.
Así es como Freemarker elimina la plantilla en el caché, puede usar el método de objeto de configuración ClearTeMplateCache para aclarar manualmente los objetos de plantilla en el caché. De hecho, la parte de caché se puede agregar al Freemarker como un componente (es decir, puede usar un esquema de caché de terceros). Puede lograrlo estableciendo el parámetro CACHE_STorage. Es suficiente para la mayoría de los desarrolladores implementar freemarker.cache.mrucachestorage que viene con freemarker. Este caché utiliza 2 niveles de política más recientemente utilizada. En el primer nivel, todas las entradas de caché usan fuertes referencias: las entradas no están claras por el JVM, referencias suavemente que son referencias relativamente débiles. Hasta que se alcance el tiempo máximo, esas entradas que menos se usan recientemente se trasladarán al caché secundario. En este nivel, la entrada es débil referenciada hasta que alcanza el vencimiento. Si el tamaño de las regiones referenciadas referenciadas y fuertes se puede establecer en el constructor, por ejemplo, si desea establecer la región de referencia fuerte en 20 y la región referenciada débil a 250, puede usar el siguiente código:
cfg.setCachestorage (nuevo freemarker.cache.mrucachestorage (20, 250))
Dado que MrucachStorage es la implementación de caché predeterminada, también puede configurarla así:
cfg.setsetting (configuration.cache_storage_key, "fuerte: 20, suave: 250");
Cuando crea una nueva configuración, se implementa de forma predeterminada utilizando el caché de MrucachStorage y el valor predeterminado MaxStrongSize es igual a 0, y MaxSoftSize es igual a Integer.max_value (es decir, el valor máximo teórico). Sin embargo, para los sistemas de alta carga, recomendamos establecer MaxStrongSize en un valor no 0, de lo contrario causará una recarga frecuente y un rehabilitación de la plantilla.
Manejo de excepciones
Posibles excepciones
Las excepciones generadas por Freemarker generalmente se pueden clasificar en las siguientes categorías:
Excepciones generadas en la etapa de inicialización de Freemarker : por lo general, solo necesita inicializar Freemarker una vez en su aplicación, y la excepción generada en este período de tiempo se denomina excepción de inicialización.
Excepciones durante la plantilla de carga y análisis : cuando obtiene la plantilla a través del método configuration.gettemplate () (si la plantilla no se almacena en caché antes), se generarán dos tipos de excepciones:
IoException: debido a que la plantilla no se encuentra u otras excepciones de IO se producen al leer la plantilla, ya que no tiene permiso para leer el archivo, etc.; freemarker.core.parseException porque la sintaxis del archivo de plantilla es incorrecta;
Excepciones durante la ejecución: cuando llame al método Template.process (...), se lanzarán dos tipos de excepciones:
IoException Un error que ocurre al escribir datos en la salida; freemarker.template.templatexception otras excepciones generadas durante el tiempo de ejecución, como el error más común es que la plantilla se refiere a una variable que no existe;