在學習SpringBoot Web應用開發之前,我們都是通過@RestController 來處理請求,所返回的內容為json對象。如果返回html頁面,則用@Controller直接請求,匹配請求為 @RequestMapping("/")
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
@RequestMapping("/")
public String index(ModelMap map) {
map.addAttribute("host", "我是yaohuiqin");
return "index";
}
}
模板引擎:
在動態HTML實現上Spring Boot依然可以完美勝任,並且提供了多種模板引擎的默認配置支持,所以在推薦的模板引擎下,完美可以很快的上手開發動態網站。
SpringBoot建議使用模板引擎,避免使用JSP,若一定使用JSP將無法實現SpringBoot的多種性能。
常見的模板引擎:
- Thymeleaf
- FreeMarker
- Velocity
- Groovy
- Mustache
默認的模板配置路徑為:src/main/resource/templates.
Thymeleaf:
Thymeleaf 是一個XML/XHTML/HTML5模板引擎,可以用於Web與非Web環境中的應用開發。它提供了一個用於整合Spring Mvc 的可選模塊,在應用開發中,你可以使用Theamleaf來完全代替JSP或其他模板引擎。如Velocity。 Thymeleaf的目標是提供一種可被瀏覽器正確顯示的,格式良好的模板創建方式,因為也可以稱作靜態建模。
例如:
<table>
<thead>
<tr>
<th th:text="#{msgs.headers.name}">Name</td>
<th th:text="#{msgs.headers.price}">Price</td>
</tr>
</thead>
<tbody>
<tr th:each="prod : ${allProducts}">
<td th:text="${prod.name}">Oranges</td>
<td th:text="${#numbers.formatDecimal(prod.price,1,2)}">0.99</td>
</tr>
</tbody>
</table>
在Spring Boot中使用Thymeleaf,只需要引入下面依賴,並在默認的模板路徑src/main/resources/templates下編寫模板文件即可完成。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
相關的屬性配置:
# Enable template caching. spring.thymeleaf.cache=true # Check that the templates location exists. spring.thymeleaf.check-template-location=true # Content-Type value. spring.thymeleaf.content-type=text/html # Enable MVC Thymeleaf view resolution. spring.thymeleaf.enabled=true # Template encoding. spring.thymeleaf.encoding=UTF-8 # Comma-separated list of view names that should be excluded from resolution. spring.thymeleaf.excluded-view-names= # Template mode to be applied to templates. See also StandardTemplateModeHandlers. spring.thymeleaf.mode=HTML5 # Prefix that gets prepended to view names when building a URL. spring.thymeleaf.prefix=classpath:/templates/ # Suffix that gets appended to view names when building a URL. spring.thymeleaf.suffix=.html spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain. spring.thymeleaf.view-names= # Comma-separated list of view names that can be resolved.
常用th標簽都有那些?
關鍵字 功能介紹 案例
th:id 替換id <input th:id="'xxx' + ${collect.id}"/>
th:text 文本替換 <p th:text="${collect.description}">description</p>
th:utext 支持html的文本替換 <p th:utext="${htmlcontent}">conten</p>
th:object 替換對象 <div th:object="${session.user}">
th:value 屬性賦值 <input th:value="${user.name}" />
th:with 變量賦值運算 <div th:with="isEven=${prodStat.count}%2==0"></div>
th:style 設置樣式 th:style="'display:' + @{(${sitrue} ? 'none' : 'inline-block')} + ''"
th:onclick 點擊事件 th:onclick="'getCollect()'"
th:each 屬性賦值 tr th:each="user,userStat:${users}">
th:if 判斷條件 <a th:if="${userId == collect.userId}" >
th:unless 和th:if判斷相反 <a th:href="@{/login}" th:unless=${session.user != null}>Login</a>
th:href 鏈接地址 <a th:href="@{/login}" th:unless=${session.user != null}>Login</a> />
th:switch 多路選擇 配合th:case 使用 <div th:switch="${user.role}">
th:case th:switch的一個分支 <p th:case="'admin'">User is an administrator</p>
th:fragment 布局標簽,定義一個代碼片段,方便其它地方引用 <div th:fragment="alert">
th:include 布局標簽,替換內容到引入的文件 <head th:include="layout :: htmlhead" th:with="title='xx'"></head> />
th:replace 布局標簽,替換整個標簽到引入的文件 <div th:replace="fragments/header :: title"></div>
th:selected selected選擇框 選中 th:selected="(${xxx.id} == ${configObj.dd})"
th:src 圖片類地址引入 <img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" />
th:inline 定義js腳本可以使用變量 <script type="text/javascript" th:inline="javascript">
th:action 表單提交的地址 <form action="subscribe.html" th:action="@{/subscribe}">
th:remove 刪除某個屬性 <tr th:remove="all">
1.all:刪除包含標簽和所有的孩子。
2.body:不包含標記刪除,但刪除其所有的孩子。
3.tag:包含標記的刪除,但不刪除它的孩子。
4.all-but-first:刪除所有包含標簽的孩子,除了第一個。
5.none:什么也不做。這個值是有用的動態評估。
th:attr 設置標簽屬性,多個屬性可以用逗號分隔 比如 th:attr="src=@{/image/aa.jpg},title=#{logo}",此標簽不太優雅,一般用的比較少。
