p> básico
A configuração é um objeto que armazena informações comuns de configuração no nível do aplicativo e variáveis compartilhadas globais que podem ser usadas pelo modelo. Também é responsável pela criação e cache de instâncias de modelo. A configuração é na verdade uma instância do objeto Freemarker.Template.Configuration, criado usando seu construtor. Normalmente, os aplicativos usam um objeto de configuração de instância única compartilhada.
Os objetos de configuração podem ser usados pelo método do objeto de modelo. Cada instância do modelo está associada a uma instância de configuração. Está associado ao construtor de modelo. Geralmente você usa esse método para obter o objeto de modelo por configuração.getTemplate.
Variáveis compartilhadas
Variáveis compartilhadas são aquelas definidas para uso por todos os modelos. Você pode adicionar variáveis compartilhadas através do método setSharedVariable do objeto de configuração.
Configuração cfg = new Configuration (); ... cfg.setSharedVariable ("Wrap", New WrapDirective ()); cfg.setsharedVariable ("Company", "Foo Inc."); // Usando objectWrapper.default_wrapperTodas as instâncias de modelo associadas a esse objeto de configuração podem obter seqüências de caracteres, obtendo o conversor to_upper, empresa e, portanto, você não precisa adicionar essas variáveis para fazer a rotação repetidamente. Se você adicionar uma variável com o mesmo nome ao root, a variável recém -adicionada substituirá a variável compartilhada anterior.
avisar!
Se o objeto de configuração for chamado de multithread, não use a classe de implementação do Templatemodel como variáveis compartilhadas, porque elas não são seguras, como sites baseados em servlet.
O objeto de configuração já é inicializado com algumas variáveis de conversor compartilhadas:
Classe de nome
Parâmetros de configuração
Os parâmetros de configuração são os parâmetros nomeados que podem afetar o comportamento operacional do Freemarker. Por exemplo, Locale, número_format.
Os parâmetros de configuração são armazenados na instância de configuração e podem ser modificados pela instância do modelo. Por exemplo, se você definir a localidade igual a "en_us" na configuração, todos os objetos de modelo serão usados, "en_us", a menos que você use o método setLocale para modificar a configuração padrão em uma única instância de modelo. Portanto, os parâmetros definidos pela configuração podem ser considerados como parâmetros padrão, que podem ser substituídos pelos parâmetros definidos no primeiro nível do modelo, e as informações de parâmetros definidas por ambas podem ser substituídas pelos parâmetros definidos no ambiente (ou seja, as instruções do arquivo de modelo) a seguir:
$ {1.2} <#Configuração Locale = "en_us"> $ {1.2}Você pode imaginar esse método de chamada como 3 camadas (camada de objeto de configuração, camada de modelo e camada de ambiente de execução). A tabela a seguir mostra as configurações para parâmetros de cada camada:
Então, os resultados finais dos parâmetros de configuração são: a = 1, b = 2, c = 3, d = 1, e = 2. O parâmetro F provavelmente será nulo.
Se você deseja consultar uma lista de parâmetros que podem ser definidos, consulte as duas partes a seguir da documentação da API Freemarker:
Todas as camadas de configuração
freemarker.core.configurable.setsetting (string, string)
Configuração da camada de configuração
freemarker.template.configuration.setsetting (string, string)
Modelos de carregamento
Carregador de modelos
Um carregador de modelo é um objeto que carrega os dados originais com base em um caminho abstrato ("index.ftl" ou "produtos/catalog.ftl") e que tipo de recursos (dados de arquivos em um diretório ou dados em um banco de dados) são carregados depende da implementação específica do carregador. Quando você chama CFG.getTemplate, o Freemarker solicitará o carregador de modelo que você configurou para o objeto de configuração antes, o que é responsável pelo carregamento do arquivo.
Loader de modelo interno <br /> você pode usar os três métodos a seguir para configurar o carregamento do modelo
Void setDirectoryfortemplateLoading (arquivo de arquivo);
ou
void setClassfortemplateLoading (classe cl, string prefix);
ou
Void SetServLetContextfortemplateLoading (Object ServletContext, String Path);
O primeiro método acima especifica um diretório em um sistema de arquivos. O Freemarker gravará o modelo neste diretório. Escusado será dizer que esse diretório deve existir ou uma exceção será lançada.
O segundo método usa uma classe como um parâmetro de entrada. Quando você deseja usar o ClassLoader para carregar o modelo, você pode usar esse método. Este método será chamado para encontrar o arquivo de modelo. Ao mesmo tempo, esse método de carregamento de modelo é mais estável que o anterior, especialmente em sistemas de produção. Você pode facilmente empacotar arquivos de recursos, ícones etc. em arquivos .jar.
O terceiro método toma o caminho de contexto e base do aplicativo da Web (em relação ao caminho pai do WEN-Inf) como parâmetros. O carregador de modelo deste método carregará o modelo do contexto do aplicativo da Web.
Modelos de carregamento de vários locais
Se você deseja carregar modelos de vários locais, poderá criar um único carregador de modelo correspondente a diferentes locais e envolvê -los em um carregador de modelo chamado MultitemplatelOader e finalmente defini -lo como o objeto de configuração através do método SetemplateLoader (carregador de templateloader). Aqui está um exemplo de modelos de carregamento de dois locais diferentes:
importar freemarker.cache.*; // Os carregadores de modelos vivem neste pacote ... FileTemplateLoader ftl1 = new FileTemPlatELoader (novo arquivo ("/tmp/modelos")); FileTemplateLoader ftl2 = new FileTemplateLoader (novo arquivo ("/usr/data/modeplates")); CLASSTEMPLATELOADER CTL = novo CLASSTEMPLATELOADER (getClass (), ""); Templateloader [] carregadores = novo Templateloader [] {ftl1, ftl2, ctl}; MultitemplateLoader MTL = novo MultitemplateLoader (carregadores); cfg.setTemplateLoader (MTL);O Freemarker primeiro pesquisará o arquivo de modelo no caminho /TMP /modelos. Se não for encontrado, volte para o caminho/usr/dados/modelos. Se não for encontrado, tente carregá-lo no carregador de classe.
Obtenha arquivos de modelo de outros recursos
Se nenhum desses carregadores de modelo incorporado atender aos seus requisitos, você poderá personalizar um carregador de modelo, basta implementar a interface Freemarker.cache.templateloader e depois passar para o objeto de configuração através do método SetemplateLoader (carregador de templateloader).
Modelo de cache
Modelos de cache do Freemarker significa que, quando você obtém um modelo através do método GetTemplate, o Freemarker não apenas retorna um objeto de modelo, mas também cache o objeto. Quando você solicita o modelo com o mesmo caminho na próxima vez, ele retornará o objeto de modelo no cache. Se você alterar o arquivo de modelo, na próxima vez que você obtiver o modelo, o Freemarker recarregará e renovará automaticamente o modelo. Apesar disso, se for uma operação demorada para determinar diretamente se um arquivo foi modificado, o Freemarker fornece um parâmetro de configuração "Atualizar atraso" no nível do objeto de configuração. Este parâmetro significa quanto tempo leva para o Freemarker determinar a versão do modelo. A configuração padrão é de 5 segundos, o que significa que cada 5 segundos determinará se o modelo foi modificado. Se você deseja fazer um julgamento em tempo real, defina esse parâmetro como 0. Outra coisa a observar é que nem todos os carregadores suportam esse método de julgamento. Por exemplo, o carregador de modelo com base no carregador de classe não descobrirá que você modificou o arquivo de modelo.
É assim que o Freemarker exclui o modelo no cache, você pode usar o método do objeto de configuração ClearTemplatecache para esclarecer manualmente os objetos do modelo no cache. De fato, a parte do cache pode ser adicionada ao Freemarker como um componente (ou seja, pode usar um esquema de cache de terceiros). Você pode alcançá -lo definindo o parâmetro Cache_Storage. É suficiente para a maioria dos desenvolvedores implementar o freemarker.cache.mrucachestorage que vem com o Freemarker. Este cache usa 2 níveis de política usada mais recentemente. No primeiro nível, todas as entradas de cache usam referências fortes: as entradas não são claras pela JVM, referências suavemente que são referências relativamente fracas. Até que o tempo máximo seja atingido, as entradas menos recentemente usadas serão movidas para o cache secundário. Nesse nível, a entrada é fraca referenciada até atingir a expiração. Se o tamanho das regiões referenciadas referenciadas e fortes puderem ser definidas no construtor, por exemplo, se você quiser definir a forte região referenciada como 20 e a fraca região referenciada como 250, poderá usar o seguinte código:
cfg.setcachestorage (New Freemarker.cache.mrucachestorage (20, 250))
Como o MrucacheStorage é a implementação padrão do cache, você também pode defini -lo assim:
cfg.SetSetting (Configuration.cache_storage_key, "Strong: 20, Soft: 250");
Quando você cria uma nova configuração, ela é implementada por padrão usando o cache MrucacheStorage e o valor padrão maxstrongSize é igual a 0, e o maxsoftsize é igual a inteiro.max_value (ou seja, o valor máximo teórico). No entanto, para sistemas de alta carga, recomendamos a definição de maxstrongsize como um valor não 0, caso contrário, causará recarga e re-parar frequente do modelo.
Manuseio de exceção
Possíveis exceções
Exceções geradas pelo Freemarker geralmente podem ser classificadas nas seguintes categorias:
Exceções geradas no estágio de inicialização do Freemarker : Geralmente, você só precisa inicializar o Freemarker uma vez no seu aplicativo, e a exceção gerada neste período é chamada de exceção de inicialização.
Exceções durante o modelo de carregamento e análise : quando você obtém o modelo através do método Configuration.getTemplate () (se o modelo não for armazenado em cache antes), dois tipos de exceções serão gerados:
IoException: porque o modelo não é encontrado ou outras exceções de IO ocorrem ao ler o modelo, como você não tem permissão para ler o arquivo, etc.; freemarker.core.parseException porque a sintaxe do arquivo de modelo está incorreta;
Exceções durante a execução: Quando você chama o modelo de modelo.
IoException Um erro que ocorre ao escrever dados na saída; freemarker.template.templatexception Outras exceções geradas durante o tempo de execução, como o erro mais comum, é que o modelo se refere a uma variável que não existe;