• freemarker模板加载TemplateLoader常见方式


    使用过freemarker的肯定其见过如下情况: 

    java.io.FileNotFoundException: Template xxx.ftl not found.  

    模板找不到。可能你会认为我明明指定了文件,并且文件存在,但是为什么就是说找不到呢? 
    经过研究官方的API,原来freemarker在加载模板时,建议使用TemplateLoader,通过TemplateLoader指定从哪个目录开始加载模板,并且把模板加载在缓存中。 

    API的TemplateLoader是一个接口,他有如下几个实现类: 

    ClassTemplateLoader, FileTemplateLoader, MultiTemplateLoader, StringTemplateLoader, URLTemplateLoader, WebappTemplateLoader  

    顾名思义,我们能从类名中猜想到freemarker的模板加载机制,举例说明两个: 

    1、FileTemplateLoader 
     此是文件模板加载器,此即可以通过文件的绝对路径加载模板,如: 

    TemplateLoader templateLoader=null;  
               String path="";  
                 
               //使用FileTemplateLoader  
              templateLoader=new FileTemplateLoader(new File("项目根路径"));  
              path="/WEB-INF/classes/com/xxx/tag/templates/page/xxx.ftl";  
                             
               cfg.setTemplateLoader(templateLoader);  
               Template t=cfg.getTemplate(path,"UTF-8");

    2、ClassTemplateLoader 
    此是通过指定类所在的目录来指定模板所在根路径,即指定类在哪个目录,那么这个目录就是加载模板文件的根目录,如下: 

    Configuration cfg = new Configuration();  
                  
                TemplateLoader templateLoader=null;  
                String path="";  
                  
                templateLoader=new ClassTemplateLoader(PageTag.class,"templates/page/");  
                path="standardd.ftl";  
                  
                cfg.setTemplateLoader(templateLoader);  
                Template t=cfg.getTemplate(path,"UTF-8");  

    此即表示比PageTag类所在的目录开始找,找这个目录下的templates/page/目录

    其它的加载器原理同上。

    如果你是web项目,并且使用了spring,那么。你还可以通过spring来配置你模板文件的根目录,如下: 

    <bean id="freemarkerConfig" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">  
        <property name="templateLoaderPath" value="/WEB-INF" />  
         <property name="freemarkerSettings">  
            <props>         
                <prop key="defaultEncoding">UTF-8</prop>         
            </props>         
        </property>  
    </bean>  

    此即表示从WEB-INF目录下开始找。 

  • 相关阅读:
    EMQ 解决方案之云平台物联网消息队列解决方案
    EMQ X Broker 3.1 Beta.2 发布
    MQTT 与 Kafka
    EMQ X 助力运营商搭建大规模 NBIoT 平台
    MQTT5.0 消息发布流程
    MQTT 5.0 新特性 |(一) 属性与载荷
    MQTT 5.0 正式成为OASIS标准
    Nginx + Docker 手动集群方式运行 EMQ
    WJQ与机房
    P1505 [国家集训队]旅游
  • 原文地址:https://www.cnblogs.com/chenfeng1122/p/6884576.html
Copyright © 2020-2023  润新知