繁体   English   中英

允许Apache的FreeMarker模板引擎从Resources文件夹外部加载模板

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM