springboot 如何通過(guò)SpringTemplateEngine渲染html
要單獨(dú)獲取到渲染后的 HTML 字符串,便于進(jìn)行其他操作,可以通過(guò)以下幾種方式實(shí)現(xiàn)。常見(jiàn)的用法是通過(guò) Spring 的 Thymeleaf
模板引擎渲染模板為 HTML 字符串,而不是直接將其輸出到瀏覽器。這樣你就可以對(duì)渲染后的字符串進(jìn)行其他操作,比如保存到文件或進(jìn)一步處理。
1. 使用 Thymeleaf 渲染為字符串
你可以使用 Thymeleaf
的 TemplateEngine
手動(dòng)渲染模板為字符串。需要通過(guò) TemplateEngine
渲染模板文件,并且將渲染后的 HTML 作為一個(gè)字符串返回。你可以創(chuàng)建一個(gè)自定義的服務(wù)來(lái)處理這個(gè)需求。
1.1 添加依賴(lài)
除了 Thymeleaf 依賴(lài)之外,還需要確保有 Spring Web 和 Thymeleaf 依賴(lài)在 pom.xml
中:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
1.2 自定義服務(wù)類(lèi)渲染 Thymeleaf 模板為字符串
import org.springframework.stereotype.Service; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import java.util.Map; @Service public class HtmlRenderingService { private final TemplateEngine templateEngine; public HtmlRenderingService(TemplateEngine templateEngine) { this.templateEngine = templateEngine; } public String renderHtml(String templateName, Map<String, Object> variables) { // 創(chuàng)建一個(gè)上下文對(duì)象 Context context = new Context(); // 將傳遞的變量設(shè)置到上下文 context.setVariables(variables); // 渲染指定模板為字符串 return templateEngine.process(templateName, context); } }
templateEngine.process()
會(huì)根據(jù)提供的模板名稱(chēng)和上下文變量,渲染出最終的 HTML 字符串。variables
是一個(gè)Map
對(duì)象,用于傳遞到模板中的變量。
1.3 控制器調(diào)用服務(wù)類(lèi)渲染 HTML 字符串
你可以在控制器中調(diào)用這個(gè)服務(wù),將模板渲染為字符串,并執(zhí)行你想要的操作(如返回、保存、日志等)。
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RestController public class HtmlRenderController { @Autowired private HtmlRenderingService htmlRenderingService; @GetMapping("/render-html") public String renderHtml() { // 假設(shè)要傳遞的熱點(diǎn)資源和推薦資源數(shù)據(jù) HotResource hotResource = new HotResource("熱點(diǎn)資源1", "12345", "67890"); Map<String, Object> variables = new HashMap<>(); variables.put("hotResource", hotResource); return htmlRenderingService.renderHtml("resources", variables); } }
在上面的代碼中,當(dāng)你訪問(wèn) /render-html
這個(gè)接口時(shí),控制器會(huì)調(diào)用 HtmlRenderingService
服務(wù),將 resources.html
模板渲染為字符串并返回。
1.4 Thymeleaf 模板文件 (resources.html)
你可以使用和之前一樣的 Thymeleaf 模板文件進(jìn)行動(dòng)態(tài)渲染,例如:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>資源推薦</title> <!-- 樣式略 --> </head> <body> <div class="container"> <div class="section"> <h2>熱點(diǎn)資源</h2> <div class="item hot-resource"> <a th:href="@{/resource/hot(id=${hotResource.resourceId})}" rel="external nofollow" target="_blank" th:text="${hotResource.name}">熱點(diǎn)資源名稱(chēng)</a> <p th:text="'資源ID:' + ${hotResource.resourceId}">資源ID</p> <p th:text="'熱點(diǎn)記錄ID:' + ${hotResource.recordId}">熱點(diǎn)記錄ID</p> </div> </div> </div> </body> </html>
2. 渲染 HTML 后進(jìn)行其他操作
通過(guò)上述方式獲取的 HTML 字符串,你可以在控制器中進(jìn)行任意操作:
- 返回 HTML 字符串:直接返回渲染后的 HTML 字符串給前端。
- 保存 HTML 文件:將 HTML 字符串保存到服務(wù)器上的某個(gè)文件。
- 傳遞到其他服務(wù):你可以將這個(gè)字符串發(fā)送到其他服務(wù)或系統(tǒng)。
例如,將渲染后的 HTML 保存為文件:
import java.io.FileWriter; import java.io.IOException; public class HtmlFileWriter { public static void saveHtmlToFile(String htmlContent, String filePath) throws IOException { FileWriter fileWriter = new FileWriter(filePath); fileWriter.write(htmlContent); fileWriter.close(); } }
在控制器中調(diào)用這個(gè)方法:
@GetMapping("/save-html") public String saveHtmlToFile() { HotResource hotResource = new HotResource("熱點(diǎn)資源1", "12345", "67890"); Map<String, Object> variables = new HashMap<>(); variables.put("hotResource", hotResource); String renderedHtml = htmlRenderingService.renderHtml("resources", variables); try { HtmlFileWriter.saveHtmlToFile(renderedHtml, "/path/to/save/file.html"); return "HTML file saved successfully!"; } catch (IOException e) { e.printStackTrace(); return "Failed to save HTML file!"; } }
總結(jié)
通過(guò)上述方案,你可以:
- 動(dòng)態(tài)渲染 HTML 頁(yè)面為字符串。
- 根據(jù)需要返回 HTML 字符串、保存到文件或進(jìn)行其他處理。
使用 Thymeleaf 渲染為字符串的方式非常靈活,適合你進(jìn)行更多自定義操作。
到此這篇關(guān)于springboot 通過(guò)SpringTemplateEngine渲染html的文章就介紹到這了,更多相關(guān)springboot 渲染html內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?@Scheduled定時(shí)器注解使用方式
這篇文章主要介紹了Spring?@Scheduled定時(shí)器注解使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08spring-boot報(bào)錯(cuò)java: 程序包javax.servlet.http不存在
當(dāng)springboot項(xiàng)目從2.7.x的升級(jí)到3.0.x的時(shí)候,會(huì)遇到一個(gè)問(wèn)題java: 程序包javax.servlet.http不存在,下面就來(lái)具體介紹一下,感興趣的可以了解一下2024-08-08SpringBoot3中Spring?WebFlux?SSE服務(wù)器發(fā)送事件的實(shí)現(xiàn)步驟
本文介紹了如何使用SpringBoot3和響應(yīng)式編程實(shí)現(xiàn)服務(wù)器發(fā)送事件(SSE),并討論了其在實(shí)時(shí)數(shù)據(jù)推送場(chǎng)景中的優(yōu)勢(shì),通過(guò)示例代碼,展示了如何創(chuàng)建SSE控制器、客戶(hù)端接收數(shù)據(jù)以及優(yōu)化與擴(kuò)展,感興趣的朋友跟隨小編一起看看吧2024-11-11使用Java實(shí)現(xiàn)qq郵箱發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了使用Java實(shí)現(xiàn)qq郵箱發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2010-05-05簡(jiǎn)單實(shí)現(xiàn)Java驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了簡(jiǎn)單實(shí)現(xiàn)Java驗(yàn)證碼功能的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05java system類(lèi)使用方法示例 獲取系統(tǒng)信息
這篇文章主要介紹了java system類(lèi)使用方法,該類(lèi)中的方法都是靜態(tài)的。不能被實(shí)例化,沒(méi)有對(duì)外提供構(gòu)造函數(shù),該類(lèi)可以獲取系統(tǒng)信息2014-01-01