Spring MVC 與 FreeMarker 整合

以下是 Spring MVC 與 FreeMarker 整合的詳細步驟,包含配置和代碼示例:


1. 添加依賴

pom.xml 中引入 Spring MVC 和 FreeMarker 的依賴(以 Maven 為例):

<!-- Spring Web MVC -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.23</version>
</dependency><!-- FreeMarker 模板引擎 -->
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version>
</dependency>

2. 配置 Spring MVC 和 FreeMarker

方式一:XML 配置

spring-mvc-servlet.xml 中配置視圖解析器和 FreeMarker:

<!-- 配置 FreeMarker 的模板加載器和編碼 -->
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="templateLoaderPath" value="/WEB-INF/views/" /> <!-- 模板路徑 --><property name="defaultEncoding" value="UTF-8" /> <!-- 編碼 -->
</bean><!-- 配置視圖解析器 -->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"><property name="prefix" value="" /> <!-- 模板路徑前綴(與 FreeMarkerConfigurer 一致) --><property name="suffix" value=".ftl" /> <!-- 模板后綴 --><property name="contentType" value="text/html;charset=UTF-8" /> <!-- 內容類型 -->
</bean>
方式二:Java 配置

通過 Java 配置類完成整合:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {@Beanpublic FreeMarkerConfigurer freemarkerConfig() {FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();configurer.setTemplateLoaderPath("/WEB-INF/views/"); // 模板路徑configurer.setDefaultEncoding("UTF-8"); // 編碼return configurer;}@Beanpublic ViewResolver viewResolver() {FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();resolver.setPrefix(""); // 模板路徑前綴resolver.setSuffix(".ftl"); // 模板后綴resolver.setContentType("text/html;charset=UTF-8"); // 內容類型return resolver;}
}

3. 創建 FreeMarker 模板文件

/WEB-INF/views/ 目錄下創建 .ftl 文件(如 hello.ftl):

<!DOCTYPE html>
<html>
<head><title>Hello FreeMarker</title>
</head>
<body><h1>${message}</h1> <!-- 顯示從 Controller 傳遞的數據 -->
</body>
</html>

4. 編寫 Controller

創建一個 Controller 返回視圖名稱和模型數據:

@Controller
public class HelloController {@RequestMapping("/hello")public ModelAndView hello() {ModelAndView mav = new ModelAndView("hello"); // 視圖名稱(對應 hello.ftl)mav.addObject("message", "Hello, FreeMarker with Spring MVC!"); // 傳遞數據return mav;}
}

5. 配置 web.xml

確保 DispatcherServlet 已正確配置:

<servlet><servlet-name>spring-mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-servlet.xml</param-value> <!-- XML 配置路徑 --></init-param><load-on-startup>1</load-on-startup>
</servlet><servlet-mapping><servlet-name>spring-mvc</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>

6. 測試

啟動應用,訪問 http://localhost:8080/your-app-context/hello,頁面應顯示:

Hello, FreeMarker with Spring MVC!

常見問題與解決

  1. 模板文件找不到

    • 檢查 templateLoaderPath 是否配置正確(注意末尾的 /)。
    • 確保模板文件位于 /WEB-INF/views/ 目錄下。
  2. 中文亂碼

    • FreeMarkerConfigurerViewResolver 中設置 defaultEncodingcontentTypeUTF-8
  3. 靜態資源訪問

    • 如果靜態資源(CSS/JS)無法加載,在 web.xml 中配置默認 Servlet 處理:
      <servlet-mapping><servlet-name>default</servlet-name><url-pattern>/static/*</url-pattern>
      </servlet-mapping>
      

高級配置

  • 自定義 FreeMarker 設置
    freemarkerConfig 中設置變量或共享函數:

    @Bean
    public FreeMarkerConfigurer freemarkerConfig() {FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();configurer.setTemplateLoaderPath("/WEB-INF/views/");Properties settings = new Properties();settings.put("datetime_format", "yyyy-MM-dd HH:mm:ss"); // 設置日期格式configurer.setFreemarkerSettings(settings);return configurer;
    }
    
  • 在模板中使用 Spring 標簽
    .ftl 文件中引入 Spring 標簽庫:

    <#import "spring.ftl" as spring>
    <@spring.message "welcome.message"/>
    

通過以上步驟,即可完成 Spring MVC 與 FreeMarker 的無縫整合,實現動態模板渲染。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81756.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81756.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81756.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis分布式鎖使用以及對接支付寶,paypal,strip跨境支付

本章重點在于如何使用redis的分布式鎖來鎖定庫存。減少超賣&#xff0c;同時也對接了支付寶&#xff0c;paypal&#xff0c;strip跨境支付 第一步先建立一個商品表 CREATE TABLE sys_product (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主鍵,code varchar(60) DEFAUL…

使用frpc鏈接內網的mysql

以下是配置 frpc 連接內網 MySQL 服務的詳細步驟&#xff1a; 1. 準備工作 frps 服務器&#xff1a;已部署在公網 IP 11.117.11.245&#xff0c;假設 frps 的默認端口為 7000。 內網 MySQL 服務&#xff1a;運行在內網機器的 3306 端口。 目標&#xff1a;通過公網 IP 11.117…

2025信息安全網絡安全意識培訓資料匯編(24份)

最新整理&#xff1a;2025信息安全網絡安全意識培訓資料匯編&#xff0c;共24份資料&#xff0c;供學習參考。 互聯網信息安全意識培訓.pptx100個網絡安全風險防范知識.pptx亞信信息安全意識培訓.pptx網絡安全法規及意識培訓.pptx網絡安全意識與案例分析.pptx綠盟-安全意識培訓…

JAVA:使用 XStream 實現對象與XML轉換的技術指南

1、簡述 XStream 是一個簡單便捷的 Java 庫,用于對象與 XML 的相互轉換。其主要特點是: 易于使用:無需復雜的配置即可直接使用。支持自定義:可以靈活地定制對象的序列化和反序列化規則。強大的功能:支持注解、自定義轉換器等。本文將詳細介紹 XStream 的基本使用方法,并…

VITA STANDARDS LIST,VITA 標準清單下載

VITA STANDARDS LIST&#xff0c;VITA 標準清單下載 DesignationTitleAbstractStatusVMEbus Handbook, 4th EditionA users guide to the VME, VME64 and VME64x bus specifications - features over 70 product photos and over 160 circuit diagrams, tables and graphs. The…

Assetto Corsa 神力科莎 [DLC 解鎖] [Steam] [Windows]

Assetto Corsa 神力科莎 [DLC 解鎖] [Steam] [Windows] 需要有游戲正版基礎本體&#xff0c;安裝路徑不能帶有中文&#xff0c;或其它非常規拉丁字符&#xff1b; DLC 版本 至最新全部 DLC 后續可能無法及時更新文章&#xff0c;具體最新版本見下載文件說明 DLC 解鎖列表&…

【Java idea配置】

IntelliJ IDEA創建類時自動生成注釋 /** * program: ${PROJECT_NAME} * * since: jdk1.8 * * description: ${description} * * author: ${USER} * * create: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} **/自動導入和自動移除無用導入 idea彩色日志不生效 調試日志輸出 在…

計算方法實驗六 數值積分

【實驗性質】綜合性實驗。 【實驗目的】理解插值型積分法&#xff1b;掌握復化積分法算法。 【實驗內容】 1對 &#xff0c;用復化梯形積分和變步長梯形積分求值&#xff08;截斷誤差不超過&#xff09;。 【理論基礎】 積分在工程中有重要的應用&#xff0c;數值積分…

Webug4.0靶場通關筆記11- 第15關任意文件下載與第16關MySQL配置文件下載

目錄 一、文件下載 二、第15關 任意文件下載 1.打開靶場 2.源碼分析 3.滲透實戰 三、第16關 MySQL配置文件下載 1.打開靶場 2.源碼分析 3.滲透實戰 &#xff08;1&#xff09;Windows系統 &#xff08;2&#xff09;Linux系統 四、滲透防御 一、文件下載 本文通過…

小土堆pytorch--tensorboard的使用

小土堆pytorch--tensorboard的使用 小土堆pytorch--tensorboard的使用0.介紹1.使用tensorboard繪制 y x 等簡單函數1.1 相應的代碼1.2 對上述代碼的解釋1.3 可能遇到的問題1.3.1 問題1.3.2 解決方法 2.使用tensorboard加載數據集中的圖片2.1 相應代碼2.2 對上述代碼的解釋2.2.…

大模型(LLMs)RAG 版面分析——文本分塊面

大模型&#xff08;LLMs&#xff09;RAG 版面分析——文本分塊面 一、為什么需要對文本分塊&#xff1f; 二、能不能介紹一下常見的文本分塊方法&#xff1f; 2.1 一般的文本分塊方法 2.2 正則拆分的文本分塊方法 2.3 Spacy Text Splitter 方法 2.4 基于 langchain 的 Cha…

解構區塊鏈身份認證:從ID到零知識證明的實戰指南

引言 在數字經濟高速發展的今天&#xff0c;數字身份已成為個人與數字世界交互的核心憑證。傳統中心化身份系統存在數據孤島、隱私泄露、單點故障等痛點&#xff0c;而區塊鏈技術憑借??去中心化、不可篡改、可追溯??的特性&#xff0c;為數字身份驗證提供了革命性解決方案…

c#數據結構 線性表篇 非常用線性集合總結

本人能力有限,使用了一些Ai的結論,如有不足還請斧正 目錄 1.HashSet <> Dictionary 2.SortedSet <>提供升序方法的List 3.ArrayList<>List 4.BitArray <> Bit[] array 5.StringCollection <>List 6.StringDictionary<>Dictionary 1…

爬蟲管理平臺-最新版本發布

TaskPyro 是什么&#xff1f; TaskPyro 是一個輕量級的 Python 任務調度平臺&#xff0c;專注于提供簡單易用的任務管理和爬蟲調度解決方案。它能夠幫助您輕松管理和調度 Python 任務&#xff0c;特別適合需要定時執行的爬蟲任務和數據處理任務。 官方文檔&#xff1a;https:/…

過采樣處理

一、數據讀取與初步觀察 首先&#xff0c;使用pandas庫讀取信用卡交易數據集&#xff1a; data pd.read_csv(r"./creditcard.csv") print(data.head())通過head()方法查看數據集的前幾行&#xff0c;初步了解數據的結構和內容。該數據集包含交易時間、交易金額、多…

潮乎盲盒商城系統全開源多級分銷推廣海報獎品兌換試玩概率OSS云存儲多端源碼

一、源碼描述 這是一套潮乎盲盒商城源碼&#xff0c;仿小叮當盲盒商城&#xff0c;后端Laravel框架前端uniappvue&#xff0c;前后端數據庫分離&#xff0c;支持四端同步數據&#xff08;H5小程序等&#xff09;&#xff0c;測試環境: php7.4&#xff0c;mysql5.6&#xff0c;…

c++環境和vscode常用的一些有用插件

環境 WSL需要安裝cmake 編譯器g14 應該是包含了所有std:c23把好像包含部分c26 vscode 需要插件cmake vscode clangd 方便提示吧 File Watch 插件目的在保存.h/.cpp文件時候自動執行vscode 的cmake吧 error lens 方便每次顯示錯誤和警告的提示懶得每次點擊去看錯誤 Edit Sugge…

Spring 轉發 form-data 文件上傳請求時中文文件名亂碼

Spring 轉發 form-data 文件上傳請求時中文文件名亂碼 復現問題找原因解決問題參考 復現問題 后端有兩個接口&#xff1a; /upload 是文件上傳的接口。 /forward 是轉發文件上傳請求的接口。 RequestMapping RestController public class FileUploadController {/*** 直接調…

MySQL 8.4.4 安全升級指南:從漏洞修復到版本升級全流程解析

目錄 二、升級前關鍵注意事項 1. 數據安全與備份 2. 版本兼容性與路徑規劃 三、分步升級操作流程 1. 環境預檢與準備 2. 安裝包部署 3. 強制升級組件 4. 驗證與啟動 一、背景與必要性 近期安全掃描發現生產環境的 MySQL 數據庫存在多個高危漏洞(CVE 詳情參見Oracle 官…

vulkanscenegraph顯示傾斜模型(6.4)-多線程下的記錄與提交

前言 上章深入分析了幀循環中呈現階段的具體實現。本章將分析多線程下的記錄與提交&#xff0c;進一步剖析vsg幀循環過程中的同步機制&#xff0c;并揭露信號量(VkSemaphore)和圍欄(VkFence)以及vsg::FrameBlock與vsg::Barrier在其中的作用。 目錄 1 信號量(VkSemaphore)、柵欄…