Springboot整合Freemarker的實(shí)現(xiàn)詳細(xì)過(guò)程
基本配置、測(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){
//通過(guò)商品id獲取商品詳情信息
Goods goods = goodsService.queryById(gid);
String [] images=goods.getGimage().split("\\|");
//通過(guò)模板生成商品靜態(tài)頁(yè)面
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頁(yè)面沒(méi)有分割功能,所以通過(guò)后臺(tái)將圖片分割后,將圖片數(shù)組傳到后臺(tái)
map.put("images",images);
//生成靜態(tài)頁(yè)
//獲得classpath路徑
//靜態(tài)頁(yè)面的名稱必須和商品有所關(guān)聯(lián),最簡(jiǎn)單的方式就是用商品的id作為頁(yè)面的名字
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頁(yè)面不能通過(guò)<base th:href="${#request.getContextPath()+'/'}" rel="external nofollow" >獲得項(xiàng)目的根路徑。
因此可從后臺(tái)將根路徑傳到前端,然后通過(guò)<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的基本語(yǔ)法


到此這篇關(guān)于Springboot整合Freemarker的實(shí)現(xiàn)詳細(xì)過(guò)程的文章就介紹到這了,更多相關(guān)Springboot整合Freemarker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-plus selectByMap條件查詢方式
這篇文章主要介紹了Mybatis-plus selectByMap條件查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
SpringBoot webSocket實(shí)現(xiàn)發(fā)送廣播、點(diǎn)對(duì)點(diǎn)消息和Android接收
這篇文章主要介紹了SpringBoot webSocket實(shí)現(xiàn)發(fā)送廣播、點(diǎn)對(duì)點(diǎn)消息和Android接收,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
Spring事件監(jiān)聽(tīng)機(jī)制使用和原理解析
Spring的監(jiān)聽(tīng)機(jī)制基于觀察者模式,就是就是我們所說(shuō)的發(fā)布訂閱模式,這種模式可以在一定程度上實(shí)現(xiàn)代碼的解耦,本文將從原理上解析Spring事件監(jiān)聽(tīng)機(jī)制,需要的朋友可以參考下2023-06-06
Java IO流體系繼承結(jié)構(gòu)圖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java IO流體系繼承結(jié)構(gòu)圖,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
Java servlet 使用 PrintWriter 時(shí)的編碼與亂碼的示例代碼
本篇文章主要介紹了Java servlet 使用 PrintWriter 時(shí)的編碼與亂碼的示例代碼,探討了 PrintWriter 的缺省編碼與普通字符流的缺省編碼的差異,具有一定的參考價(jià)值,有興趣的可以了解一下2017-11-11
解析ConcurrentHashMap: transfer方法源碼分析(難點(diǎn))
ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見(jiàn)問(wèn)題---ConcurrentHashMap知識(shí),一起看看吧2021-06-06
Junit單元測(cè)試關(guān)于@Transactional注解引起的事務(wù)回滾問(wèn)題
這篇文章主要介紹了Junit單元測(cè)試關(guān)于@Transactional注解引起的事務(wù)回滾問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08

