摘要:系列教程接近完工,最近進入修修補補階段。但是這里的自動化配置只做了模板位置檢查,其他配置則是在導入的配置中完成的。表示當前配置在存在和時才會生效。是的一些基本配置,例如等則是視圖解析器的基本配置,包含了等屬性。現在,這些配置由幫我們完成了。
Spring Boot2 系列教程接近完工,最近進入修修補補階段。Freemarker 整合貌似還沒和大家聊過,因此今天把這個補充上。
已經完工的 Spring Boot2 教程,大家可以參考這里:
干貨|最新版 Spring Boot2.1.5 教程+案例合集
Freemarker 簡介這是一個相當老牌的開源的免費的模版引擎。通過 Freemarker 模版,我們可以將數據渲染成 HTML 網頁、電子郵件、配置文件以及源代碼等。Freemarker 不是面向最終用戶的,而是一個 Java 類庫,我們可以將之作為一個普通的組件嵌入到我們的產品中。
來看一張來自 Freemarker 官網的圖片:
可以看到,Freemarker 可以將模版和數據渲染成 HTML 。
Freemarker 模版后綴為 .ftl(FreeMarker Template Language)。FTL 是一種簡單的、專用的語言,它不是像 Java 那樣成熟的編程語言。在模板中,你可以專注于如何展現數據, 而在模板之外可以專注于要展示什么數據。
好了,這是一個簡單的介紹,接下來我們來看看 Freemarker 和 Spring Boot 的一個整合操作。
實踐在 SSM 中整合 Freemarker ,所有的配置文件加起來,前前后后大約在 50 行左右,Spring Boot 中要幾行配置呢? 0 行!
1.創(chuàng)建工程首先創(chuàng)建一個 Spring Boot 工程,引入 Freemarker 依賴,如下圖:
org.springframework.boot spring-boot-starter-freemarker org.springframework.boot spring-boot-starter-web
工程創(chuàng)建完成后,在 org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration 類中,可以看到關于 Freemarker 的自動化配置:
@Configuration @ConditionalOnClass({ freemarker.template.Configuration.class, FreeMarkerConfigurationFactory.class }) @EnableConfigurationProperties(FreeMarkerProperties.class) @Import({ FreeMarkerServletWebConfiguration.class, FreeMarkerReactiveWebConfiguration.class, FreeMarkerNonWebConfiguration.class }) public class FreeMarkerAutoConfiguration { }
從這里可以看出,當 classpath 下存在 freemarker.template.Configuration 以及 FreeMarkerConfigurationFactory 時,配置才會生效,也就是說當我們引入了 Freemarker 之后,配置就會生效。但是這里的自動化配置只做了模板位置檢查,其他配置則是在導入的 FreeMarkerServletWebConfiguration 配置中完成的。那么我們再來看看 FreeMarkerServletWebConfiguration 類,部分源碼如下:
@Configuration @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) @ConditionalOnClass({ Servlet.class, FreeMarkerConfigurer.class }) @AutoConfigureAfter(WebMvcAutoConfiguration.class) class FreeMarkerServletWebConfiguration extends AbstractFreeMarkerConfiguration { protected FreeMarkerServletWebConfiguration(FreeMarkerProperties properties) { super(properties); } @Bean @ConditionalOnMissingBean(FreeMarkerConfig.class) public FreeMarkerConfigurer freeMarkerConfigurer() { FreeMarkerConfigurer configurer = new FreeMarkerConfigurer(); applyProperties(configurer); return configurer; } @Bean @ConditionalOnMissingBean(name = "freeMarkerViewResolver") @ConditionalOnProperty(name = "spring.freemarker.enabled", matchIfMissing = true) public FreeMarkerViewResolver freeMarkerViewResolver() { FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); getProperties().applyToMvcViewResolver(resolver); return resolver; } }
我們來簡單看下這段源碼:
@ConditionalOnWebApplication 表示當前配置在 web 環(huán)境下才會生效。
ConditionalOnClass 表示當前配置在存在 Servlet 和 FreeMarkerConfigurer 時才會生效。
@AutoConfigureAfter 表示當前自動化配置在 WebMvcAutoConfiguration 之后完成。
代碼中,主要提供了 FreeMarkerConfigurer 和 FreeMarkerViewResolver。
FreeMarkerConfigurer 是 Freemarker 的一些基本配置,例如 templateLoaderPath、defaultEncoding 等
FreeMarkerViewResolver 則是視圖解析器的基本配置,包含了viewClass、suffix、allowRequestOverride、allowSessionOverride 等屬性。
另外還有一點,在這個類的構造方法中,注入了 FreeMarkerProperties:
@ConfigurationProperties(prefix = "spring.freemarker") public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties { public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/"; public static final String DEFAULT_PREFIX = ""; public static final String DEFAULT_SUFFIX = ".ftl"; /** * Well-known FreeMarker keys which are passed to FreeMarker"s Configuration. */ private Mapsettings = new HashMap<>(); }
FreeMarkerProperties 中則配置了 Freemarker 的基本信息,例如模板位置在 classpath:/templates/ ,再例如模板后綴為 .ftl,那么這些配置我們以后都可以在 application.properties 中進行修改。
如果我們在 SSM 的 XML 文件中自己配置 Freemarker ,也不過就是配置這些東西。現在,這些配置由 FreeMarkerServletWebConfiguration? 幫我們完成了。
2.創(chuàng)建類首先我們來創(chuàng)建一個 User 類,如下:
public class User { private Long id; private String username; private String address; //省略 getter/setter }
再來創(chuàng)建 UserController:
@Controller public class UserController { @GetMapping("/index") public String index(Model model) { Listusers = new ArrayList<>(); for (int i = 0; i < 10; i++) { User user = new User(); user.setId((long) i); user.setUsername("javaboy>>>>" + i); user.setAddress("www.javaboy.org>>>>" + i); users.add(user); } model.addAttribute("users", users); return "index"; } }
最后在 freemarker 中渲染數據:
Title
用戶編號 | 用戶名稱 | 用戶地址 |
${user.id} | ${user.username} | ${user.address} |
運行效果如下:
其他配置如果我們要修改模版文件位置等,可以在 application.properties 中進行配置:
spring.freemarker.allow-request-override=false spring.freemarker.allow-session-override=false spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.suffix=.ftl spring.freemarker.template-loader-path=classpath:/templates/
配置文件按照順序依次解釋如下:
HttpServletRequest的屬性是否可以覆蓋controller中model的同名項
HttpSession的屬性是否可以覆蓋controller中model的同名項
是否開啟緩存
模板文件編碼
是否檢查模板位置
Content-Type的值
是否將HttpServletRequest中的屬性添加到Model中
是否將HttpSession中的屬性添加到Model中
模板文件后綴
模板文件位置
好了,整合完成之后,Freemarker 的更多用法,就和在 SSM 中使用 Freemarker 一樣了,這里我就不再贅述。
結語本文和大家簡單聊一聊 Spring Boot 整合 Freemarker,算是對 Spring Boot2 教程的一個補充(后面還會有一些補充),有問題歡迎留言討論。
本項目案例,我已經上傳到 GitHub 上,歡迎大家 star:https://github.com/lenve/javaboy-code-samples
關注公眾號【江南一點雨】,專注于 Spring Boot+微服務以及前后端分離等全棧技術,定期視頻教程分享,關注后回復 Java ,領取松哥為你精心準備的 Java 干貨!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75178.html
摘要:大家自己了解一下的使用方法,我這里就不進行詳細的講述了。啟動方式兩種方式都可以主函數啟動或者驗證訪問頁面,驗證是否輸出了當前時間。為了提高大家學習效果,錄制了同步的視頻課程,還望大家支持視頻課程 Spring Boot - 初識 Hello World 索引 Spring Boot - 初識 Hello World Spring Boot - Servlet、過濾器、監(jiān)聽器、攔截器 ...
摘要:數據和信息是不可分離的,數據是信息的表達,信息是數據的內涵。數據本身沒有意義,數據只有對實體行為產生影響時才成為信息。主要目標是為開發(fā)提供天然的模板,并且能在里面準確的顯示。目前是自然更加推薦。 這是泥瓦匠的第105篇原創(chuàng) 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-4-thym...
摘要:時間年月日星期四說明本文部分內容均來自慕課網。哈希表實現命令,將哈希表中的域的值設為實現命令,返回哈希表中給定域的值實現命令,刪除哈希表中的一個或多個指定域,不存在的域將被忽略。實現命令,返回哈希表中,所有的域和值。 時間:2018年04月19日星期四說明:本文部分內容均來自慕課網。@慕課網:https://www.imooc.com教學源碼:https://github.com/zc...
摘要:的作用可以看到,它給我們提供了一些核心的功能代碼生成器和現成的接口以及可以結合的條件構造器使我們的代碼變得足夠優(yōu)雅,分頁的使用也是相當的方便,以及提供了不同的主鍵生成策略。 簡介 Mybatis-Plus是在Mybatis的基礎上,國人開發(fā)的一款持久層框架。 showImg(https://segmentfault.com/img/bVbvFk4?w=2022&h=862); 并且榮獲...
摘要:格式文檔導出,是信息系統(tǒng)中非常實用的一種功能,用于各種報表和文檔的到處。示例中,使用生成要導出的格式文檔,通過來實現文件下載。將轉換成文檔生成的代碼比較簡單,創(chuàng)建一個對象,然后會在指定的中輸入生成的文件。作用相當于在中使用進行配置。 showImg(https://segmentfault.com/img/remote/1460000008547574); PDF格式文檔導出,是信息系...
閱讀 2571·2021-09-26 10:13
閱讀 5969·2021-09-08 10:46
閱讀 686·2019-08-30 15:53
閱讀 2957·2019-08-29 16:13
閱讀 2750·2019-08-26 12:23
閱讀 3478·2019-08-26 11:24
閱讀 1085·2019-08-23 18:09
閱讀 1028·2019-08-23 17:08