FreeMarker 文件路径
FreeMarker file path
我在让 freeMarker 获取我的根目录时遇到了一些问题。我已经尝试了一些我在其他一些线程中找到的答案,但它们似乎没有用。每次我得到一个 FileNotFound 异常。
当我 运行 项目在 IDEA 中时它运行良好但是当我将它打包成 war 文件并部署到服务器时我得到异常。
至于 war 文件,它的打包方式使得我需要提供的 html 内容位于根目录中(与 WEB-INF 位于同一目录中)。我尝试将模板加载目录设置为不同的值,但结果 returns 相同
这是我的代码:
public class PageGenerator {
private static PageGenerator pageGenerator;
private final Configuration cfg;
public static PageGenerator instance() {
if (pageGenerator == null) {
pageGenerator = new PageGenerator();
}
return pageGenerator;
}
public String getPage(String filename, Map<String, Object> data) {
Writer stream = new StringWriter();
try {
Template template = cfg.getTemplate(filename);
template.process(data, stream);
} catch (Exception e) {
e.printStackTrace();
}
return stream.toString();
}
private PageGenerator() {
cfg = new Configuration();
String basedir = System.getProperty("user.dir");
try {
cfg.setDirectoryForTemplateLoading(new File(basedir+"/"));
System.out.println("\n\n" + "This is the system base directory" + "\n" +basedir+"\n\n");
}catch (Exception e){
e.printStackTrace();
}
}
}
你应该使用 cfg.setServletContextForTemplateLoading(servletContext, null)
。 Servlet 容器可能不会将已部署的 Web 应用程序公开为普通目录。
我在让 freeMarker 获取我的根目录时遇到了一些问题。我已经尝试了一些我在其他一些线程中找到的答案,但它们似乎没有用。每次我得到一个 FileNotFound 异常。 当我 运行 项目在 IDEA 中时它运行良好但是当我将它打包成 war 文件并部署到服务器时我得到异常。 至于 war 文件,它的打包方式使得我需要提供的 html 内容位于根目录中(与 WEB-INF 位于同一目录中)。我尝试将模板加载目录设置为不同的值,但结果 returns 相同
这是我的代码:
public class PageGenerator {
private static PageGenerator pageGenerator;
private final Configuration cfg;
public static PageGenerator instance() {
if (pageGenerator == null) {
pageGenerator = new PageGenerator();
}
return pageGenerator;
}
public String getPage(String filename, Map<String, Object> data) {
Writer stream = new StringWriter();
try {
Template template = cfg.getTemplate(filename);
template.process(data, stream);
} catch (Exception e) {
e.printStackTrace();
}
return stream.toString();
}
private PageGenerator() {
cfg = new Configuration();
String basedir = System.getProperty("user.dir");
try {
cfg.setDirectoryForTemplateLoading(new File(basedir+"/"));
System.out.println("\n\n" + "This is the system base directory" + "\n" +basedir+"\n\n");
}catch (Exception e){
e.printStackTrace();
}
}
}
你应该使用 cfg.setServletContextForTemplateLoading(servletContext, null)
。 Servlet 容器可能不会将已部署的 Web 应用程序公开为普通目录。