暢購商城(七):Thymeleaf實現靜態頁
阿新 • • 發佈:2020-08-01
> 好好學習,天天向上
>
> 本文已收錄至我的Github倉庫**DayDayUP**:github.com/RobodLee/DayDayUP,歡迎Star,更多文章請前往:[目錄導航](https://github.com/RobodLee/DayDayUP) ## Thymeleaf簡單入門 ### 什麼是Thymeleaf Thymeleaf是一個模板引擎,主要用於編寫動態頁面。 ### SpringBoot整合Thymeleaf SpringBoot整合Thymeleaf的方式很簡單,共分為以下幾個步驟 + 建立一個sprinboot專案 + 新增thymeleaf和spring web的起步依賴 + 在resources/templates/下編寫html(需要宣告使用thymeleaf標籤) + 在controller層編寫相應的程式碼 啟動類,配置檔案,依賴的程式碼下一節有,這裡就不貼了。 ```html
```
```java
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("/hello")
public String hello(Model model){
model.addAttribute("hello","歡迎關注微信公眾號Robod");
return "demo1";
}
}
```
這樣將專案啟動起來,訪問[http://localhost:8080/test/hello](http://localhost:8080/test/hello)就可以成功跳轉到demo1.html頁面的內容了。
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS90aF9kZW1vXyVFNiVCNSU4QiVFOCVBRiU5NS5wbmc?x-oss-process=image/format,png#pic_center)
### Thymeleaf常用標籤
+ th:action 定義後臺控制器路徑
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS9kZW1vMi5wbmc?x-oss-process=image/format,png#pic_center)
現在訪問[http://localhost:8080/test/hello2](http://localhost:8080/test/hello2),如果控制檯輸出“demo2”,頁面還跳轉到demo2的話說明是OK的。
+ th:each 物件遍歷
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS9kZW1vMy5wbmc?x-oss-process=image/format,png#pic_center)
訪問[http://localhost:8080/test/hello3](http://localhost:8080/test/hello3)就可以看到結果了。
+ 遍歷Map
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS9kZW1vNC5wbmc?x-oss-process=image/format,png#pic_center)
訪問[http://localhost:8080/test/hello4](http://localhost:8080/test/hello4)就可以看到輸出結果。
+ 陣列輸出
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS9kZW1vNS5wbmc?x-oss-process=image/format,png#pic_center)
訪問[http://localhost:8080/test/hello5](http://localhost:8080/test/hello5)就可以看到輸出結果。
+ Date輸出
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS9kZW1vNi5wbmc?x-oss-process=image/format,png#pic_center)
訪問[http://localhost:8080/test/hello6](http://localhost:8080/test/hello6)就可以看到輸出結果。
+ th:if條件
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS9kZW1vNy5wbmc?x-oss-process=image/format,png#pic_center)
訪問[http://localhost:8080/test/hello7](http://localhost:8080/test/hello7)就可以看到輸出結果。
+ th:fragment th:include 定義和引入模組
比如我們在footer.html中定義了一個模組:
```html
歡迎關注微信公眾號Robod
```
然後在demo7中引用:
```html
```
這樣訪問[http://localhost:8080/test/hello7](http://localhost:8080/test/hello7)就可以看到效果了。
+ |....| 字串拼接
```html
--------------------------------------------
@RequestMapping("/hello8")
public String hello8(Model model){
model.addAttribute("str1","字串1");
model.addAttribute("str2","字串2");
return "demo8";
}
```
訪問[http://localhost:8080/test/hello8](http://localhost:8080/test/hello8)就可以看到輸出結果。
想要完整程式碼的小夥伴請[點選下載](https://gitee.com/RobodLee/image_store/raw/master/Java/%E7%95%85%E8%B4%AD%E5%95%86%E5%9F%8E%E4%B8%83%EF%BC%9AThymeleaf%E5%AE%9E%E7%8E%B0%E9%9D%99%E6%80%81%E9%A1%B5/ThymeleafDemo.zip)
## 搜尋頁面
### 微服務搭建
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS8lRTYlOTAlOUMlRTclQjQlQTIlRTQlQjglOUElRTUlOEElQTElRTUlQkUlQUUlRTYlOUMlOEQlRTUlOEElQTElRTYlQjUlODElRTclQTglOEIucG5n?x-oss-process=image/format,png#pic_center)
我們建立一個搜尋頁面渲染微服務用來展示搜尋頁面,在這個微服務中,使用者進行搜尋後,調用搜索微服務拿到資料,然後使用Thymeleaf將頁面渲染出來展示給使用者。**在changgou-web下建立一個名為changgou-search-web的Module用作搜尋微服務的頁面渲染工程**。因為有些依賴是所有頁面渲染微服務都要用到的,所以在changgou-web中新增依賴:
```xml
```
Feign的依賴這裡我發現了一個問題,因為我不是把SearchEntity根據下圖的流程通過Feign傳遞到changgou-service-search麼。如果新增我註釋的那個依賴就會出現`HttpRequestMethodNotSupportedException: Request method 'POST' not supported`異常。新增後面一個依賴就不會出現問題。我到網上查了一下,貌似是Feign的一個小Bug,就是如果在GET請求裡添加了請求體就會被轉換為POST請求。
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vUm9ib2RMZWUvaW1hZ2Vfc3RvcmUvcmF3L21hc3Rlci9KYXZhLyVFNyU5NSU4NSVFOCVCNCVBRCVFNSU5NSU4NiVFNSU5RiU4RSVFNCVCOCU4MyVFRiVCQyU5QVRoeW1lbGVhZiVFNSVBRSU5RSVFNyU4RSVCMCVFOSU5RCU5OSVFNiU4MCU4MSVFOSVBMSVCNS9mZWlnbiVFOCVCMCU4MyVFNyU5NCVBOCVFOSVBMSVCQSVFNSVCQSU4RiVFNSU5QiVCRS5wbmc?x-oss-process=image/format,png#pic_center)
因為我們需要使用到Feign在幾個微服務之間進行呼叫,所以在changgou-search-web新增對changgou-service-search-api的依賴。
```xml
```
然後在changgou-service-search-api下編寫相應的Feign介面用來呼叫changgou-service-search:
```java
@FeignClient(name="search")
@RequestMapping("/search")
public interface SkuEsFeign {
/**
* 搜尋
* @param searchEntity
* @return
*/
@GetMapping
> 本文已收錄至我的Github倉庫**DayDayUP**:github.com/RobodLee/DayDayUP,歡迎Star,更多文章請前往:[目錄導航](https://github.com/RobodLee/DayDayUP) ## Thymeleaf簡單入門 ### 什麼是Thymeleaf Thymeleaf是一個模板引擎,主要用於編寫動態頁面。 ### SpringBoot整合Thymeleaf SpringBoot整合Thymeleaf的方式很簡單,共分為以下幾個步驟 + 建立一個sprinboot專案 + 新增thymeleaf和spring web的起步依賴 + 在resources/templates/下編寫html(需要宣告使用thymeleaf標籤) + 在controller層編寫相應的程式碼 啟動類,配置檔案,依賴的程式碼下一節有,這裡就不貼了。 ```html