P> Basic
Конфигурация - это объект, который хранит общую информацию о конфигурации на уровне приложения и глобальные общие переменные, которые могут использоваться шаблоном. Это также отвечает за создание и кэширование экземпляров шаблонов. Конфигурация на самом деле является экземпляром объекта freemarker.template.configuration, созданного с использованием его конструктора. Как правило, приложения используют общий объект конфигурации отдельного экземпляра.
Объекты конфигурации могут использоваться методом объекта Template. Каждый экземпляр шаблона связан с экземпляром конфигурации. Это связано с конструктором шаблона. Обычно вы используете этот метод для получения объекта Template по configuration.getTemplate.
Общие переменные
Общие переменные - это те, которые определены для использования всеми шаблонами. Вы можете добавить общие переменные с помощью метода SetSharedVariable объекта конфигурации.
Конфигурация CFG = New Configuration (); ... cfg.setsharedVariable ("wrap", new wrapDirective ()); cfg.setsharedvariable ("Компания", "Foo Inc."); // Использование objectWrapper.default_wrapperВсе экземпляры шаблонов, связанные с этим объектом конфигурации, могут получить строки, получая конвертер TO_UPPER, компанию и поэтому вам не нужно добавлять эти переменные в корне снова и снова. Если вы добавите переменную с одним и тем же именем в root, вновь добавленная переменная перезаписывает предыдущую общую переменную.
предупреждать!
Если объект конфигурации называется многопоточным, не используйте класс реализации TemplateModel в качестве общих переменных, потому что они не являются безопасными, такие как веб-сайты на основе сервлетов.
Объект конфигурации уже инициализируется с некоторыми общими переменными преобразователя:
Название класс
Параметры конфигурации
Параметры конфигурации - это те названные параметры, которые могут повлиять на эксплуатационное поведение Freemarker. Например, Locale, number_format.
Параметры конфигурации хранятся в экземпляре конфигурации, и они могут быть изменены экземпляром шаблона. Например, если вы устанавливаете Locale, равную «EN_US» в конфигурации, то будут использоваться все объекты шаблона, «EN_US», если вы не используете метод SetLocale для изменения конфигурации по умолчанию в одном экземпляре шаблона. Следовательно, параметры, установленные конфигурацией, могут рассматриваться как параметры по умолчанию, которые могут быть перезаписаны параметрами, установленными на первом уровне шаблона, и информация о параметрах, установленная обоими, может быть перезаписывана параметрами, установленными в среде (то есть, установленные инструкции по файлу шаблона) следующим образом:
$ {1.2} <#Настройка locale = "en_us"> $ {1.2}Вы можете представить себе этот метод вызова как 3 слоя (слой объекта конфигурации, слой шаблона и работающий уровень среды). В следующей таблице показаны настройки для параметров каждого уровня:
Тогда конечные результаты параметров конфигурации: a = 1, b = 2, c = 3, d = 1, e = 2. Параметр F, вероятно, будет нулевым.
Если вы хотите запросить список параметров, которые могут быть установлены, вы можете проконсультироваться по двум частям документации API Freemarker:
Все слои конфигурации
freemarker.core.configeraility.setsetting (строка, строка)
Конфигурация конфигурации
freemarker.template.configuration.setsetting (строка, строка)
Загрузочные шаблоны
Шаблонный погрузчик
Шаблонный загрузчик - это объект, который загружает исходные данные на основе абстрактного пути («index.ftl» или «продукты/catalog.ftl»), и какие ресурсы (файловые данные в каталоге или данные в базе данных) загружаются, зависит от конкретной реализации загрузчика. Когда вы вызовите cfg.gettemplate, Freemarker спросит вам загрузчик шаблона, который вы настраивали на объект конфигурации, который отвечает за загрузку файла.
Встроенный шаблонный погрузчик <br /> Вы можете использовать следующие три метода для настройки загрузки шаблона
void setDirectoryFortemplateLaTeLoading (файл dir);
или
void setClassFortemplateLoAling (класс CL, String Prefix);
или
void setServletContextFortemplayLateLoading (Object ServletContext, String Path);
Первый метод выше указывает каталог в файловой системе. Freemarker запирает шаблон в этом каталоге. Само собой разумеется, этот каталог должен существовать, иначе будет брошено исключение.
Второй метод использует класс в качестве входного параметра. Если вы хотите использовать ClassLoader для загрузки шаблона, вы можете использовать этот метод. Этот метод будет вызван для поиска файла шаблона. В то же время этот метод загрузки шаблона более стабилен, чем предыдущий, особенно в производственных системах. Вы можете легко упаковать файлы ресурсов, значков и т. Д. В файлы .jar.
Третий метод принимает контекст и базовый путь веб-приложения (относительно родительского пути WEN-INF) в качестве параметров. Шаблонный загрузчик этого метода загрузит шаблон из контекста веб -приложения.
Шаблоны загрузки из нескольких мест
Если вы хотите загрузить шаблоны из нескольких мест, вы можете создать один шаблонный загрузчик, соответствующий различным местоположениям, а затем обернуть их в загрузчик шаблона, называемый MultememplateLoader, и, наконец, установите его на объект конфигурации через метод SettlemplateLoader (TemplateLoader Loader). Вот пример загрузочных шаблонов из двух разных мест:
импортировать freemarker.cache.*; // шаблонные погрузчики в прямом эфире в этом пакете ... FileTemplAteLoader FTL1 = новый FILETAMERTALAREDER (новый файл ("/TMP/Templates")); FILETEMPLATELOADER FTL2 = NEW FILETEMPLATELOADER (новый файл ("/usr/data/templates")); ClasstemplateLoader ctl = new ClasstemplateLoader (getClass (), ""); TemplateLoader [] Loaders = новый TemplateLoader [] {ftl1, ftl2, ctl}; MulteMemplateLoader MTL = новый MulteMemplateLoader (погрузчики); cfg.settemplateLoader (MTL);Freemarker сначала будет искать файл шаблона в шаблонах Path /TMP /. Если это не найдено, то вернитесь к пути/USR/Data/Stampates. Если это не найдено, попробуйте загрузить его в класс-загрузчик.
Получить файлы шаблонов из других ресурсов
Если ни один из этих встроенных шаблонных погрузчиков не отвечает вашим требованиям, вы можете самостоятельно настроить загрузчик шаблона, просто реализовать интерфейс FreeMarker.cache.templateLoader, а затем передать его объекту конфигурации через метод SetutemplateLoader (TemplateLoader Loader).
Шаблон кэша
Шаблоны кэша Freemarker означает, что когда вы получаете шаблон с помощью метода GetTemplate, FreeMarker не только вернет объект шаблона, но и кэширует объект. Когда вы запрашиваете шаблон с тем же путем в следующий раз, он вернет объект шаблона в кэше. Если вы измените файл шаблона, то в следующий раз, когда вы получите шаблон, Freemarker автоматически перезагрузит и повторно отправляет шаблон. Несмотря на это, если это трудоемкая операция, чтобы напрямую определить, был ли файл изменен, Freemarker предоставляет параметр «Обновление обновления» на конфигурации на уровне объекта конфигурации. Этот параметр означает, сколько времени требуется для Freemarker, чтобы определить версию шаблона. Настройка по умолчанию составляет 5 секунд, что означает, что каждые 5 секунд будут определять, был ли шаблон изменен. Если вы хотите вынести решение в реальном времени, установите этот параметр на 0. Еще одна вещь, которую следует отметить, это то, что не все загрузчики поддерживают этот метод суждения. Например, шаблонный загрузчик на основе класса-загрузчика не обнаружит, что вы изменили файл шаблона.
Вот как Freemarker удаляет шаблон в кэше, вы можете использовать метод объекта конфигурации ClearTemplateCache, чтобы вручную прояснить объекты шаблона в кэше. Фактически, часть кеша может быть добавлена в Freemarker в качестве компонента (то есть она может использовать стороннюю схему кеша). Вы можете достичь этого, установив параметр cache_storage. Для большинства разработчиков достаточно внедрить FreeMarker.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.cache.Mrucachestorage. Этот кэш использует 2 уровня последних использованных политики. На первом уровне все записи кеша используют сильные ссылки: записи не ясны от 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: Поскольку шаблон не найден, или другие исключения ввода -вывода происходят при чтении шаблона, например, у вас нет разрешения на чтение файла и т. Д.; freemarker.core.parseexception, потому что синтаксис файла шаблона неверен;
Исключения во время исполнения: когда вы называете метод шаблона. Process (...), будут брошены два типа исключений:
IoException ошибка, которая возникает при написании данных в выводе; freemarker.template.templatexception другие исключения, созданные во время выполнения, такие как наиболее распространенная ошибка, заключается в том, что шаблон относится к переменной, которая не существует;