SpringBoot Kotlin 系列之HTML與WebFlux

image

上一章咱們提到過Mono 與 Flux,對於具體的介紹沒說到,這一章我在這裏簡單介紹一下,既然提到Mono和Flux,那確定得提到什麼是響應式編程,什麼是WebFlux。

1、什麼是響應式編程

對於關於什麼是響應編程,網上的說也不少,這裏簡單一句話介紹:html

  • 響應式編程是基於異步和事件驅動的非阻塞程序,只是垂直經過在 JVM 內啓動少許線程擴展,而不是水平經過集羣擴展。

2、Mono 與 Flux

Mono 和 Flux Reactor 是提供的兩種響應式APIjava

  • Mono:實現發佈者,並返回 0 或 1 個元素
  • Flux:實現發佈者,並返回 N 個元素

3、什麼是Spring Webflux

Spring Boot Webflux 就是基於 Reactor 實現的。Spring Boot 2.0 包括一個新的 spring-webflux 模塊。該模塊包含對響應式 HTTP 和 WebSocket 客戶端的支持,以及對 REST,HTML 和 WebSocket 交互等程序的支持。通常來講,Spring MVC 用於同步處理,Spring Webflux 用於異步處理。react

Spring Boot Webflux 有兩種編程模型實現,一種相似 Spring MVC 註解方式,另外一種是使用其功能性端點方式。註解的會在第二篇文章講到,下面快速入門用 Spring Webflux 功能性方式實現。web

在Spring官方有介紹,如圖所示:spring

image

4、Thymeleaf渲染HTML

這裏就不演示如何建立項目了,你們參考第一章,咱們須要引入Thymeleaf框架,在pom文件中添加以下內容便可:編程

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

引入Thymeleaf後咱們須要作一些簡單的配置,在application.properties文件中直接粘貼便可。主要是包括經常使用的編碼、是否開啓緩存等等。緩存

spring.thymeleaf.cache=true
spring.thymeleaf.check-template=true
spring.thymeleaf.check-template-location=true
spring.thymeleaf.enabled=true
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode=HTML5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.servlet.content-type=text/html
spring.thymeleaf.suffix=.html

編寫HTML,把文件放在resources/templates下app

<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Hello <span th:text="${name}"></span></h1>
<h1>Now time <span th:text="${time}"></span></h1>
</body>
</html>

編寫Controller框架

package io.intodream.kotlin02.web

import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import reactor.core.publisher.Mono
import java.time.LocalDateTime

/**
 * @description
 *
 * @author Jwenk
 * @copyright intoDream.io 築夢科技
 * @email xmsjgzs@163.com
 * @date 2019-03-24,18:24
 */
@RequestMapping("/webflux")
@Controller
class IndexController {

    @GetMapping("/index")
    fun index(model : Model): Mono<String> {
        model.addAttribute("name", "Tom")
        model.addAttribute("time", LocalDateTime.now())
        return Mono.create{ monoSink -> monoSink.success("index")}
    }
}

啓動項目,訪問路徑http://localhost:8080/webflux/index異步

image

看到圖片裏面的內容則說明編寫成功了,在Controller裏面能夠直接返回String,而不是Mono<String> ,可是 Mono 表明着我這個返回 View 也是回調的。若是你們以爲文章有用麻煩點一下贊,有問題的地方歡迎你們指出來。

相關文章
相關標籤/搜索