15158846557 在线咨询 在线咨询
15158846557 在线咨询
所在位置: 首页 > 营销资讯 > 网站运营 > Java的FreeMarker模板引擎的几种模板加载方式

Java的FreeMarker模板引擎的几种模板加载方式

时间:2023-06-12 09:45:01 | 来源:网站运营

时间:2023-06-12 09:45:01 来源:网站运营

Java的FreeMarker模板引擎的几种模板加载方式:

1. 介绍

1.1 介绍

上一课福哥带着大家学习了Java的FreeMarker模板引擎的使用技巧,其实FreeMarker除了可以通过指定模板根目录的方式加载模板外,还有非常多的个性化的模板加载方式,在不同的场合下使用适合的加载方式会让我们编写代码更加方便,同时运行效率也会更高。

FreeMarker支持的模板加载方式包括字符串加载(StringTemplateLoader)、类加载(ClassTemplateLoader)、文件加载(FileTemplateLoader)、网址加载(URLTemplateLoader)、Webapp加载(WebappTemplateLoader)以及复合加载(MultiTemplateLoader)这么多种方式,今天福哥就带着大家一一学习一下。

2. 目录加载

这是最简单也最直观的方式,上一课福哥给大家讲解的教程就是采用这种方式。

首先通过Configuration对象的setDirectoryForTemplateLoading方法设置模板根目录。

然后通过Configuration对象的getTemplate方法指定具体模板文件。

Configuration configuration = new Configuration(Configuration.getVersion());Template template;Map data = new LinkedHashMap();StringWriter stringWriter = new StringWriter();configuration.setDirectoryForTemplateLoading(new File(System.getProperty("user.dir") + "/src/main/resources/template"));template = configuration.getTemplate("test.ftl");

3. 字符串加载

这种方式就是通过字符串描绘模板文件内容的方式,比较适用于简单的页面的情况,例如:错误提示页面、跳转中转页面等等。

3.1 StringTemplateLoader

示例:使用StringTemplateLoader实现一个跳转页面的模板。

Configuration configuration = new Configuration(Configuration.getVersion());StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();Template template;Map data = new LinkedHashMap();StringWriter stringWriter = new StringWriter();stringTemplateLoader.putTemplate("test.ftl", "<meta http-equiv=/"refresh/" content=/"0; url=${url}/" />" + "<script>" + "document.location='${url}';" + "</script>");configuration.setTemplateLoader(stringTemplateLoader);template = configuration.getTemplate("test.ftl");data.put("url", "https://tongfu.net/");template.process(data, stringWriter);return stringWriter.toString();

4. 类加载

类加载方式就是指定一个类,这个类的定义文件所在的目录就是模板文件的根目录,这样的好处是可以将模板文件分散开来部署,避免集中部署带来的冲突问题。

4.1 ClassTemplateLoader

示例:使用类加载方式调用控制器类所在目录下面的模板输出网页。

Configuration configuration = new Configuration(Configuration.getVersion());ClassTemplateLoader classTemplateLoader = new ClassTemplateLoader(DemoController.class, "template/");Template template;Map data = new LinkedHashMap();StringWriter stringWriter = new StringWriter();configuration.setTemplateLoader(classTemplateLoader);template = configuration.getTemplate("test.ftl");data.put("url", "https://tongfu.net/");template.process(data, stringWriter);return stringWriter.toString();不过在SpringBoot项目里面这样的设计似乎不能正常运行,只能放到resources目录下面,然后通过在路径前面增加“/”指明从resources目录开始查找,这样也就和指定什么类没有关系了。

示例:使用类加载方式调用resources/template/test.ftl模板输出网页。

Configuration configuration = new Configuration(Configuration.getVersion());ClassTemplateLoader classTemplateLoader = new ClassTemplateLoader(DemoController.class, "/template/");Template template;Map data = new LinkedHashMap();StringWriter stringWriter = new StringWriter();configuration.setTemplateLoader(classTemplateLoader);template = configuration.getTemplate("test.ftl");data.put("url", "https://tongfu.net/");template.process(data, stringWriter);return stringWriter.toString();

5. 文件加载

这里虽然说的是文件加载,但其实就是目录加载,只不过是通过FileTemplateLoader指定模板文件的根目录。

5.1 FileTemplateLoader

示例:使用文件加载方式调用resources/template/test.ftl模板输出网页。

Configuration configuration = new Configuration(Configuration.getVersion());FileTemplateLoader fileTemplateLoader = new FileTemplateLoader(new File(System.getProperty("user.dir") + "/src/main/resources/template/"));Template template;Map data = new LinkedHashMap();StringWriter stringWriter = new StringWriter();configuration.setTemplateLoader(fileTemplateLoader);template = configuration.getTemplate("test.ftl");data.put("url", "https://tongfu.net/");template.process(data, stringWriter);return stringWriter.toString();

6. 网址加载

网址加载就是通过一个远程的网址读取模板文件的内容,下载完成后再进行整合渲染的方式。

这种方式可以集中管理项目的模板文件,需要更改的时候只需要改一处就可以了。

6.1 URLTemplateLoader

由于这种加载方式需要搭建一个远程环境,所以福哥就偷个懒不提供示例代码了!

7. Webapp加载

Webapp加载就是通过ServletContext.getResource获得模板文件的内容。

7.1 WebappTemplateLoader

由于这种加载方式需要搭建一个发布环境,所以福哥就偷个懒不提供示例代码了!

8. 复合加载

复合加载就是可以设置一堆加载器,FreeMarker会逐个尝试,失败一个就换下一个,直到成功一个,或者全部失败才会结束。

8.1 MultiTemplateLoader

示例:福哥设置了两个FileTemplateLoader加载器,第一个加载器下面没有test.ftl,第二个加载器下面有test.ftl。

Configuration configuration = new Configuration(Configuration.getVersion());MultiTemplateLoader multiTemplateLoader = new MultiTemplateLoader(new TemplateLoader[]{ new FileTemplateLoader(new File(System.getProperty("user.dir") + "/src/main/resources/abc/")), new FileTemplateLoader(new File(System.getProperty("user.dir") + "/src/main/resources/template/"))});Template template;Map data = new LinkedHashMap();StringWriter stringWriter = new StringWriter();configuration.setTemplateLoader(multiTemplateLoader);template = configuration.getTemplate("test.ftl");data.put("url", "https://tongfu.net/");template.process(data, stringWriter);return stringWriter.toString();

9. 总结

今天福哥带着童鞋们将Java的模板引擎FreeMarker的几种模板加载方式都学习了一遍,相信经过今天的课程大家在使用FreeMarker做项目的时候就会得心应手了~~






关键词:模板,方式,引擎

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭