我正在尝试创建一个简单的jersey-freemarker webapp,我正在使用jetty-maven-plugin运行。
但FreemarkerViewProcessor
无法找到我的模板。
我使用@Path("/")
方法在@GET public Viewable getIndex()
创建了一个泽西资源,一旦我请求http://localhost:8080/
,就会调用该方法。
此Viewable
设置为使用"index"
模板。
假设资源为com.example.MainResource
(位于src/main/java/com/example/MainResource.java
),index.ftl
模板文件位于src/main/webapp/templates/com/example/MainResource/index.ftl
。
在我的servlet设置中,我使用配置templates
:Map
告诉jersey-freemarker config.put(FreemarkerViewProcessor.FREEMARKER_TEMPLATES_BASE_PATH, "templates");
目录。
在调试FreemarkerViewProcessor
时,我发现它确实在寻找基于路径/templates/com/example/MainResource/index.ftl
的模板资源。
我应该在哪里放置模板文件,以便FreemarkerViewProcessor
找到它们?或者如何在类路径中包含我的templates
目录?
PS:mvn jetty:run
产生以下输出(部分):
[INFO] Configuring Jetty for project: jettytest-servlet
[INFO] webAppSourceDirectory not set. Trying src/main/webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = ~/jettytest-servlet/target/classes
[INFO] Context path = /
[INFO] Tmp directory = ~/jettytest-servlet/target/tmp
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml
[INFO] Web overrides = none
[INFO] web.xml file = file:~/jettytest-servlet/src/main/webapp/WEB-INF/web.xml
[INFO] Webapp directory = ~/jettytest-servlet/src/main/webapp
更新:
FreemarkerViewProcessor
总是使用默认的Configuration
,它使用基于类加载器的模板加载器。
因此,根据@ddekany comment,我应该将templates/
放入WEB-INF/classes/
。对我来说感觉很脏;看来这应该由Maven照顾。
由于FreemarkerViewProcessor
的设计(总是使用类加载器配置),我发布了this follow-up question。与此同时,欢迎告诉我如何将src/main/webapp/
目录添加到类路径的建议。
答案 0 :(得分:0)
当我发现here时,使用我自己的FreemarkerViewProcessor
并不困难。所以我复制了jersey-freemarker实现并对其进行了修改,以使用我绑定在Configuration
中的Guice注入的ServletModule
对象。
现在我不再需要jersey-freemarker模块,和我可以跳过servlet config Map
中的内容以供freemarker使用。