江帥帥:精通 Spring Boot 系列 04

  1. Web 開發的支持

使用 Spring Boot 實現 Web 開發更加便捷了,由於直接依賴 spring-boot-starter-web 模塊便可支持 Web 開發,此模塊預約義了 Web 開發中經常使用的依賴包,還有內嵌的 Tomcat 做爲默認 Web 容器。html

  1. Thymeleaf 模板引擎
    目前,多數企業級應用開發中都支持先後端分離,但還有少數離不開視圖層技術,Spring Boot 提供了不少模板引擎來支持視圖層技術,好比 Thymeleaf、Freemarker、Velocity。

Thymeleaf 是官方推薦使用的新一代 Java 模板引擎,並支持 HTML 原型,模板表達式在脫離運行環境下不污染 HTML 結構,能讓前端直接經過瀏覽器查看基本樣式,也能讓後端使用真實數據查看展現效果。前端

  1. 整合使用 Thymeleaf 模板
    3.1. 建立工程
    建立一個 Spring Boot 工程,編輯 pom.xml 文件,添加 web 和 thymeleaf 依賴。另外,App 啓動類與以前一致。

<dependencies>java

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

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

</dependencies>react

3.2. 添加視圖文件
在 src/main/resources/templates 目錄下,新建 nicebook.html 文件。web

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">;
<head>
<meta charset="UTF-8">
<title>良心好書</title>
</head>
<body>
<table border="1">
<tr>
<td>序號</td>
<td>好書</td>
<td>做者</td>
</tr>
<tr th:each="book:${books}">
<td th:text="${book.id}"></td>
<td th:text="${book.name}"></td>
<td th:text="${book.author}"></td>
</tr>
</table>
</body>
</html>算法

3.3. 配置 Thymeleaf
若是想自定義 Thymeleaf 配置參數,能夠在 application.properties 文件中進行配置,常見的配置選項以下:spring

模板文件存放位置

spring.thymeleaf.prefix=classpath:/templates/後端

是否開啓緩存,默認爲 true,開發時可設置爲 false

spring.thymeleaf.cache=true數組

檢查模板位置是否存在,默認爲 true

spring.thymeleaf.check-template-location=true瀏覽器

檢查模板是否存在,默認爲 true

spring.thymeleaf.check-template=true

模板文件後綴設置

spring.thymeleaf.suffix=.html

模板文件編碼設置

spring.thymeleaf.encoding=UTF-8

Content-Type 配置

spring.thymeleaf.servlet.content-type=text/html

3.4. 建立 POJO
public class Book {

private Integer id;
private String name;
private String author;

// getter 和 setter 方法

}

3.5. 建立 BookController 控制器br/>@Controller
public class BookController {

@GetMapping("/books")
public ModelAndView books() {

    List<Book> bookList = new ArrayList<>()

    Book book1 = new Book();
    book1.setId(1);
    book1.setName("《碼農翻身:用故事給技術加點料》");
    book1.setAuthor("劉欣");

    Book book2 = new Book();
    book2.setId(2);
    book2.setName("《漫畫算法:小灰的算法之旅(全綵)》");
    book2.setAuthor("魏夢舒");

    bookList.add(book1);
    bookList.add(book2);

    ModelAndView mv = new ModelAndView();
    mv.addObject("bookList");
    mv.setViewName("nicebook");
    return mv;
}

}

3.6. 運行測試
瀏覽器中訪問:http://localhost:8080/books,便可看到以下頁面

江帥帥:精通 Spring Boot 系列 04

  1. Thymeleaf 的支持
    Spring Boot 經過 org.springframework.boot.autoconfigure.thymeleaf 包爲 Thymeleaf 提供了自動配置,涉及到的類以下:

江帥帥:精通 Spring Boot 系列 04

其中 ThymeleafAutoConfiguration 和 ThymeleafProperties 類是比較重要的,前者對集成所須要的 Bean 進行自動配置,後者主要讀取 application.properties 配置文件,可自定義 Thymeleaf 的屬性和默認配置。

ThymeleafProperties 類部分源碼以下:

@ConfigurationProperties(
prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = "classpath:/templates/";
private String suffix = ".html";
private String mode = "HTML";
private Charset encoding;
private boolean cache;
private Integer templateResolverOrder;
private String[] viewNames;
private String[] excludedViewNames;
private boolean enableSpringElCompiler;
private boolean renderHiddenMarkersBeforeCheckboxes;
private boolean enabled;
private final ThymeleafProperties.Servlet servlet;
private final ThymeleafProperties.Reactive reactive;

...

}

  1. 拓展:Thymeleaf 經常使用語法
    5.1. 使用 URL
    經過 @{…} 來處理常見 URL。

<a th:href="@{http://www.naixuejiaoyu.com}">奈學教育</a>;

<a th:href="@{/}">奈學教育</a>

<a th:href="@{books/java/one.png}">奈學教育</a>

5.2. 使用表達式
主要用來從模板中的 WebContext 獲取param、request、session 和 application 中的屬性。使用 ${x} 便可返回存儲在 Thymeleaf 上下文中的變量 x 或做爲 request 做用域中的屬性。

${param.x} 可以返回名爲 x 的請求參數;
${session.x} 可以返回名爲 x 的 HttpSession 做用域中的屬性;
${application.x} 可以返回名爲 x 的 ServletContext 做用域中的屬性。

5.3. 使用字符串
若是須要對一段文字中的某一處進行替換,可使用 |…| 這種便捷方式,但不能包含其餘常量、條件表達式,只能包含變量表達式 x便可返回存儲在Thymeleaf上下文中的變量x或做爲request做用域中的屬性。¨G7G¨K25K若是須要對一段文字中的某一處進行替換,可使用∣…∣這種便捷方式,但不能包含其餘常量、條件表達式,只能包含變量表達式{…},有必定侷限性。

<span th:text="|hello, ${userName}|"></span>

5.4. 使用運算符
平時看到的算術運算符和邏輯運算符均可以使用。

5.5. 使用條件判斷
可使用 th:if 和 th:unless 屬性進行條件判斷,前者條件成立時顯示,後者不成立時才顯示。也可使用 Switch 結構,默認選項使用 * 來表示。

<a th:href="index.html" th:if=${name != null}>奈學教育</a>

<div th:switch="${books}">
<p th:case="'Java'">Java 從入門到逃難</p>
<p th:case="'Python'">Python 從入門到逃難</p>
</div>

5.6. 使用循環
使用 th:each 便可實現循環。

<tr th:each="book : ${bookList}">
<td th:text="${book.id}"></td>
<td th:text="${book.name}"></td>
<td th:text="${book.author}"></td>
</tr>

5.7. 使用內置對象
經過 # 能夠直接訪問 Thymeleaf 的內置對象。

#dates:日期
#calendars:日曆
#numbers:數值格式化
#strings:字符串格式化
#objects:對象
#maps:Map 操做工具
#aggregates:操做數組或集合的工具
#bools:布爾
#sets:Set 操做工具
#messages:消息
#arrays:Array 操做工具
#lists:List 操做工具
來源於:奈學開發者社區請添加連接描述-江帥帥

相關文章
相關標籤/搜索