Springboot整合Freemarker的實(shí)現(xiàn)詳細(xì)過(guò)程
基本配置、測(cè)試
1、導(dǎo)入依賴(lài)
<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è)面的名稱(chēng)必須和商品有所關(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條件查詢(xún)方式
這篇文章主要介紹了Mybatis-plus selectByMap條件查詢(xún)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot 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-03Spring事件監(jiān)聽(tīng)機(jī)制使用和原理解析
Spring的監(jiān)聽(tīng)機(jī)制基于觀(guān)察者模式,就是就是我們所說(shuō)的發(fā)布訂閱模式,這種模式可以在一定程度上實(shí)現(xiàn)代碼的解耦,本文將從原理上解析Spring事件監(jiān)聽(tīng)機(jī)制,需要的朋友可以參考下2023-06-06Java IO流體系繼承結(jié)構(gòu)圖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java IO流體系繼承結(jié)構(gòu)圖,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05Java 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類(lèi)似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見(jiàn)問(wèn)題---ConcurrentHashMap知識(shí),一起看看吧2021-06-06Junit單元測(cè)試關(guān)于@Transactional注解引起的事務(wù)回滾問(wèn)題
這篇文章主要介紹了Junit單元測(cè)試關(guān)于@Transactional注解引起的事務(wù)回滾問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08