Я хочу развернуть несколько шаблонов Freemarker с помощью java-приложения Google App Engine для использования в качестве шаблонов шаблонов электронной почты. Я использую freemarker-gae-2.3.23.jar.ServletContext в Google App Engine
Мой вопрос в том, где в файле войны я должен разместить файлы шаблонов так, чтобы класс конфигурации Freemarker мог их найти? Я думал, что WEB-INF/classes/templates будут работать, но я получаю следующую ошибку, когда запускаю ее на примере GAE. getRealPath() также не дает понимания. Пустая строка возвращается. Любые мысли или предложения очень ценятся.
SEVERE: Template ./templates/invitation.ftl not found.
java.lang.RuntimeException: Error in loading ftl template: Template ./templates/invitation.ftl not found.
Моя основная конфигурация выглядит следующим образом:
public class FreeMarkerConfig {
private static FreeMarkerConfig freeMarkerConfig = null;
private static Configuration cfg = null;
private static final Logger logger = Logger.getLogger(FreeMarkerConfig.class.getName());
private FreeMarkerConfig(ServletContext context){
cfg = new Configuration();
cfg.setServletContextForTemplateLoading(context, "/templates");
}
public static FreeMarkerConfig getInstance(ServletContext context){
if(freeMarkerConfig == null){
freeMarkerConfig = new FreeMarkerConfig(context);
return freeMarkerConfig;
}
return freeMarkerConfig;
}
public static Template getTemplateByName(String fileName){
try {
return cfg.getTemplate(fileName);
} catch(IOException e) {
logger.severe(e.getMessage());
e.getStackTrace();
throw new RuntimeException("Error in loading ftl template: "+e.getMessage());
}
}
}
EDIT: Решение было два раза. Местоположение контекста - это «веб-каталог». Поэтому настройка конфигурации freemarker с этой проблемой устранена.
private FreeMarkerConfig(ServletContext context){
cfg = new Configuration();
cfg.setServletContextForTemplateLoading(context, "/WEB-INF/classes/templates/");
}
В качестве второго полезного совета я нашел, что я должен был просить шаблон только с именем шаблона, а не именем файла. т. е. приглашение, а не приглашение.ftl
Решение, указанное в РЕДАКТОРЕ выше. – mba12
вы должны добавить EDIT в качестве ответа на свой вопрос. – Titus