Freemarker 模板从路径 WEB-INF\ftl\ 访问 Freemarker 文件

Posted

技术标签:

【中文标题】Freemarker 模板从路径 WEB-INF\\ftl\\ 访问 Freemarker 文件【英文标题】:Freemarker Template to access Freemarker files from the path WEB-INF\ftl\Freemarker 模板从路径 WEB-INF\ftl\ 访问 Freemarker 文件 【发布时间】:2015-09-11 11:58:42 【问题描述】:

我对使用 Freemarker 模板有两个不同的要求。一种是打印网页的某些部分,另一种是生成自定义的 html 文件。我已将所有 FTL 文件放在路径 WEB-INF/ftl/ 下。Web 应用程序从上述位置提取正确的 FTL 文件并打印网页。当我不得不生成 HTML 文件时,Freemarker 无法找到相应的 FTL 文件。

我试图将那个特定的 FTL 文件保存在 resources/ftl/ 下,但它仍然无法获取该文件。我在 src 下创建了一个包并放置了 FTL。 Maven 不采用该包,因为它没有 java 文件。

Configuration cfg = new Configuration();
    cfg.setClassForTemplateLoading(this.getClass(), "");
    Template template = cfg.getTemplate("helloworld.ftl");

我可以考虑用两种不同的方式解决这个问题。一种方法是将文件保存在项目中或类路径中,以便被 Freemarker 拾取。另一种方法是将其作为 InputStream 获取并将其传递给 Freemarker。但我没有看到任何方法可以将文件作为 InputStream 或 File 接受。

ServletActionContext.getServletContext().getResourceAsStream("WEB-INF/ftl/helloworld.ftl");

您能告诉我如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

我可以自己解决这个问题。

配置中有一个方法可以设置模板位置和ServletContext。

cfg.setServletContextForTemplateLoading(context, "WEB-INF/ftl");

您只需要将 servletContext 对象与 FTL 位置一起传递给上述方法。当您通过以下代码处理模板时,它只会拾取文件并处理它。

Template template = cfg.getTemplate("helloworld.ftl");

【讨论】:

以上是关于Freemarker 模板从路径 WEB-INF\ftl\ 访问 Freemarker 文件的主要内容,如果未能解决你的问题,请参考以下文章

请问下freemarker怎么引入了jstl标签啊?

如何在项目里面使用freemarker实现页面缓存

freemarker设置模板路径问题

从类路径设置 freemarker 模板

学习笔记FreeMarker 之于Servlet与Stuts2的应用

在 java 中加载 freemarker 模板时出现 FileNotFoundException