成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Spring Boot 2 快速教程:WebFlux 集成 Thymeleaf(五)

姘存按 / 1630人閱讀

摘要:數(shù)據(jù)和信息是不可分離的,數(shù)據(jù)是信息的表達(dá),信息是數(shù)據(jù)的內(nèi)涵。數(shù)據(jù)本身沒(méi)有意義,數(shù)據(jù)只有對(duì)實(shí)體行為產(chǎn)生影響時(shí)才成為信息。主要目標(biāo)是為開(kāi)發(fā)提供天然的模板,并且能在里面準(zhǔn)確的顯示。目前是自然更加推薦。

這是泥瓦匠的第105篇原創(chuàng)

文章工程:

JDK 1.8

Maven 3.5.2

Spring Boot 2.1.3.RELEASE

工程名:springboot-webflux-4-thymeleaf

工程地址:見(jiàn)文末

前言

上一講,我們用 MongoDB 來(lái)實(shí)現(xiàn) WebFlux 對(duì)數(shù)據(jù)源的操作。那么有了數(shù)據(jù)需要渲染到前臺(tái)給用戶展示。這就是本文關(guān)心的 View 層。View 的表現(xiàn)形式有很多,比如 JSON 和 HTML。開(kāi)發(fā)中常用模板語(yǔ)言很常見(jiàn)的有 Thymeleaf、Freemarker等。那

什么是模板語(yǔ)言?

常見(jiàn)的模板語(yǔ)言都包含以下幾個(gè)概念:數(shù)據(jù)(Data)、模板(Template)、模板引擎(Template Engine)和結(jié)果文檔(Result Documents)。

數(shù)據(jù)

數(shù)據(jù)是信息的表現(xiàn)形式和載體,可以是符號(hào)、文字、數(shù)字、語(yǔ)音、圖像、視頻等。數(shù)據(jù)和信息是不可分離的,數(shù)據(jù)是信息的表達(dá),信息是數(shù)據(jù)的內(nèi)涵。數(shù)據(jù)本身沒(méi)有意義,數(shù)據(jù)只有對(duì)實(shí)體行為產(chǎn)生影響時(shí)才成為信息。

模板

模板,是一個(gè)藍(lán)圖,即一個(gè)與類型無(wú)關(guān)的類。編譯器在使用模板時(shí),會(huì)根據(jù)模板實(shí)參對(duì)模板進(jìn)行實(shí)例化,得到一個(gè)與類型相關(guān)的類。

模板引擎

模板引擎(這里特指用于Web開(kāi)發(fā)的模板引擎)是為了使用戶界面與業(yè)務(wù)數(shù)據(jù)(內(nèi)容)分離而產(chǎn)生的,它可以生成特定格式的文檔,用于網(wǎng)站的模板引擎就會(huì)生成一個(gè)標(biāo)準(zhǔn)的HTML文檔。

結(jié)果文檔

一種特定格式的文檔,比如用于網(wǎng)站的模板引擎就會(huì)生成一個(gè)標(biāo)準(zhǔn)的HTML文檔。

模板語(yǔ)言用途廣泛,常見(jiàn)的用途如下:

頁(yè)面渲染

文檔生成

代碼生成

所有 “數(shù)據(jù)+模板=文本” 的應(yīng)用場(chǎng)景

Spring Boot 推薦使用的模板語(yǔ)言是 Thymeleaf,那

什么是 Thymeleaf?

官方的解釋如下:

Thymeleaf is a modern server-side Java template engine for both web and standalone environments.

Thymeleaf 是現(xiàn)代的模板語(yǔ)言引擎,可以獨(dú)立運(yùn)行也可以服務(wù)于 Web。主要目標(biāo)是為開(kāi)發(fā)提供天然的模板,并且能在 HTML 里面準(zhǔn)確的顯示。

Thymeleaf 是新一代 Java 模板引擎,在 Spring 4 后推薦使用。目前是 Spring 5 自然更加推薦。

結(jié)構(gòu)

類似上面講的工程搭建,新建一個(gè)工程編寫(xiě)此案例。工程如圖:

目錄如下

org.spring.springboot.webflux.controller - Controller 層

org.spring.springboot.dao - 數(shù)據(jù)操作層 DAO

org.spring.springboot.domain - 實(shí)體類

org.spring.springboot.handler - 業(yè)務(wù)邏輯層

Application - 應(yīng)用啟動(dòng)類

application.properties - 應(yīng)用配置文件

pom.xml maven 配置

application.properties 配置文件

模板是會(huì)用到下面兩個(gè)目錄

static 目錄是存放 CSS、JS 等資源文件

templates 目錄是存放視圖

本文重點(diǎn)在 Controller 層 和 templates 視圖的編寫(xiě)。

新增 POM 依賴與配置

在 pom.xml 配置新的依賴:

  

    
    
      org.springframework.boot
      spring-boot-starter-webflux
    

    
    
      org.springframework.boot
      spring-boot-starter-thymeleaf
    


    
    
      org.springframework.boot
      spring-boot-starter-test
      test
    

    
    
      junit
      junit
      4.12
    
  

這里我們?cè)黾恿?Thymeleaf 依賴,但不用在 application.properties - 應(yīng)用配置文件 配置人任何配置。默認(rèn)啟動(dòng)其默認(rèn)配置,如需修改配置參考 Thymeleaf 依賴配置,如下:

spring.thymeleaf.cache=true # Enable template caching.
spring.thymeleaf.check-template=true # Check that the template exists before rendering it.
spring.thymeleaf.check-template-location=true # Check that the templates location exists.
spring.thymeleaf.enabled=true # Enable Thymeleaf view resolution for Web frameworks.
spring.thymeleaf.encoding=UTF-8 # Template files encoding.
spring.thymeleaf.excluded-view-names= # Comma-separated list of view names that should be excluded from resolution.
spring.thymeleaf.mode=HTML5 # Template mode to be applied to templates. See also StandardTemplateModeHandlers.
spring.thymeleaf.prefix=classpath:/templates/ # Prefix that gets prepended to view names when building a URL.
spring.thymeleaf.reactive.max-chunk-size= # Maximum size of data buffers used for writing to the response, in bytes.
spring.thymeleaf.reactive.media-types= # Media types supported by the view technology.
spring.thymeleaf.servlet.content-type=text/html # Content-Type value written to HTTP responses.
spring.thymeleaf.suffix=.html # Suffix that gets appended to view names when building a URL.
spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain.
spring.thymeleaf.view-names= # Comma-separated list of view names that can be resolved.

包括常用的 編碼、是否開(kāi)啟緩存等等。

WebFlux 中使用 Thymeleaf

在 CityWebFluxController 控制層,添加兩個(gè)方法如下:

    @GetMapping("/hello")
    public Mono hello(final Model model) {
        model.addAttribute("name", "泥瓦匠");
        model.addAttribute("city", "浙江溫嶺");

        String path = "hello";
        return Mono.create(monoSink -> monoSink.success(path));
    }

    private static final String CITY_LIST_PATH_NAME = "cityList";

    @GetMapping("/page/list")
    public String listPage(final Model model) {
        final Flux cityFluxList = cityHandler.findAllCity();
        model.addAttribute("cityList", cityFluxList);
        return CITY_LIST_PATH_NAME;
    }

解釋下語(yǔ)法:

返回值 Mono 或者 String 都行,但是 Mono 代表著我這個(gè)返回 View 也是回調(diào)的。

return 字符串,該字符串對(duì)應(yīng)的目錄在 resources/templates 下的模板名字。

Model 對(duì)象來(lái)進(jìn)行數(shù)據(jù)綁定到視圖

一般會(huì)集中用常量管理模板視圖的路徑

Tymeleaf 視圖

然后編寫(xiě)兩個(gè)視圖 hello 和 cityList,代碼分別如下:

hello.html:




    
    歡迎頁(yè)面




你好,歡迎來(lái)自

cityList.html:




    
    城市列表




城市列表
城市編號(hào) 省份編號(hào) 名稱 描述

常用語(yǔ)法糖如下

${...} 變量表達(dá)式

th:text 處理 Tymeleaf 表達(dá)式

th:each 遍歷表達(dá)式,可遍歷的對(duì)象:實(shí)現(xiàn)java.util.Iterable、java.util.Map(遍歷時(shí)取java.util.Map.Entry)、array 等

還有很多使用參考官方方文檔 http://www.thymeleaf.org/docu...

運(yùn)行工程

下面運(yùn)行工程驗(yàn)證下。使用 IDEA 右側(cè)工具欄,點(diǎn)擊 Maven Project Tab ,點(diǎn)擊使用下 Maven 插件的 install 命令。或者使用命令行的形式,在工程根目錄下,執(zhí)行 Maven 清理和安裝工程的指令:

cd springboot-webflux-4-thymeleaf
mvn clean install

在控制臺(tái)中看到成功的輸出:

... 省略
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:30 min
[INFO] Finished at: 2017-10-15T10:00:54+08:00
[INFO] Final Memory: 31M/174M
[INFO] ------------------------------------------------------------------------

在 IDEA 中執(zhí)行 Application 類啟動(dòng),任意正常模式或者 Debug 模式??梢栽诳刂婆_(tái)看到成功運(yùn)行的輸出:

... 省略
2018-04-10 08:43:39.932  INFO 2052 --- [ctor-http-nio-1] r.ipc.netty.tcp.BlockingNettyContext     : Started HttpServer on /0:0:0:0:0:0:0:0:8080
2018-04-10 08:43:39.935  INFO 2052 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 8080
2018-04-10 08:43:39.960  INFO 2052 --- [           main] org.spring.springboot.Application        : Started Application in 6.547 seconds (JVM running for 9.851)

打開(kāi)瀏覽器,訪問(wèn) http://localhost:8080/city/hello ,可以看到如圖的響應(yīng):

繼續(xù)訪問(wèn) http://localhost:8080/city/page/list , 發(fā)現(xiàn)沒(méi)有值,那么按照上一講插入幾條數(shù)據(jù)即可有值,如圖:

總結(jié)

這里,探討了 Spring WebFlux 的如何整合 Thymeleaf 。整合其他模板語(yǔ)言 Thymeleaf、Freemarker,就大同小異了。下面,我們能會(huì)整合 Thymeleaf 和 MongoBD,實(shí)現(xiàn)一個(gè)整體的簡(jiǎn)單案例。

代碼示例

本文示例讀者可以通過(guò)查看下面?zhèn)}庫(kù)的中的模塊工程名: 2-x-spring-boot-webflux-handling-errors:

Github:https://github.com/JeffLi1993/springboot-learning-example

Gitee:https://gitee.com/jeff1993/springboot-learning-example

如果您對(duì)這些感興趣,歡迎 star、follow、收藏、轉(zhuǎn)發(fā)給予支持!

參考資料

Spring Boot 2.x WebFlux 系列:https://www.bysocket.com/arch...

spring.io 官方文檔

以下專題教程也許您會(huì)有興趣

《程序兵法:算法與數(shù)據(jù)結(jié)構(gòu)》 https://www.bysocket.com/tech...

《Spring Boot 2.x 系列教程》

https://www.bysocket.com/spri...

《Java 核心系列教程》

https://www.bysocket.com/tech...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/74725.html

相關(guān)文章

  • Spring Boot 2.x 系列教程WebFlux 系列教程大綱(一)

    摘要:使用則需要及以上版本。開(kāi)發(fā)使用框架七系列教程目錄系列教程大綱快速入門實(shí)踐實(shí)踐整合整合中和實(shí)踐整合中實(shí)現(xiàn)緩存中實(shí)現(xiàn)通信集成測(cè)試及部署實(shí)戰(zhàn)圖書(shū)管理系統(tǒng) WebFlux 系列教程大綱 一、背景 大家都知道,Spring Framework 是 Java/Spring 應(yīng)用程序跨平臺(tái)開(kāi)發(fā)框架,也是 Java EE(Java Enterprise Edition) 輕量級(jí)框架,其 Spring ...

    jone5679 評(píng)論0 收藏0
  • Spring Boot 2 快速教程WebFlux 集成 Mongodb(四)

    摘要:在配置下上面啟動(dòng)的配置數(shù)據(jù)庫(kù)名為賬號(hào)密碼也為。突出點(diǎn)是,即非阻塞的。四對(duì)象修改包里面的城市實(shí)體對(duì)象類。修改城市對(duì)象,代碼如下城市實(shí)體類城市編號(hào)省份編號(hào)城市名稱描述注解標(biāo)記對(duì)應(yīng)庫(kù)表的主鍵或者唯一標(biāo)識(shí)符。 摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號(hào):泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝! 這是泥瓦匠的第104篇原創(chuàng) 文章工程: JDK...

    Corwien 評(píng)論0 收藏0
  • Spring Boot 2 快速教程WebFlux 快速入門(二)

    摘要:響應(yīng)式編程是基于異步和事件驅(qū)動(dòng)的非阻塞程序,只是垂直通過(guò)在內(nèi)啟動(dòng)少量線程擴(kuò)展,而不是水平通過(guò)集群擴(kuò)展。三特性常用的生產(chǎn)的特性如下響應(yīng)式編程模型適用性內(nèi)嵌容器組件還有對(duì)日志消息測(cè)試及擴(kuò)展等支持。 摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號(hào):泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝! 02:WebFlux 快速入門實(shí)踐 文章工程: JDK...

    gaara 評(píng)論0 收藏0
  • webflux 用戶管理界面

    摘要:一個(gè)簡(jiǎn)單的用戶管理的已經(jīng)完成,現(xiàn)在我們需要在頁(yè)面上展示,方便用戶管理。創(chuàng)建首頁(yè)頁(yè)面首頁(yè)歡迎頁(yè)面首頁(yè)實(shí)戰(zhàn)課程你想學(xué)點(diǎn)啥上班摸魚(yú)下班充電案例上手本課程是一個(gè)系列基礎(chǔ)教程,目標(biāo)是帶領(lǐng)讀者上手實(shí)戰(zhàn),課程以新版本的核心概念作為主線。 一個(gè)簡(jiǎn)單的用戶管理的CRUD已經(jīng)完成,現(xiàn)在我們需要在頁(yè)面上展示,方便用戶管理。盡管現(xiàn)在已經(jīng)流行前后分離開(kāi)發(fā),但是在一些小公司做的項(xiàng)目并不需要前端開(kāi)發(fā)人員,頁(yè)面也是后...

    dmlllll 評(píng)論0 收藏0
  • SpringBoot Kotlin 系列之HTML與WebFlux

    摘要:上一章我們提到過(guò)與,對(duì)于具體的介紹沒(méi)說(shuō)到,這一章我在這里簡(jiǎn)單介紹一下,既然提到和,那肯定得提到什么是響應(yīng)式編程,什么是。 showImg(https://segmentfault.com/img/remote/1460000018819338?w=1024&h=500); 上一章我們提到過(guò)Mono 與 Flux,對(duì)于具體的介紹沒(méi)說(shuō)到,這一章我在這里簡(jiǎn)單介紹一下,既然提到Mono和Flu...

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

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

0條評(píng)論

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