使用 Spring Boot 實現 Web 開發更加便捷了,由於直接依賴 spring-boot-starter-web 模塊便可支持 Web 開發,此模塊預約義了 Web 開發中經常使用的依賴包,還有內嵌的 Tomcat 做爲默認 Web 容器。html
Thymeleaf 是官方推薦使用的新一代 Java 模板引擎,並支持 HTML 原型,模板表達式在脫離運行環境下不污染 HTML 結構,能讓前端直接經過瀏覽器查看基本樣式,也能讓後端使用真實數據查看展現效果。前端
<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/後端
spring.thymeleaf.cache=true數組
spring.thymeleaf.check-template-location=true瀏覽器
spring.thymeleaf.check-template=true
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=UTF-8
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,便可看到以下頁面。
其中 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;
...
}
<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 操做工具
來源於:奈學開發者社區請添加連接描述-江帥帥