《 Spring Boot從入門到實戰(zhàn)(第2版·微課視頻版)》 課件 第5章 Spring Boot的Web開發(fā)_第1頁
《 Spring Boot從入門到實戰(zhàn)(第2版·微課視頻版)》 課件 第5章 Spring Boot的Web開發(fā)_第2頁
《 Spring Boot從入門到實戰(zhàn)(第2版·微課視頻版)》 課件 第5章 Spring Boot的Web開發(fā)_第3頁
《 Spring Boot從入門到實戰(zhàn)(第2版·微課視頻版)》 課件 第5章 Spring Boot的Web開發(fā)_第4頁
《 Spring Boot從入門到實戰(zhàn)(第2版·微課視頻版)》 課件 第5章 Spring Boot的Web開發(fā)_第5頁
已閱讀5頁,還剩74頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第5章SpringBoot的Web開發(fā)學(xué)習(xí)目的與要求本章首先介紹SpringBoot的Web開發(fā)支持,然后介紹Thymeleaf視圖模板引擎技術(shù),最后介紹SpringBoot的Web開發(fā)技術(shù)(JSON數(shù)據(jù)交互、文件上傳與下載、異常統(tǒng)一處理以及對JSP的支持)。通過本章的學(xué)習(xí),掌握SpringBoot的Web開發(fā)技術(shù)。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

目錄5.1SpringBoot的Web開發(fā)支持5.2Thymeleaf模板引擎5.3SpringBoot處理JSON數(shù)據(jù)5.4SpringBoot文件上傳與下載5.5SpringBoot的異常統(tǒng)一處理5.6SpringBoot對JSP的支持《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.1SpringBoot的Web開發(fā)支持<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>SpringBoot將自動關(guān)聯(lián)Web開發(fā)的相關(guān)依賴,如tomcat、spring-webmvc等,進而對Web開發(fā)的支持,并將相關(guān)技術(shù)的配置實現(xiàn)自動配置。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

目錄5.1SpringBoot的Web開發(fā)支持5.2Thymeleaf模板引擎5.3SpringBoot處理JSON數(shù)據(jù)5.4SpringBoot文件上傳與下載5.5SpringBoot的異常統(tǒng)一處理5.6SpringBoot對JSP的支持《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2Thymeleaf模板引擎在SpringBoot的Web應(yīng)用中,建議開發(fā)者使用HTML完成動態(tài)頁面。SpringBoot提供了許多模板引擎,主要包括FreeMarker、Groovy、Thymeleaf、Velocity和Mustache。因為Thymeleaf提供了完美的SpringMVC支持,所以在SpringBoot的Web應(yīng)用中推薦使用Thymeleaf作為模板引擎。Thymeleaf是一個Java類庫,是一個xml/xhtml/html5的模板引擎,能夠處理HTML、XML、JavaScript以及CSS,可以作為MVCWeb應(yīng)用的View層顯示數(shù)據(jù)?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.1SpringBoot的Thymeleaf支持在SpringBoot1.X版本中,spring-boot-starter-thymeleaf依賴包含了spring-boot-starter-web模塊。但是,在Spring5中,WebFlux的出現(xiàn)對于Web應(yīng)用的解決方案將不再唯一。所以,spring-boot-starter-thymeleaf依賴不再包含spring-boot-starter-web模塊,需要開發(fā)人員自己選擇spring-boot-starter-web模塊依賴。【例5-1】創(chuàng)建基于Thymeleaf模板引擎的SpringBootWeb應(yīng)用ch5_1?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

1.創(chuàng)建基于Thymeleaf模板引擎的SpringBootWeb應(yīng)用ch5_1在IDEA中,選擇菜單“File->New->Project”,打開“NewProject”對話框;在“NewProject”對話框中選擇和輸入相關(guān)信息后,單擊“Next”按鈕,打開新的“NewProject”對話框;在新的“NewProject”對話框中,選擇Thymeleaf、Lombok和SpringWeb依賴,單擊“Create”按鈕即可創(chuàng)建應(yīng)用ch5_1。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

2.打開項目目錄Tymeleaf模板默認(rèn)將JS腳本、CSS樣式、圖片等靜態(tài)文件默認(rèn)放置在src/main/resources/static目錄下;將視圖頁面放在src/main/resources/templates目錄下?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

3.設(shè)置Web應(yīng)用ch5_1的上下文路徑在ch5_1的perties文件中配置如下內(nèi)容:server.servlet.context-path=/ch5_1《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

4.創(chuàng)建控制器類@ControllerpublicclassTestThymeleafController{

@GetMapping("/") publicStringtest(){

//根據(jù)Tymeleaf模板,默認(rèn)將返回src/main/resources/templates/index.html

return"index"; }}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.新建index.html頁面在src/main/resources/templates目錄下新建index.html頁面,代碼如下:<body>測試SpringBoot的Thymeleaf支持</body>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

6.運行測試首先,運行Ch51Application主類。然后,訪問http://localhost:8080/ch5_1/?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法1.引入Thymeleaf首先,將View層頁面文件的html標(biāo)簽修改如下:<htmlxmlns:th="">然后,在View層頁面文件的其他標(biāo)簽里,使用th:*動態(tài)處理頁面。示例代碼如下:<imgth:src="'images/'+${aBook.picture}"/>其中,${aBook.picture}獲得數(shù)據(jù)對象aBook的picture屬性?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法2.輸出內(nèi)容使用th:text和th:utext(不對文本轉(zhuǎn)義,正常輸出)將文本內(nèi)容輸出到所在標(biāo)簽的body中。假如在國際化資源文件messages_en_US.properties中有消息文本“test.myText=<strong>TestInternationalMessage</strong>”,那么在頁面中可以使用如下兩種方式獲得消息文本:<pth:text="#{test.myText}"></p><!--對文本轉(zhuǎn)義,即輸出<strong>TestInternationalMessage</strong>--><pth:utext="#{test.myText}"></p><!--對文本不轉(zhuǎn)義,即輸出加粗的“TestInternationalMessage”-->《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法3.基本表達式1)變量表達式:${...}用于訪問容器上下文環(huán)境中的變量,示例代碼如下:<spanth:text="${information}">2)選擇變量表達式:*{...}選擇變量表達式計算的是選定的對象(th:object屬性綁定的對象),示例代碼如下:<divth:object="${session.user}">name:<spanth:text="*{firstName}"></span><br></div>3)信息表達式:#{...}一般用于顯示頁面靜態(tài)文本。將可能需要根據(jù)需求而整體變動的靜態(tài)文本放在properties文件中以便維護(如國際化)。通常與th:text屬性一起使用,示例代碼如下:<pth:text="#{test.myText}"></p>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法4.引入URLThymeleaf模板通過@{...}表達式引入URL,示例代碼如下:<!--默認(rèn)訪問src/main/resources/static下的css文件夾--><linkrel="stylesheet"th:href="@{css/bootstrap.min.css}"/><!--訪問相對路徑--><ath:href="@{/}">去看看</a><!--訪問絕對路徑--><ath:href="@{/index.html(param1='傳參')}">去清華大學(xué)出版社</a><!--默認(rèn)訪問src/main/resources/static下的'images文件夾--><imgth:src="'images/'+${aBook.picture}"/>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法5.訪問WebContext對象中的屬性Thymeleaf模板通過一些專門的表達式從模板的WebContext獲取請求參數(shù)、請求、會話和應(yīng)用程序中的屬性,具體如下:${xxx}將返回存儲在Thymeleaf模板上下文中的變量xxx或請求request作用域中的屬性xxx。${param.xxx}將返回一個名為xxx的請求參數(shù)(可能是多個值)。${session.xxx}將返回一個名為xxx的HttpSession作用域中的屬性。${application.xxx}將返回一個名為xxx的全局ServletContext上下文作用中的屬性。與EL表達式一樣,使用${xxx}獲得變量值,使用${對象變量名.屬性名}獲取JavaBean屬性值。但需要注意的是,${}表達式只能在th標(biāo)簽內(nèi)部有效。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法6.運算符在Thymeleaf模板的表達式中可以使用+、-、*、/、%等各種算術(shù)運算符,也可以使用>、<、<=、>=、==、!=等各種邏輯運算符。示例代碼如下:<trth:class="(${row}=='even')?'even':'odd'">...</tr>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法7.條件判斷1)if和unless標(biāo)簽只有在th:if條件成立時才顯示,th:unless與th:if相反,只有條件不成立時,才顯示標(biāo)簽內(nèi)容。示例代碼如下:<ahref="success.html"th:if="${user!=nul}">成功</a><ahref="success.html"th:unless="${user=nul}">成功</a>2)switch語句Thymeleaf模板也支持多路選擇switch語句結(jié)構(gòu),默認(rèn)屬性default可用“*”表示。示例代碼如下:<divth:switch="${user.role}"><pth:case="'admin'">Userisanadministrator</p><pth:case="'teacher'">Userisateacher</p><pth:case="*">Userisastudent</p></div>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法8.循環(huán)1)基本循環(huán)Thymeleaf模板使用th:each="obj,iterStat:${objList}"標(biāo)簽進行迭代循環(huán),迭代對象可以是java.util.List、java.util.Map或數(shù)組等。示例代碼如下:<!--循環(huán)取出集合數(shù)據(jù)--><divclass="col-md-4col-sm-6"th:each="book:${books}"> <ahref=""><imgth:src="'images/'+${book.picture}"</a>

<h4th:text="${book.bname}"></h4></div>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.2Thymeleaf基礎(chǔ)語法2)循環(huán)狀態(tài)的使用在th:each標(biāo)簽中可以使用循環(huán)狀態(tài)變量,該變量有如下屬性:index:當(dāng)前迭代對象的index(從0開始計數(shù))。count:當(dāng)前迭代對象的index(從1開始計數(shù))。size:迭代對象的大小。current:當(dāng)前迭代變量。even/odd:布爾值,當(dāng)前循環(huán)是否是偶數(shù)/奇數(shù)(從0開始計數(shù))。first:布爾值,當(dāng)前循環(huán)是否是第一個。last:布爾值,當(dāng)前循環(huán)是否是最后一個。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.3Thymeleaf的常用屬性1.th:action定義后臺控制器路徑,類似<form>標(biāo)簽的action屬性。示例代碼如下:<formth:action="@{/login}">...</form>2.th:each集合對象遍歷,功能類似JSTL標(biāo)簽<c:forEach>。示例代碼如下:<divclass="col-md-4col-sm-6"th:each="gtype:${gtypes}">

<pth:text="${gtype.id}"></p></div>3.th:field常用于表單參數(shù)綁定,通常與th:object一起使用。示例代碼如下:<formth:action="@{/login}"th:object="${user}"> <inputtype="text"value=""th:field="*{username}"></input> <inputtype="text"value=""th:field="*{role}"></input></form>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.3Thymeleaf的常用屬性4.th:href定義超鏈接,類似<a>標(biāo)簽的href屬性。value形式為@{/logout},示例代碼如下:<ath:href="@{/gogo}"></a>5.th:iddiv的id聲明,類似html標(biāo)簽中的id屬性,示例代碼如下:<divth:id="stu+(${rowStat.index}+1)"></div>6.th:if條件判斷。如果為否則標(biāo)簽不顯示,示例代碼如下:<divth:if="${rowStat.index}==0">...dosomething...</div>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.3Thymeleaf的常用屬性7.th:fragment聲明定義該屬性的div為模板片段,常用于頭文件、頁尾文件的引入。常與th:include、th:replace一起使用。8.th:object用于表單數(shù)據(jù)對象綁定,將表單綁定到后臺controller的一個JavaBean參數(shù)。常與th:field一起使用,進行表單數(shù)據(jù)綁定。9.th:src用于外部資源引入,類似于<script>標(biāo)簽的src屬性。示例代碼如下:<imgth:src="'images/'+${aBook.picture}"/>10.th:text文本顯示,將文本內(nèi)容顯示到所在標(biāo)簽的body中。示例代碼如下:<tdth:text="${username}"></td>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.3Thymeleaf的常用屬性11.th:value用于標(biāo)簽賦值,類似標(biāo)簽的value屬性。示例代碼如下:<optionth:value="Adult">Adult</option><inputtype="hidden"th:value="${msg}"/>12.th:style用于修改標(biāo)簽style,示例代碼如下:<spanth:style="'display:'+@{(${myVar}?'none':'inline-block')}">myVar是一個變量</span>13.th:onclick用于修改點擊事件,示例代碼如下:<buttonth:onclick="'getCollect()'"></button>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.3Thymeleaf的常用屬性【例5-2】表單提交及數(shù)據(jù)綁定的實現(xiàn)過程。1)創(chuàng)建實體類在Web應(yīng)用ch5_1的src/main/java目錄下,創(chuàng)建包com.ch.ch5_1.model,并在該包中創(chuàng)建實體類LoginBean。@DatapublicclassLoginBean{ Stringuname; Stringurole;}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

2)創(chuàng)建控制器類@ControllerpublicclassLoginController{

@GetMapping("/toLogin")publicStringtoLogin(Modelmodel){/*loginBean與login.html頁面中的th:object="${loginBean}"相同*/model.addAttribute("loginBean",newLoginBean());return"login";}@PostMapping("/login")publicStringgreetingSubmit(@ModelAttributeLoginBeanloginBean){/*@ModelAttributeLoginBeanloginBean接收login.html頁面中的表單數(shù)據(jù),并將loginBean對象保存到model中返回給result.html頁面顯示。*/System.out.println("測試提交的數(shù)據(jù):"+loginBean.getUname());return"result";}}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

3)創(chuàng)建頁面表示層在Web應(yīng)用ch5_1的src/main/resources/templates目錄下,創(chuàng)建頁面login.html和result.html?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

4)運行首先,運行Ch51Application主類。然后,訪問http://localhost:8080/ch5_1/toLogin,運行結(jié)果如圖5.3所示?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.4SpringBoot與Thymeleaf實現(xiàn)頁面信息國際化【例5-3】國際化的實現(xiàn)過程。1.編寫國際化資源屬性文件1)編寫管理員模塊的國際化信息在ch5_1的src/main/resources目錄下創(chuàng)建i18n/admin文件夾,并在該文件夾下創(chuàng)建adminMperties、adminMessages_en_US.properties和adminMessages_zh_CN.properties資源屬性文件。2)編寫用戶模塊的國際化信息在ch5_1的src/main/resources目錄下創(chuàng)建i18n/before文件夾,并在該文件夾下創(chuàng)建beforeMperties、beforeMessages_en_US.properties和beforeMessages_zh_CN.properties資源屬性文件。3)編寫公共模塊的國際化信息在ch5_1的src/main/resources目錄下創(chuàng)建i18n/common文件夾,并在該文件夾下創(chuàng)建commonMperties、commonMessages_en_US.properties和commonMessages_zh_CN.properties資源屬性文件?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

2.添加配置文件內(nèi)容,引入資源屬性文件在ch5_1應(yīng)用的配置文件中,添加如下內(nèi)容,引入資源屬性文件。spring.messages.basename=i18n/admin/adminMessages,i18n/before/beforeMessages,i18n/common/commonMessages《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

3.重寫localeResolver方法配置語言區(qū)域選擇在ch5_1應(yīng)用的com.ch.ch5_1包中,創(chuàng)建配置類LocaleConfig,該配置類實現(xiàn)WebMvcConfigurer接口,并配置語言區(qū)域選擇。@Configuration@EnableAutoConfigurationpublicclassLocaleConfigimplementsWebMvcConfigurer{}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

4.創(chuàng)建控制器類I18nTestController在ch5_1應(yīng)用的com.ch.ch5_1.controller包中,創(chuàng)建控制器類I18nTestController。@RequestMapping("/i18n")publicclassI18nTestController{@GetMapping("/first")publicStringtestI18n(){return"/i18n/first";}@GetMapping("/admin")publicStringadmin(){return"/i18n/admin";}}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.創(chuàng)建視圖頁面,并獲得國際化信息在ch5_1應(yīng)用的src/main/resources/templates目錄下,創(chuàng)建文件夾i18n。并在該文件夾中創(chuàng)建admin.html、before.html和first.html視圖頁面,并在這些視圖頁面中使用th:text="#{xxx}"獲得國際化信息?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

6.運行首先,運行Ch51Application主類。然后,訪問http://localhost:8080/ch5_1/i18n/first?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.5SpringBoot與Thymeleaf的表單驗證JSR是JavaSpecificationRequests的縮寫,意思是Java

規(guī)范提案。關(guān)于數(shù)據(jù)校驗這塊,最新的是JSR380,也就是BeanValidation2.0。BeanValidation是一個通過配置注解來驗證數(shù)據(jù)的框架,它包含兩部分BeanValidationAPI(規(guī)范)和HibernateValidator(實現(xiàn))。BeanValidation是Java定義的一套基于注解/xml的數(shù)據(jù)校驗規(guī)范,目前已經(jīng)從JSR303的BeanValidation1.0版本升級到JSR349的BeanValidation1.1版本,再到JSR380的BeanValidation2.0版本。2018年,Oracle(甲骨文)決定把JavaEE移交給開源組織Eclipse

基金會,正式改名為JakartaEE。BeanValidation也就自然命名為JakartaBeanValidation。編寫本書時,最新版本是JakartaBeanValidation3.0。對于JakartaBeanValidation驗證,可以使用它的實現(xiàn)HibernateValidator,注意HibernateValidator和Hibernate無關(guān),只是使用HibernateValidator進行數(shù)據(jù)驗證?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.5SpringBoot與Thymeleaf的表單驗證使用HibernateValidator對表單進行驗證時,需要加載HibernateValidator所依賴的jar包,示例代碼如下:

<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

HibernateValidator標(biāo)注類型1.空檢查@Null:驗證對象是否為null。@NotNull:驗證對象是否不為null,無法查檢長度為0的字符串。@NotBlank:檢查約束字符串是不是null,還有被trim后的長度是否大于0,只對字符串,且會去掉前后空格。@NotEmpty:檢查約束元素是否為null或者是empty。示例如下:@NotBlank(message="{goods.gname.required}")//goods.gname.required為屬性文件的錯誤代碼privateStringgname;《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

HibernateValidator標(biāo)注類型2.booelan檢查@AssertTrue:驗證boolean屬性是否為true。@AssertFalse:驗證boolean屬性是否為false。示例如下:@AssertTrueprivatebooleanisLogin;3.長度檢查@Size(min=,max=):驗證對象(Array,Collection,Map,String)長度是否在給定的范圍之內(nèi)。@Length(min=,max=):驗證字符串長度是否在給定的范圍之內(nèi)。示例如下:@Length(min=1,max=100)privateStringgdescription;《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

HibernateValidator標(biāo)注類型4.日期檢查@Past:驗證Date和Calendar對象是否在當(dāng)前時間之前。@Future:驗證Date和Calendar對象是否在當(dāng)前時間之后。@Pattern:驗證String對象是否符合正則表達式的規(guī)則。示例如下:@Past(message="{gdate.invalid}")privateDategdate;《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

HibernateValidator標(biāo)注類型5.?dāng)?shù)值檢查@Min:驗證Number和String對象是否大等于指定的值。@Max:驗證Number和String對象是否小等于指定的值。@DecimalMax:被標(biāo)注的值必須不大于約束中指定的最大值,這個約束的參數(shù)是一個通過BigDecimal定義的最大值的字符串表示,小數(shù)存在精度。@DecimalMin:被標(biāo)注的值必須不小于約束中指定的最小值,這個約束的參數(shù)是一個通過BigDecimal定義的最小值的字符串表示,小數(shù)存在精度。@Digits:驗證Number和String的構(gòu)成是否合法。@Digits(integer=,fraction=):驗證字符串是否符合指定格式的數(shù)字,interger指定整數(shù)精度,fraction指定小數(shù)精度。@Range(min=,max=):檢查數(shù)字是否介于min和max之間。@Valid:對關(guān)聯(lián)對象進行校驗,如果關(guān)聯(lián)對象是個集合或者數(shù)組,那么對其中的元素進行校驗,如果是一個map,則對其中的值部分進行校驗。@CreditCardNumber:信用卡驗證。@Email:驗證是否是郵件地址,如果為null,不進行驗證,通過驗證。@Range(min=0,max=100,message="{gprice.invalid}")privatedoublegprice;《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.5SpringBoot與Thymeleaf的表單驗證【例5-4】使用HibernateValidator驗證表單的過程。1.創(chuàng)建表單實體模型在ch5_1應(yīng)用的com.ch.ch5_1.model包中,創(chuàng)建表單實體模型類Goods。在該類利用JakartaBeanValidation的標(biāo)注類型對屬性進行分組驗證@DatapublicclassGoods{

publicinterfaceAdd{}publicinterfaceUpdate{}

@NotBlank(groups={Add.class,Update.class},message="商品名必須輸入")@Length(groups={Add.class,Update.class},min=1,max=5,message="商品名長度在1到5之間")privateStringgname;

@Range(groups={Add.class},min=0,max=100,message="商品價格在0到100之間")privatedoublegprice;}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

2.創(chuàng)建控制器在ch5_1應(yīng)用的com.ch.ch5_1.controller包中,創(chuàng)建控制器類TestValidatorController。在該類中有兩個處理方法,一個是界面初始化處理方法testValidator,一個是添加請求處理方法add。在add方法中,使用@Validated注解使驗證生效。//@Validated({Goods.Add.class})驗證add組,可以同時驗證多組@Validated({Goods.Add.class,Goods.Update.class})publicStringadd(@Validated({Goods.Add.class})@ModelAttribute("goodsInfo")Goodsgoods,BindingResultrs){//@ModelAttribute("goodsInfo")與th:object="${goodsInfo}"相對應(yīng)

if(rs.hasErrors()){//驗證失敗

return"testValidator";}//驗證成功,可以到任意地方,在這里直接到testValidator界面

return"testValidator";

}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

3.創(chuàng)建視圖頁面在ch5_1應(yīng)用的src/main/resources/templates目錄下,創(chuàng)建視圖頁面testValidator.html。在視圖頁面中,直接讀取到ModelAttribute里面注入的數(shù)據(jù),然后通過th:errors="*{xxx}"獲得驗證錯誤信息。

<formth:action="@{/add}"th:object="${goodsInfo}"method="post"> <div><span>商品名</span><inputtype="text"th:field="*{gname}"/><spanth:errors="*{gname}"></span></div> <div><span>商品價格</span><inputtype="text"th:field="*{gprice}"/><spanth:errors="*{gprice}"></span></div> <inputtype="submit"/></form>《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

4.運行首先,運行Ch51Application主類。然后,訪問http://localhost:8080/ch5_1/testValidator。測試效果如圖5.7所示。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.6基于Thymeleaf與BootStrap的Web開發(fā)實例【例5-5】創(chuàng)建基于Thymeleaf模板引擎的SpringBootWeb應(yīng)用ch5_2。1.創(chuàng)建基于Thymeleaf模板引擎的SpringBootWeb應(yīng)用ch5_2在IDEA中,選擇菜單“File->New->Project”,打開“NewProject”對話框;在“NewProject”對話框中選擇和輸入相關(guān)信息后,單擊“Next”按鈕,打開新的“NewProject”對話框;在新的“NewProject”對話框中,選擇Thymeleaf、Lombok和SpringWeb依賴,單擊“Create”按鈕即可創(chuàng)建應(yīng)用ch5_2。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.6基于Thymeleaf與BootStrap的Web開發(fā)實例2.設(shè)置Web應(yīng)用ch5_2的上下文路徑在ch5_2的perties文件中配置如下內(nèi)容:server.servlet.context-path=/ch5_23.創(chuàng)建實體類Book在應(yīng)用ch5_2的src/main/java目錄下,創(chuàng)建名為com.ch.ch5_2.model的包,并在該包中創(chuàng)建名為Book的實體類。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.6基于Thymeleaf與BootStrap的Web開發(fā)實例4.創(chuàng)建控制器類ThymeleafController在應(yīng)用ch5_2的src/main/java目錄下,創(chuàng)建名為com.ch.ch5_2.controller的包,并在該包中創(chuàng)建名為ThymeleafController的控制器類。在該控制器類中,實例化Book類的多個對象,并保存到集合ArrayList<Book>中?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.6基于Thymeleaf與BootStrap的Web開發(fā)實例5.整理腳本樣式靜態(tài)文件JS腳本、CSS樣式、圖片等靜態(tài)文件默認(rèn)放置在應(yīng)用ch5_2的src/main/resources/static目錄下。6.View視圖頁面Tymeleaf模板默認(rèn)將視圖頁面放在src/main/resources/templates目錄下。因此,我們在src/main/resources/templates目錄下新建html頁面文件index.html。在該頁面中,使用Tymeleaf模板顯示控制器類TestThymeleafController中的model對象數(shù)據(jù)?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.2.6基于Thymeleaf與BootStrap的Web開發(fā)實例7.運行首先,運行Ch52Application主類。然后,訪問http://localhost:8080/ch5_2/。運行效果如圖5.8所示。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

目錄5.1SpringBoot的Web開發(fā)支持5.2Thymeleaf模板引擎5.3SpringBoot處理JSON數(shù)據(jù)5.4SpringBoot文件上傳與下載5.5SpringBoot的異常統(tǒng)一處理5.6SpringBoot對JSP的支持《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.3SpringBoot處理JSON數(shù)據(jù)在SpringBoot的Web應(yīng)用中,內(nèi)置了JSON數(shù)據(jù)的解析功能,默認(rèn)使用Jackson自動完成解析(不需要加載Jackson依賴包),當(dāng)控制器返回一個Java對象或集合數(shù)據(jù)時,SpringBoot自動將其轉(zhuǎn)換成JSON數(shù)據(jù),使用起來很方便簡潔。SpringBoot處理JSON數(shù)據(jù)時,需要用到兩個重要的JSON格式轉(zhuǎn)換注解,分別是@RequestBody和@ResponseBody。

@RequestBody:用于將請求體中的數(shù)據(jù)綁定到方法的形參中,該注解應(yīng)用在方法的形參上。

@ResponseBody:用于直接返回JSON對象,該注解應(yīng)用在方法上?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.3SpringBoot處理JSON數(shù)據(jù)【例5-6】Spring

Boot處理JSON數(shù)據(jù)的過程。1.創(chuàng)建實體類在ch5_2應(yīng)用的com.ch.ch5_2.model包中,創(chuàng)建實體類Person。具體代碼如下:importlombok.Data;@DatapublicclassPerson{ privateStringpname; privateStringpassword; privateIntegerpage;}2.創(chuàng)建視圖頁面在ch5_2應(yīng)用的src/main/resources/templates目錄下,創(chuàng)建視圖頁面input.html。在input.html頁面中,引入jQuery框架,并使用它的ajax方法進行異步請求?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.3SpringBoot處理JSON數(shù)據(jù)3.創(chuàng)建控制器在ch5_2應(yīng)用的com.ch.ch5_2.controller包中,創(chuàng)建控制器類TestJsonController。在該類中有兩個處理方法,一個是界面導(dǎo)航方法input,一個是接收頁面請求的方法。4.運行首先,運行Ch52Application主類。然后,訪問http://localhost:8080/ch5_2/input。運行效果如圖5.9所示?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

目錄5.1SpringBoot的Web開發(fā)支持5.2Thymeleaf模板引擎5.3SpringBoot處理JSON數(shù)據(jù)5.4SpringBoot文件上傳與下載5.5SpringBoot的異常統(tǒng)一處理5.6SpringBoot對JSP的支持《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.4SpringBoot文件上傳與下載在實際的Web應(yīng)用開發(fā)中,為了成功上傳文件,必須將表單的method設(shè)置為post,并將enctype設(shè)置為multipart/form-data。只有這種設(shè)置,瀏覽器才能將所選文件的二進制數(shù)據(jù)發(fā)送給服務(wù)器。org.springframework.web.multipart.MultipartResolver是一個解析包括文件上傳在內(nèi)的multipart請求接口。從Spring6.0和Servlet5.0+開始,基于ApacheCommonsFileUpload組件的MultipartResolver接口實現(xiàn)類CommonsMultipartResolver被棄用。改用基于Servlet容器的MultipartResolver接口實現(xiàn)類StandardServletMultipartResolver,進行multipart請求解析。在SpringMVC框架中,上傳文件時,將文件相關(guān)信息及操作封裝到MultipartFile接口對象中。因此,開發(fā)者只需要使用MultipartFile類型聲明模型類的一個屬性,即可以對被上傳文件進行操作?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.4SpringBoot文件上傳與下載【例5-7】SpringBoot文件上傳與下載。1.設(shè)置上傳文件大小限制在Web應(yīng)用ch5_2的配置文件perties中,添加如下配置進行限制上傳文件大小。#上傳文件時,默認(rèn)單個上傳文件大小是1MB,max-file-size設(shè)置單個上傳文件大小spring.servlet.multipart.max-file-size=50MB#默認(rèn)總文件大小是10MB,max-request-size設(shè)置總上傳文件大小spring.servlet.multipart.max-request-size=500MB2.創(chuàng)建選擇文件視圖頁面在ch5_2應(yīng)用的src/main/resources/templates目錄下,創(chuàng)建選擇文件視圖頁面uploadFile.html。該頁面中有個enctype屬性值為multipart/form-data的form表單?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.4SpringBoot文件上傳與下載3.創(chuàng)建實體類在ch5_2應(yīng)用的com.ch.ch5_2.model包中,創(chuàng)建實體類MyFile封裝文件對象。4.創(chuàng)建控制器在ch5_2應(yīng)用的com.ch.ch5_2.controller包中,創(chuàng)建控制器類TestFileUpload。在該類中有4個處理方法,一個是界面導(dǎo)航方法uploadFile,一個是實現(xiàn)文件上傳的upload方法,一個是顯示將要被下載文件的showDownLoad方法,一個是實現(xiàn)下載功能的download方法。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.4SpringBoot文件上傳與下載5.創(chuàng)建文件下載視圖頁面在ch5_2應(yīng)用的src/main/resources/templates目錄下,創(chuàng)建文件下載視圖頁面showFile.html。6.運行首先,運行Ch52Application主類。然后,訪問http://localhost:8080/ch5_2/uploadFile。運行效果如圖5.10所示。《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

目錄5.1SpringBoot的Web開發(fā)支持5.2Thymeleaf模板引擎5.3SpringBoot處理JSON數(shù)據(jù)5.4SpringBoot文件上傳與下載5.5SpringBoot的異常統(tǒng)一處理5.6SpringBoot對JSP的支持《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5SpringBoot的異常統(tǒng)一處理如果能將所有類型的異常處理從各層中解耦出來,這樣既保證了相關(guān)處理過程的功能較單一,也實現(xiàn)了異常信息的統(tǒng)一處理和維護。幸運的是,Spring框架支持這樣的實現(xiàn)。本節(jié)將從:@ExceptionHandler與@ControllerAdvice注解等兩種方式講解SpringBoot應(yīng)用的異常統(tǒng)一處理?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.1自定義error頁面在SpringBootWeb應(yīng)用的src/main/resources/templates目錄下添加error.html頁面,訪問發(fā)生錯誤或異常時,SpringBoot將自動找到該頁面作為錯誤頁面?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.1自定義error頁面【例5-8】自定義error頁面。具體實現(xiàn)步驟如下。1.創(chuàng)建基于Thymeleaf模板引擎的SpringBootWeb應(yīng)用ch5_3參照5.2.6節(jié)的【例5-5】,創(chuàng)建基于Thymeleaf模板引擎的SpringBootWeb應(yīng)用ch5_3。2.設(shè)置Web應(yīng)用ch5_3的上下文路徑在ch5_3的perties文件中配置如下內(nèi)容:server.servlet.context-path=/ch5_33.創(chuàng)建自定義異常類MyException在應(yīng)用ch5_3的src/main/java目錄下,創(chuàng)建名為com.ch.ch5_3.exception的包,并在該包中創(chuàng)建名為MyException的異常類?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.1自定義error頁面4.創(chuàng)建控制器類TestHandleExceptionController在應(yīng)用ch5_3的src/main/java目錄下,創(chuàng)建名為com.ch.ch5_3.controller的包,并在該包中創(chuàng)建名為TestHandleExceptionController的控制器類。在該控制器類中,有4個請求處理方法,一個是導(dǎo)航到index.html,另外3個分別拋出不同的異常(并沒有處理異常)。5.整理腳本樣式靜態(tài)文件JS腳本、CSS樣式、圖片等靜態(tài)文件默認(rèn)放置在src/main/resources/static目錄下,ch5_3應(yīng)用引入了與ch5_2一樣的BootStrap和jQuery。6.View視圖頁面Tymeleaf模板默認(rèn)將視圖頁面放在src/main/resources/templates目錄下。因此,我們在src/main/resources/templates目錄下新建html頁面文件index.html和error.html?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.1自定義error頁面7.運行首先,運行Ch53Application主類。然后,訪問http://localhost:8080/ch5_3/打開index.html頁面?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.2@ExceptionHandler注解如果在Controller中有一個使用@ExceptionHandler注解修飾的方法,那么當(dāng)Controller的任何方法拋出異常時,都由該方法處理異常?!纠?-9】使用@ExceptionHandler注解處理異常?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.2@ExceptionHandler注解1.在控制器類中添加使用@ExceptionHandler注解修飾的方法在【例5-8】的控制器類TestHandleExceptionController中,添加一個使用@ExceptionHandler注解修飾的方法,具體代碼如下:@ExceptionHandler(value=Exception.class)publicStringhandlerException(Exceptione){ //數(shù)據(jù)庫異常

if(einstanceofSQLException){ return"sqlError"; }elseif(einstanceofMyException){//自定義異常

return"myError"; }else{//未知異常

return"noError"; }}《SpringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.2@ExceptionHandler注解2.創(chuàng)建sqlError、myError和noError頁面在ch5_3的src/main/resources/templates目錄下,創(chuàng)建sqlError、myError和noError頁面。當(dāng)發(fā)生SQLException異常時,SpringBoot處理后,顯示sqlError頁面;當(dāng)發(fā)生MyException異常時,SpringBoot處理后,顯示myError頁面;當(dāng)發(fā)生未知異常時,SpringBoot處理后,顯示noError頁面?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.2@ExceptionHandler注解3.運行再次運行Ch53Application主類后,訪問http://localhost:8080/ch5_3/打開index.html頁面,單擊“處理數(shù)據(jù)庫異?!辨溄訒r,執(zhí)行控制器中的publicvoiddb()throwsSQLException方法,該方法拋出了SQLException,這時SpringBoot會自動執(zhí)行使用@ExceptionHandler注解修飾的方法publicStringhandlerException(Exceptione)進行異常處理并打開sqlError.html頁面,同時觀察控制臺沒有拋出異常信息。注意單擊“404錯誤”鏈接時,還是由自定義error頁面顯示錯誤信息,這是因為沒有執(zhí)行控制器中拋出異常的方法,進而不會執(zhí)行使用@ExceptionHandler注解修飾的方法?!禨pringBoot從入門到實戰(zhàn)(第2版·微課視頻版)》陳恒

主編,清華大學(xué)出版社,2024

5.5.3@ControllerAdvice注解@ControllerAdvice注解,顧名思義,是一個增強的Controller。使

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論