Springboot整合Freemarker的實(shí)現(xiàn)詳細(xì)過程
基本配置、測(cè)試
1、導(dǎo)入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
2、準(zhǔn)備一個(gè)Freemarker模板(.ftl)

3、注入Configuration對(duì)象(freemarker.template包下)

4、生成商品詳情模板
@Controller
@RequestMapping("/goodItem")
public class GoodItemController {
@Reference
private IGoodsService goodsService;
@Autowired
private Configuration configuration;
@RequestMapping("/createHtml")
@ResponseBody
public String createHtml(int gid, HttpServletRequest request){
//通過商品id獲取商品詳情信息
Goods goods = goodsService.queryById(gid);
String [] images=goods.getGimage().split("\\|");
//通過模板生成商品靜態(tài)頁面
try {
//獲取商品詳情的模板對(duì)象
Template template = configuration.getTemplate("goodsItem.ftl");
//準(zhǔn)備商品數(shù)據(jù)
Map<String,Object> map=new HashMap<>();
map.put("goods",goods);
map.put("context",request.getContextPath());
//freemarker頁面沒有分割功能,所以通過后臺(tái)將圖片分割后,將圖片數(shù)組傳到后臺(tái)
map.put("images",images);
//生成靜態(tài)頁
//獲得classpath路徑
//靜態(tài)頁面的名稱必須和商品有所關(guān)聯(lián),最簡(jiǎn)單的方式就是用商品的id作為頁面的名字
String path = this.getClass().getResource("/static/page/").getPath()+goods.getId()+".html";;
template.process(map,new FileWriter(path));
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
注意:
1、freemarker頁面不能通過<base th:href="${#request.getContextPath()+'/'}" rel="external nofollow" >獲得項(xiàng)目的根路徑。
因此可從后臺(tái)將根路徑傳到前端,然后通過<base href="${context}/" rel="external nofollow" />獲取。
2、當(dāng)page是一個(gè)空文件夾的時(shí)候,會(huì)報(bào)錯(cuò)。這是因?yàn)閙aven項(xiàng)目不會(huì)對(duì)空文件夾進(jìn)行打包編譯。
FreeMarker的基本語法


到此這篇關(guān)于Springboot整合Freemarker的實(shí)現(xiàn)詳細(xì)過程的文章就介紹到這了,更多相關(guān)Springboot整合Freemarker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java使用JSCH實(shí)現(xiàn)SFTP文件管理
這篇文章主要為大家詳細(xì)介紹了java使用JSCH實(shí)現(xiàn)SFTP文件管理,實(shí)現(xiàn)上傳、下載等功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο?
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(面向?qū)ο螅?,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
使用java + selenium + OpenCV破解網(wǎng)易易盾滑動(dòng)驗(yàn)證碼的示例
這篇文章主要介紹了使用java + selenium + OpenCV破解網(wǎng)易易盾滑動(dòng)驗(yàn)證碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Springboot實(shí)現(xiàn)多文件上傳代碼解析
這篇文章主要介紹了Springboot實(shí)現(xiàn)多文件上傳代碼解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java?POI導(dǎo)出Excel時(shí)合并單元格沒有邊框的問題解決
這篇文章主要給大家介紹了關(guān)于Java?POI導(dǎo)出Excel時(shí)合并單元格沒有邊框的問題解決辦法,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-07-07
淺談Java并發(fā)中ReentrantLock鎖應(yīng)該怎么用
本文主要介紹了ava并發(fā)中ReentrantLock鎖的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Java 線程的生命周期詳細(xì)介紹及實(shí)例代碼
這篇文章主要介紹了Java 線程的生命周期的相關(guān)資料,并附簡(jiǎn)單實(shí)例代碼,幫助大家理解,需要的朋友可以參考下2016-10-10

