成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?

xiaotianyi / 1637人閱讀

摘要:系列教程接近完工,最近進(jìn)入修修補(bǔ)補(bǔ)階段。但是這里的自動(dòng)化配置只做了模板位置檢查,其他配置則是在導(dǎo)入的配置中完成的。表示當(dāng)前配置在存在和時(shí)才會(huì)生效。是的一些基本配置,例如等則是視圖解析器的基本配置,包含了等屬性?,F(xiàn)在,這些配置由幫我們完成了。

Spring Boot2 系列教程接近完工,最近進(jìn)入修修補(bǔ)補(bǔ)階段。Freemarker 整合貌似還沒和大家聊過,因此今天把這個(gè)補(bǔ)充上。

已經(jīng)完工的 Spring Boot2 教程,大家可以參考這里:

干貨|最新版 Spring Boot2.1.5 教程+案例合集

Freemarker 簡(jiǎn)介

這是一個(gè)相當(dāng)老牌的開源的免費(fèi)的模版引擎。通過 Freemarker 模版,我們可以將數(shù)據(jù)渲染成 HTML 網(wǎng)頁、電子郵件、配置文件以及源代碼等。Freemarker 不是面向最終用戶的,而是一個(gè) Java 類庫,我們可以將之作為一個(gè)普通的組件嵌入到我們的產(chǎn)品中。

來看一張來自 Freemarker 官網(wǎng)的圖片:

可以看到,F(xiàn)reemarker 可以將模版和數(shù)據(jù)渲染成 HTML 。

Freemarker 模版后綴為 .ftl(FreeMarker Template Language)。FTL 是一種簡(jiǎn)單的、專用的語言,它不是像 Java 那樣成熟的編程語言。在模板中,你可以專注于如何展現(xiàn)數(shù)據(jù), 而在模板之外可以專注于要展示什么數(shù)據(jù)。

好了,這是一個(gè)簡(jiǎn)單的介紹,接下來我們來看看 Freemarker 和 Spring Boot 的一個(gè)整合操作。

實(shí)踐

在 SSM 中整合 Freemarker ,所有的配置文件加起來,前前后后大約在 50 行左右,Spring Boot 中要幾行配置呢? 0 行!

1.創(chuàng)建工程

首先創(chuàng)建一個(gè) 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 類中,可以看到關(guān)于 Freemarker 的自動(dòng)化配置:

@Configuration
@ConditionalOnClass({ freemarker.template.Configuration.class, FreeMarkerConfigurationFactory.class })
@EnableConfigurationProperties(FreeMarkerProperties.class)
@Import({ FreeMarkerServletWebConfiguration.class, FreeMarkerReactiveWebConfiguration.class,
                FreeMarkerNonWebConfiguration.class })
public class FreeMarkerAutoConfiguration {
}

從這里可以看出,當(dāng) classpath 下存在 freemarker.template.Configuration 以及 FreeMarkerConfigurationFactory 時(shí),配置才會(huì)生效,也就是說當(dāng)我們引入了 Freemarker 之后,配置就會(huì)生效。但是這里的自動(dòng)化配置只做了模板位置檢查,其他配置則是在導(dǎo)入的 FreeMarkerServletWebConfiguration 配置中完成的。那么我們?cè)賮砜纯?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;
        }
}

我們來簡(jiǎn)單看下這段源碼:

@ConditionalOnWebApplication 表示當(dāng)前配置在 web 環(huán)境下才會(huì)生效。

ConditionalOnClass 表示當(dāng)前配置在存在 Servlet 和 FreeMarkerConfigurer 時(shí)才會(huì)生效。

@AutoConfigureAfter 表示當(dāng)前自動(dòng)化配置在 WebMvcAutoConfiguration 之后完成。

代碼中,主要提供了 FreeMarkerConfigurer 和 FreeMarkerViewResolver。

FreeMarkerConfigurer 是 Freemarker 的一些基本配置,例如 templateLoaderPath、defaultEncoding 等

FreeMarkerViewResolver 則是視圖解析器的基本配置,包含了viewClass、suffix、allowRequestOverride、allowSessionOverride 等屬性。

另外還有一點(diǎn),在這個(gè)類的構(gòu)造方法中,注入了 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 Map settings = new HashMap<>();
}

FreeMarkerProperties 中則配置了 Freemarker 的基本信息,例如模板位置在 classpath:/templates/ ,再例如模板后綴為 .ftl,那么這些配置我們以后都可以在 application.properties 中進(jìn)行修改。

如果我們?cè)?SSM 的 XML 文件中自己配置 Freemarker ,也不過就是配置這些東西?,F(xiàn)在,這些配置由 FreeMarkerServletWebConfiguration? 幫我們完成了。

2.創(chuàng)建類

首先我們來創(chuàng)建一個(gè) 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) {
        List users = 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 中渲染數(shù)據(jù):




    
    Title



    <#list users as user>
        
用戶編號(hào) 用戶名稱 用戶地址
${user.id} ${user.username} ${user.address}

運(yùn)行效果如下:

其他配置

如果我們要修改模版文件位置等,可以在 application.properties 中進(jìn)行配置:

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的同名項(xiàng)

HttpSession的屬性是否可以覆蓋controller中model的同名項(xiàng)

是否開啟緩存

模板文件編碼

是否檢查模板位置

Content-Type的值

是否將HttpServletRequest中的屬性添加到Model中

是否將HttpSession中的屬性添加到Model中

模板文件后綴

模板文件位置

好了,整合完成之后,F(xiàn)reemarker 的更多用法,就和在 SSM 中使用 Freemarker 一樣了,這里我就不再贅述。

結(jié)語

本文和大家簡(jiǎn)單聊一聊 Spring Boot 整合 Freemarker,算是對(duì) Spring Boot2 教程的一個(gè)補(bǔ)充(后面還會(huì)有一些補(bǔ)充),有問題歡迎留言討論。

本項(xiàng)目案例,我已經(jīng)上傳到 GitHub 上,歡迎大家 star:https://github.com/lenve/javaboy-code-samples

關(guān)注公眾號(hào)【江南一點(diǎn)雨】,專注于 Spring Boot+微服務(wù)以及前后端分離等全棧技術(shù),定期視頻教程分享,關(guān)注后回復(fù) Java ,領(lǐng)取松哥為你精心準(zhǔn)備的 Java 干貨!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75178.html

相關(guān)文章

  • Spring Boot - 整合Jsp/FreeMarker

    摘要:大家自己了解一下的使用方法,我這里就不進(jìn)行詳細(xì)的講述了。啟動(dòng)方式兩種方式都可以主函數(shù)啟動(dòng)或者驗(yàn)證訪問頁面,驗(yàn)證是否輸出了當(dāng)前時(shí)間。為了提高大家學(xué)習(xí)效果,錄制了同步的視頻課程,還望大家支持視頻課程 Spring Boot - 初識(shí) Hello World 索引 Spring Boot - 初識(shí) Hello World Spring Boot - Servlet、過濾器、監(jiān)聽器、攔截器 ...

    AbnerMing 評(píng)論0 收藏0
  • Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)

    摘要:數(shù)據(jù)和信息是不可分離的,數(shù)據(jù)是信息的表達(dá),信息是數(shù)據(jù)的內(nèi)涵。數(shù)據(jù)本身沒有意義,數(shù)據(jù)只有對(duì)實(shí)體行為產(chǎn)生影響時(shí)才成為信息。主要目標(biāo)是為開發(fā)提供天然的模板,并且能在里面準(zhǔn)確的顯示。目前是自然更加推薦。 這是泥瓦匠的第105篇原創(chuàng) 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-4-thym...

    姘存按 評(píng)論0 收藏0
  • 慕課網(wǎng)_《SpringBoot開發(fā)常用技術(shù)整合》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期四說明本文部分內(nèi)容均來自慕課網(wǎng)。哈希表實(shí)現(xiàn)命令,將哈希表中的域的值設(shè)為實(shí)現(xiàn)命令,返回哈希表中給定域的值實(shí)現(xiàn)命令,刪除哈希表中的一個(gè)或多個(gè)指定域,不存在的域?qū)⒈缓雎?。?shí)現(xiàn)命令,返回哈希表中,所有的域和值。 時(shí)間:2018年04月19日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):https://www.imooc.com教學(xué)源碼:https://github.com/zc...

    chengtao1633 評(píng)論0 收藏0
  • Spring Boot 2.x(五):整合Mybatis-Plus

    摘要:的作用可以看到,它給我們提供了一些核心的功能代碼生成器和現(xiàn)成的接口以及可以結(jié)合的條件構(gòu)造器使我們的代碼變得足夠優(yōu)雅,分頁的使用也是相當(dāng)?shù)姆奖?,以及提供了不同的主鍵生成策略。 簡(jiǎn)介 Mybatis-Plus是在Mybatis的基礎(chǔ)上,國(guó)人開發(fā)的一款持久層框架。 showImg(https://segmentfault.com/img/bVbvFk4?w=2022&h=862); 并且榮獲...

    AaronYuan 評(píng)論0 收藏0
  • Spring Boot集成Freemarker和iText生成PDF文檔

    摘要:格式文檔導(dǎo)出,是信息系統(tǒng)中非常實(shí)用的一種功能,用于各種報(bào)表和文檔的到處。示例中,使用生成要導(dǎo)出的格式文檔,通過來實(shí)現(xiàn)文件下載。將轉(zhuǎn)換成文檔生成的代碼比較簡(jiǎn)單,創(chuàng)建一個(gè)對(duì)象,然后會(huì)在指定的中輸入生成的文件。作用相當(dāng)于在中使用進(jìn)行配置。 showImg(https://segmentfault.com/img/remote/1460000008547574); PDF格式文檔導(dǎo)出,是信息系...

    liujs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<