[英]Allow Apache's FreeMarker template engine to load templates from outside Resources folder
我使用Spring Initilizr创建了一个Spring Boot应用程序。 然后我加入了Apache's Freemarker
模板引擎来加载我项目中的模板。 默认情况下,引擎从以下位置加载模板: src/main/resources/templates/
folder。
我试图在用户访问网页http://localhost:8080
时加载一个简单的index.ftl
文件作为模板。 但我需要从src/main/webapp/
文件夹加载模板。 每当我尝试从resources
文件夹外部加载模板时,模板引擎都无法找到模板。
我已经完成了各种教程和Stack Overflow问题。 没有回答我的问题而且我遇到了404 ERROR
因为引擎无法找到文件。
文件结构是:
|-src
|---main
|-----java
|-------MainApplication.java
|-------controllers
|---------ViewController.java
|-----resources
|-------static
|-------templates
|-------application.properties
|-----webapp
|-------index.ftl
经过大量挖掘后,我遇到了一个帖子,他们建议更改模板引擎搜索文件的位置。 它建议在application.properties中添加以下行:
spring.freemarker.enabled=true
spring.freemarker.template-loader-path=classpath:src/main/webapp/
这似乎根本不起作用。
当我访问http:// localhost:8080的网页时,我正在尝试解析简单的索引页面。 我编写了以下用于在ViewController.java
映射HTTP请求的代码:
@RequestMapping("/")
public ModelAndView home(Model model)
{
return new ModelAndView("index");
}
我不知道我是完全弄错了还是我错过了一些配置。
来自Spring docs:
如果您的应用程序打包为jar,请不要使用src / main / webapp目录。 尽管此目录是一种通用标准,但它仅适用于war包装,并且在生成战争时,大多数构建工具都会忽略它。
src/main/webapp
与web存档相关联,并在生成战争时由maven war插件打包。
假设您需要一个单独的位置来保留ftl模板,并且您仍然希望打包为jar,您可以按照以下步骤操作。
在pom文件的build中添加资源条目,以便资源插件可以将该目录复制到classpath。
<build>
<resources>
<resource>
<directory>src/main/webapp</directory>
</resource>
<resources>
<build>
更改加载程序路径以从类路径的ROOT读取。
spring.freemarker.template-loader-path=classpath:
如果它仅用于ftl模板,我会将目录更改为src/main/ftls
以避免混淆并在资源中更新相同内容。
UPDATE
我实际上想构建一个WAR部署包
你必须使用war插件来构建战争。 添加插件并将包装更改为pom中的war。
有关传统部署的更多信息: https : //docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file
编辑
在嵌入式tomcat中,您可以在application-properties中定义静态资源路径
spring.mvc.static-path-pattern=
如果你部署到tomcat,在tomcat中使用可以在server.xml内部定义可以保存freemarker文件的静态上下文 ,如
<Context docBase="/home/stuff" path="/static" />
在
<Host>
元素内添加<Context>
<Host>
元素。 Context有两个属性:docBase是磁盘上包含静态文件的目录,path是要为其提供文件的URL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.