我使用 Spring Initilizr 創建了一個 Spring Boot 應用程序。然后我包含了Apache's Freemarker模板引擎來從我的項目中加載模板。引擎默認從以下位置加載模板:src/main/resources/templates/文件夾。index.ftl當用戶訪問網頁時,我試圖加載一個簡單的文件作為模板http://localhost:8080。但我需要從文件夾加載模板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=truespring.freemarker.template-loader-path=classpath:src/main/webapp/這似乎根本不起作用。當我訪問http://localhost:8080 的網頁時,我試圖解析簡單的索引頁面。我編寫了以下代碼來映射 HTTP 請求ViewController.java:@RequestMapping("/")public ModelAndView home(Model model){ return new ModelAndView("index");}不知道我是完全弄錯了還是錯過了一些配置。
2 回答

慕后森
TA貢獻1802條經驗 獲得超5個贊
來自 Spring 文檔:
如果您的應用程序打包為 jar,請不要使用 src/main/webapp 目錄。雖然這個目錄是一個通用標準,但它只適用于 war 打包,并且在生成 war 時它會被大多數構建工具默默地忽略。
src/main/webapp
與web archive關聯,生成war時會被maven war plugin打包。
假設您需要一個單獨的位置來保存 ftl 模板,并且您仍然希望打包為 jar,您可以按照以下步驟操作。
在構建的 pom 文件中添加資源條目,以便資源插件可以將該目錄復制到類路徑。
<build> <resources> <resource> <directory>src/main/webapp</directory> </resource> <resources> <build>
更改加載程序路徑以從類路徑的根目錄讀取。
spring.freemarker.template-loader-path=classpath:
如果它僅適用于 ftl 模板,我會將目錄更改為src/main/ftls
以避免混淆并在資源中更新相同的目錄。
更新
其實我想構建一個WAR部署包
你必須使用戰爭插件來建立戰爭。添加插件并在pom.xml中將包裝更改為war。

哆啦的時光機
TA貢獻1779條經驗 獲得超6個贊
編輯
在嵌入式 tomcat 中,您可以在應用程序屬性中定義靜態資源路徑
spring.mvc.static-path-pattern=
如果部署到 tomcat,在 tomcat 中使用可以在 server.xml 內部定義可以保存 freemarker 文件的靜態上下文,如
<Context docBase="/home/stuff" path="/static" />
<Context>
在元素內部添加一個元素<Host>
。Context 有兩個屬性:docBase 是磁盤上包含您的靜態文件的目錄,path 是您要在其上提供文件的 URL。
添加回答
舉報
0/150
提交
取消