1. 程式人生 > >暢購商城(七):Thymeleaf實現靜態頁

暢購商城(七):Thymeleaf實現靜態頁

> 好好學習,天天向上 >
> 本文已收錄至我的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