最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之SpringBoot-Thymeleaf詳情

 更新時(shí)間:2021年09月24日 09:36:05   作者:CoLoo  
聊Thymeleaf,需要知道為什么到了SpringBoot中就不用JSP了?這跟SpringBoot打包方式有點(diǎn)關(guān)系,SpringBoot項(xiàng)目打包是jar包,下面文章小編就對(duì)此做一個(gè)詳細(xì)介紹,需要的朋友可以參考一下

前言:

Thymeleaf,需要知道為什么到了SpringBoot中就不用JSP了?這跟SpringBoot打包方式有點(diǎn)關(guān)系,SpringBoot項(xiàng)目打包是jar包,我們就先簡(jiǎn)單來(lái)了解下這個(gè)war包

war包代表JavaWeb應(yīng)用程序,jar包是類(lèi)的歸檔文件。war包不僅僅可以包含類(lèi)的歸檔文件,它還可以包含 Servlet、HTML頁(yè)面、Java類(lèi)、圖像文件,以及組成Web應(yīng)用程序的其他資源。

JAR(Java Archive,Java 歸檔文件)是與平臺(tái)無(wú)關(guān)的文件格式,它允許將許多文件組合成一個(gè)壓縮文件。JAR 文件格式以流行的 ZIP 文件格式為基礎(chǔ),所以可以直接將jar包后綴改成zip再進(jìn)行解壓即可得到壓縮前的文件。與 ZIP 文件不同的是,JAR 文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫(kù)、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。包括我們常用的工具以及SpringBoot項(xiàng)目都是jar包。

war是一個(gè)可以直接運(yùn)行的web模塊,通常用于網(wǎng)站,打成包部署到容器中。比如我們之前SSM寫(xiě)的web程序可以直接將war包部署到tomcatwebapps目錄下,啟動(dòng)tomcat后會(huì)自動(dòng)解壓war包,就相當(dāng)于發(fā)布了這個(gè)web應(yīng)用程序。

1、About Thymeleaf

ThymeleafSpringBoot中的一個(gè)模版引擎,個(gè)人認(rèn)為有點(diǎn)類(lèi)似于Python中的Jinja2,負(fù)責(zé)渲染前端頁(yè)面。

之前寫(xiě)JavaWeb和SSM的時(shí)候,前端頁(yè)面可能會(huì)用JSP寫(xiě),但是因?yàn)橹绊?xiàng)目都是war包部署,而SpringBoot都是jar包且內(nèi)嵌tomcat,所以是不支持解析jsp文件的。但是如果是編寫(xiě)純靜態(tài)的html就很不方便,那么這時(shí)候就需要一個(gè)模版引擎類(lèi)似于Jinja2可以通過(guò)表達(dá)式幫我們把動(dòng)態(tài)的變量渲染到前端頁(yè)面,我們只需要寫(xiě)一個(gè)template即可。這也就是到了SpringBoot為什么官方推薦要使用Thymeleaf處理前端頁(yè)面了。

2、Hello Thymeleaf

簡(jiǎn)單來(lái)個(gè)demo看一下Thymeleaf效果

Pom.xml中引入依賴(lài)

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

Resources/templates/index.html

<!doctype html>

<!--注意:引入thymeleaf的名稱(chēng)空間-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div th:text="${msg}"></div>
</body>
</html>

Controller

這里return "index";Thymeleaf會(huì)在templats目錄下尋找index.html

@Controller
public class IndexController {

    @RequestMapping("/index")
  public String test1(Model model){
      //存入數(shù)據(jù)
      model.addAttribute("msg","Hello,Thymeleaf");
       //classpath:/templates/index.html
      return "index";
 }
}

也可以參考Thymeleaf的自動(dòng)配置類(lèi)。

這里的注解需要使用@Controller,不能使用@RestController注解

  1. 如果只是使用@RestController注解Controller,則Controller中的方法無(wú)法返回jsp頁(yè)面,或者h(yuǎn)tml,配置的視圖解析器 InternalResourceViewResolver不起作用,返回的內(nèi)容就是Return 里的內(nèi)容
  2. 如果需要返回到指定頁(yè)面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定義mediaType內(nèi)容到頁(yè)面,則需要在對(duì)應(yīng)的方法上加上@ResponseBody注解。

關(guān)于@Controller@RestController

  • @RestController注解是@Controller@ResponseBody的合集,表示這是個(gè)控制器 bean,并且是將函數(shù)的返回值直 接填入 HTTP 響應(yīng)體中,是 REST 風(fēng)格的控制器。
  • 單獨(dú)使用 @Controller 不加 @ResponseBody的話一般使用在要返回一個(gè)視圖的情況,這種情況屬于比較傳統(tǒng)的 Spring MVC 的應(yīng)用,對(duì)應(yīng)于前后端不分離的情況。@Controller +@ResponseBody 返回 JSON 或 XML 形式數(shù)據(jù)

3、Thymeleaf 表達(dá)式

3.1配置文件聲明

spring:
  thymeleaf:
    cache: false # 緩存關(guān)閉,不然我們改變頁(yè)面之后可能不能及時(shí)看到更改的內(nèi)容,默認(rèn)是true。
    prefix: classpath:/templates/ #默認(rèn)掃描的目錄去尋找我們r(jià)eturn時(shí)寫(xiě)的文件名,即模版文件所在位置
    encoding: UTF-8 #編碼
    suffix: .html #后綴
    mode: HTML 

3.2 常用表達(dá)式

3.2.1 0x01 ${} 變量表達(dá)式

從web作用域里面取到對(duì)應(yīng)的值,作用域包括 requestsession、application。

主要需要注意在template中利用獲取 request、session、application 的代碼是不一樣的

requset: ${ago.id}
Session: ${session.agiao.id}
ServletContext: ${application.abc.id}


也可以通過(guò)如下形式獲取

<span th:text="${#request.getRequestURL()}"></span><br/>
<span th:text="${#session.getMaxInactiveInterval()}"></span><br/>
<span th:text="${#servletContext.getServerInfo()}"></span>


示例代碼:

Controller

@GetMapping("/varExpression")
public String varExpression(HttpServletRequest request, HttpSession session) {

    User ago = new User(1, "Ago", "123");
    request.setAttribute("ago", ago);
    User agiao = new User(2, "Agiao", "123");
    session.setAttribute("agiao", agiao);
    User abc = new User(3, "Abc", "123");
    ServletContext servletContext = request.getServletContext();
    servletContext.setAttribute("abc", abc);

    return "varExpression";
}

templates/varExpression.html

這里及時(shí)html中獲取request部分有報(bào)錯(cuò)也無(wú)所謂,不影響正常前端頁(yè)面顯示

<!doctype html>

<!--注意:引入thymeleaf的名稱(chēng)空間-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
request: <br/>
<div>
    編號(hào): <label th:text="${ago.id}"></label><br/>
    用戶(hù)名:<label th:text="${ago.name}"></label> <br/>
    密碼:<label th:text="${ago.pwd}"></label><br/>
</div>

session:<br/>
<div>
    編號(hào): <label th:text="${session.agiao.id}"></label><br/>
    用戶(hù)名:<label th:text="${session.agiao.name}"></label> <br/>
    密碼:<label th:text="${session.agiao.pwd}"></label><br/>
</div>

application:<br/>
<div>
    編號(hào):<label th:text="${application.abc.id}"></label><br/>
    用戶(hù)名:<label th:text="${application.abc.name}"></label><br/>
    密碼:<label th:text="${application.abc.pwd}"></label><br/>
</div>

</body>
</html>

3.2.2 0x02 *{} 選擇變量表達(dá)式#

比較適合偷懶,直接在獲取屬性值之前先把存儲(chǔ)于scope中的整個(gè)對(duì)象提出來(lái),通過(guò)*{}獲取該對(duì)象的屬性值

request: <br/>
<div>
    編號(hào): <label th:text="${ago.id}"></label><br/>
    用戶(hù)名:<label th:text="${ago.name}"></label> <br/>
    密碼:<label th:text="${ago.pwd}"></label><br/>
</div>

session:<br/>
<div>
    編號(hào): <label th:text="${session.agiao.id}"></label><br/>
    用戶(hù)名:<label th:text="${session.agiao.name}"></label> <br/>
    密碼:<label th:text="${session.agiao.pwd}"></label><br/>
</div>

等價(jià)于

 request: <br/>
<div th:object="${ago}">
    編號(hào): <label th:text="*{id}"></label><br/>
    用戶(hù)名:<label th:text="*{name}"></label> <br/>
    密碼:<label th:text="*{pwd}"></label><br/>
</div>

session:<br/>
<div th:object="${session.agiao}">
    編號(hào): <label th:text="*{id}"></label><br/>
    用戶(hù)名:<label th:text="*{name}"></label> <br/>
    密碼:<label th:text="*{pwd}"></label><br/>
</div>

3.2.3 0x03 #{} 消息表達(dá)式

對(duì)于國(guó)際化的支持說(shuō)明

 

配置文件聲明

## 配置國(guó)際化支持
spring.messages.basename=message


消息表達(dá)式

<span th:text="#{home.welcome}"></span><br />

3.2.4 0x04 @{} 鏈接表達(dá)式

指定跳轉(zhuǎn)的鏈接

<a th:href="@{/home}" rel="external nofollow" >url</a>

3.2.5 0x05 空值處理

如果為空則輸出null,有id值就輸出id

可以在調(diào)用對(duì)象或者方法的點(diǎn)(.)前面,使用問(wèn)號(hào)(?)來(lái)判斷是否為null

<span th:text="${session?.user?.id}"></span>

4、標(biāo)簽與屬性

常用的屬性大致有

  • th:text 文本顯示
  • th:object 一般和*{}一起用
  • th:if / th:unless 相當(dāng)于if/else
  • th:each 遍歷循環(huán)元素
  • th:value 屬性賦值

所有的HTML5標(biāo)簽的所有屬性都有一個(gè)自定義的Thymeleaf屬性對(duì)應(yīng)。

Thymeleaf屬性只有當(dāng)Thymeleaf模板引擎啟動(dòng)的情況下,才會(huì)生效,即取代對(duì)應(yīng)的HTML5屬性,相反,Thymeleaf屬性?xún)H僅只是一個(gè)無(wú)用的自定義屬性,因?yàn)闉g覽器內(nèi)核不認(rèn)識(shí),因此使用Thymeleaf模板引擎可以使得前端代碼和后端代碼分離,當(dāng)出現(xiàn)顯示問(wèn)題時(shí),可以立即定位問(wèn)題所在(是前端頁(yè)面還是后臺(tái)返回?cái)?shù)據(jù)有錯(cuò)),這也是Thymeleaf相對(duì)于JSP的一個(gè)優(yōu)勢(shì)。

 

 

結(jié)尾:

簡(jiǎn)單過(guò)了一下Thymeleaf,簡(jiǎn)單留個(gè)印象,相較于JSP個(gè)人感覺(jué)Thymeleaf這種模版引擎才更像是前后端分離,也更方便了。但是在安全里,往往方便的地方就最容易存在漏洞,后續(xù)分析Thymeleaf時(shí)再深入研究下。

到此這篇關(guān)于Java之SpringBoot-Thymeleaf詳情的文章就介紹到這了,更多相關(guān)Java之SpringBoot-Thymeleaf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java NIO工作原理的全面分析

    Java NIO工作原理的全面分析

    JDK 1.4 中引入的新輸入輸出 (NIO) 庫(kù)在標(biāo)準(zhǔn) Java 代碼中提供了高速的、面向塊的 I/O。本實(shí)用教程從高級(jí)概念到底層的編程細(xì)節(jié),非常詳細(xì)地介紹了 NIO 庫(kù)。您將學(xué)到諸如緩沖區(qū)和通道這樣的關(guān)鍵 I/O 元素的知識(shí),并考察更新后的庫(kù)中的標(biāo)準(zhǔn) I/O 是如何工作的。您還將了解只能通過(guò) NIO 來(lái)完成的工作,如異步 I/O 和直接緩沖區(qū)。
    2013-02-02
  • 4個(gè)Java8中你需要知道的函數(shù)式接口分享

    4個(gè)Java8中你需要知道的函數(shù)式接口分享

    Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來(lái)和大家介紹一下它們的具體使用,需要的可以參考一下
    2023-04-04
  • 詳解SpringMVC中的@RequestMapping注解

    詳解SpringMVC中的@RequestMapping注解

    這篇文章主要介紹了SpringMVC中@RequestMapping注解,@RequestMapping注解是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可用于映射一個(gè)請(qǐng)求或一個(gè)方法,可以用在類(lèi)或方法上,需要的朋友可以參考下
    2023-07-07
  • springboot實(shí)現(xiàn)圖片大小壓縮功能

    springboot實(shí)現(xiàn)圖片大小壓縮功能

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)圖片大小壓縮功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java后臺(tái)接收數(shù)據(jù)的三種方式(url、form-data與application/json)

    Java后臺(tái)接收數(shù)據(jù)的三種方式(url、form-data與application/json)

    本文主要介紹了Java后臺(tái)接收數(shù)據(jù)的三種方式(url、form-data與application/json),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java后臺(tái)返回blob格式的文件流的解決方案

    Java后臺(tái)返回blob格式的文件流的解決方案

    在Java后臺(tái)開(kāi)發(fā)中,經(jīng)常會(huì)遇到需要返回Blob格式的文件流給前端的情況,Blob是一種二進(jìn)制大對(duì)象類(lèi)型,可以用于存儲(chǔ)大量的二進(jìn)制數(shù)據(jù),例如圖片、音頻、視頻等,本文將為你詳細(xì)介紹如何在Java后臺(tái)中返回Blob格式的文件流,需要的朋友可以參考下
    2024-08-08
  • Mybatis-plus如何更新Null字段詳解

    Mybatis-plus如何更新Null字段詳解

    MyBatis-plus在進(jìn)行更新操作時(shí)不會(huì)更新傳入實(shí)體中為null或默認(rèn)值屬性字段,只更新不為null的值、非默認(rèn)值的屬性字段,這篇文章主要給大家介紹了關(guān)于Mybatis-plus如何更新Null字段的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • 淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制

    淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制

    這篇文章主要介紹了淺談?dòng)胘ava實(shí)現(xiàn)事件驅(qū)動(dòng)機(jī)制,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 擴(kuò)展Hibernate使用自定義數(shù)據(jù)庫(kù)連接池的方法

    擴(kuò)展Hibernate使用自定義數(shù)據(jù)庫(kù)連接池的方法

    這篇文章主要介紹了擴(kuò)展Hibernate使用自定義數(shù)據(jù)庫(kù)連接池的方法,涉及Hibernate數(shù)據(jù)庫(kù)操作擴(kuò)展的相關(guān)技巧,需要的朋友可以參考下
    2016-03-03
  • SWT(JFace)體驗(yàn)之Slider,Scale

    SWT(JFace)體驗(yàn)之Slider,Scale

    SWT(JFace)體驗(yàn)之Slider,Scale實(shí)現(xiàn)代碼。
    2009-06-06

最新評(píng)論

上杭县| 霞浦县| 甘洛县| 乌拉特后旗| 大关县| 峨眉山市| 莱芜市| 巴林左旗| 星座| 同仁县| 拉萨市| 嵊州市| 河曲县| 珠海市| 吉木乃县| 石门县| 江津市| 邹平县| 巴东县| 雷州市| 仙居县| 建宁县| 凌源市| 嵩明县| 文昌市| 临颍县| 板桥市| 中西区| 澎湖县| 弥勒县| 辉县市| 阜平县| 赤壁市| 密云县| 邵阳县| 文安县| 平塘县| 甘泉县| 抚松县| 泸溪县| 北流市|