本書從零基礎(chǔ)讀者的角度出發(fā),通過通俗易懂的語言、豐富多彩的實(shí)例,循序漸進(jìn)地讓讀者在實(shí)踐中學(xué)習(xí)Spring Boot框架的用法。
全書共分為3篇15章,內(nèi)容包括環(huán)境搭建,Spring Boot基礎(chǔ),配置項(xiàng)目,Controller控制器,請求的過濾、攔截與監(jiān)聽,Service服務(wù),日志組件,單元測試,異常處理,模板引擎,JSON解析器,WebSocket長連接,上傳與下載,MyBatis和Redis等。書中先介紹基本概念和基礎(chǔ)語法,再講解代碼位置、參數(shù)說明,最后將代碼整合到項(xiàng)目中并演示運(yùn)行效果;講解過程給出詳細(xì)說明與注釋,降低讀者學(xué)習(xí)難度。同時(shí),本書配套了大量教學(xué)視頻,掃碼即可觀看,還提供所有程序源文件,方便讀者實(shí)踐。
本書適合Spring Boot初學(xué)者及已學(xué)完Java基礎(chǔ)、Java Servlet基礎(chǔ)和HTML基礎(chǔ)的讀者自學(xué)使用,也可用作高等院校相關(guān)專業(yè)的教材及參考書。
第1篇 基礎(chǔ)知識篇
第1章 環(huán)境搭建 2
1.1 安裝Java運(yùn)行環(huán)境——JDK 3
1.1.1 下載Open JDK 3
1.1.2 安裝與配置 4
1.2 安裝項(xiàng)目構(gòu)建工具——Maven 6
1.2.1 下載壓縮包 6
1.2.2 修改JAR文件的存放位置 7
1.2.3 添加阿里云中央倉庫鏡像 8
1.3 安裝集成開發(fā)環(huán)境——Eclipse 9
1.3.1 下載與安裝 9
1.3.2 啟動(dòng) 11
1.3.3 配置Java運(yùn)行環(huán)境 12
1.3.4 配置Maven環(huán)境 14
1.4 接口測試工具——Postman 16
1.5 編寫第一個(gè)Spring Boot程序 18
1.5.1 在Spring官網(wǎng)生成初始項(xiàng)目文件 18
1.5.2 Eclipse導(dǎo)入Spring Boot項(xiàng)目 21
1.5.3 編寫簡單的跳轉(zhuǎn)功能 23
1.5.4 打包項(xiàng)目 25
1.6 為Eclipse安裝Spring插件(可選) 26
1.6.1 安裝插件的步驟 27
1.6.2 快速創(chuàng)建Spring Boot項(xiàng)目 28
本章知識思維導(dǎo)圖 31
第2章 Spring Boot基礎(chǔ) 32
2.1 Spring Boot簡介 33
2.1.1 為什么用Spring Boot? 33
2.1.2 Spring Boot的特點(diǎn) 33
2.2 常用注解 34
2.3 啟動(dòng)類 35
2.4 命名規(guī)范 36
2.4.1 包的命名 36
2.4.2 Java文件的命名 39
2.5 理解注入 41
2.5.1 一個(gè)簡單的注入例子 41
[實(shí)例01] 將用戶名注冊成Bean 41
2.5.2 注冊Bean 43
[實(shí)例02] 李四的名字必須通過別名注入 44
[實(shí)例03] 指定People對象初始化方法和銷毀方法 46
2.5.3 獲取Bean 48
2.6 為項(xiàng)目添加依賴 50
2.6.1 修改pom.xml配置文件 50
2.6.2 如何查找依賴的版本號 53
本章知識思維導(dǎo)圖 54
第3章 配置項(xiàng)目 55
3.1 配置文件 56
3.1.1 properties和yml 56
3.1.2 常用配置 59
3.2 讀取配置項(xiàng)的值 60
3.2.1 使用@Value注解注入 60
[實(shí)例01] 讀取配置文件中記錄的學(xué)生信息 60
3.2.2 使用Environment環(huán)境組件 61
[實(shí)例02] 讀取配置文件中個(gè)人的簡歷信息 62
3.2.3 創(chuàng)建配置文件的映射對象 63
[實(shí)例03] 將配置文件中的信息封裝成學(xué)生對象 66
3.3 同時(shí)擁有多個(gè)配置文件 69
3.3.1 加載多個(gè)配置文件 69
[實(shí)例04] 讀取自定義配置文件中的靜態(tài)數(shù)據(jù) 70
3.3.2 切換多環(huán)境配置文件 72
[實(shí)例05] 創(chuàng)建生產(chǎn)和測試兩套環(huán)境的配置文件,切換兩套環(huán)境后啟動(dòng)項(xiàng)目 73
3.4 @Configuration配置類 74
[實(shí)例06] 自定義項(xiàng)目的錯(cuò)誤頁面 75
本章知識思維導(dǎo)圖 77
第4章 Controller控制器 78
4.1 映射HTTP請求 79
4.1.1 @Controlle/ 79
4.1.2 @RequestMapping 79
[實(shí)例01] 訪問指定地址進(jìn)入主頁 79
[實(shí)例02] 訪問多個(gè)地址進(jìn)入同一主頁 80
[實(shí)例03] 根據(jù)請求類型顯示不同的頁面 82
[實(shí)例04] 用戶發(fā)送的請求必須包含name參數(shù)和id參數(shù) 83
[實(shí)例05] 獲取用戶客戶端Cookie中的Session id,判斷用戶是否為自動(dòng)登錄 85
[實(shí)例06] 要求用戶發(fā)送的數(shù)據(jù)必須是JSON格式 86
[實(shí)例07] 為電商平臺設(shè)置上層地址 89
4.1.3 @ResponseBody 89
4.1.4 @RestControlle/ 91
4.1.5 重定向 91
[實(shí)例08] 將請求重定向?yàn)榘俣仁醉摚ǚ椒ㄒ唬? 91
[實(shí)例09] 將請求重定向?yàn)榘俣仁醉摚ǚ椒ǘ? 92
4.2 傳遞參數(shù) 93
4.2.1 自動(dòng)識別請求的參數(shù) 93
[實(shí)例10] 驗(yàn)證用戶發(fā)送的賬號、密碼是否正確 93
4.2.2 @RequestParam 95
[實(shí)例11] 獲取用戶發(fā)送的token口令 95
[實(shí)例12] 如果用戶沒有發(fā)送用戶名,則用“游客”稱呼用戶 97
4.2.3 @RequestBody 97
[實(shí)例13] 將前端發(fā)送的JSON數(shù)據(jù)封裝成People類對象 98
4.2.4 獲取Servlet的內(nèi)置對象 99
[實(shí)例14] 服務(wù)器返回圖片 100
4.3 RESTful風(fēng)格及傳參方式 101
4.3.1 什么是RESTful風(fēng)格? 101
4.3.2 動(dòng)態(tài)URL地址 102
[實(shí)例15] 使用RESTful風(fēng)格對用戶信息進(jìn)行查、改、刪 103
本章知識思維導(dǎo)圖 107
第5章 請求的過濾、攔截與監(jiān)聽 108
5.1 過濾器 109
5.1.1 通過配置類注冊 109
[實(shí)例01] 用過濾器檢查用戶是否登錄 110
[實(shí)例02] 讓同一個(gè)請求經(jīng)過三個(gè)過濾器 111
5.1.2 通過@WebFilter注解注冊 113
[實(shí)例03] 用過濾器統(tǒng)計(jì)資源訪問數(shù)量 114
5.2 攔截器 115
[實(shí)例04] 捕捉一個(gè)請求的執(zhí)行前、執(zhí)行后和結(jié)束事件 116
[實(shí)例05] 攔截高頻訪問 118
5.3 監(jiān)聽器 120
[實(shí)例06] 監(jiān)聽每一個(gè)前端請求的URL、IP和session id 121
[實(shí)例07] 監(jiān)聽網(wǎng)站的當(dāng)前訪問人數(shù) 123
本章知識思維導(dǎo)圖 124
第6章 Service服務(wù) 125
6.1 服務(wù)層的概念 126
6.2 @Service注解 126
[實(shí)例01] 創(chuàng)建用戶服務(wù),校驗(yàn)用戶賬號密碼是否正確 127
6.3 同時(shí)存在多個(gè)實(shí)現(xiàn)類的情況 128
6.3.1 按照實(shí)現(xiàn)類名稱映射 128
[實(shí)例02] 為翻譯服務(wù)創(chuàng)建英譯漢、法譯漢實(shí)現(xiàn)類 129
6.3.2 按照@Service的value屬性映射 131
[實(shí)例03] 為成績服務(wù)創(chuàng)建升序排列和降序排列實(shí)現(xiàn)類 131
6.4 不實(shí)現(xiàn)接口的@Service類 134
[實(shí)例04] 校驗(yàn)前端發(fā)送的名稱是否為中文姓名 134
6.5 @Service和@Repository的區(qū)別 136
本章知識思維導(dǎo)圖 136
第7章 日志組件 137
7.1 Spring Boot默認(rèn)的日志組件 138
7.1.1 log4j框架與logback框架 138
7.1.2 slf4j框架 138
7.2 打印日志 138
7.2.1 slf4j的用法 138
[實(shí)例01] 在日志中輸出前端發(fā)來的數(shù)據(jù) 140
7.2.2 解讀日志 141
7.3 保存日志文件 142
7.3.1 指定日志文件保存地址 142
[實(shí)例02] 在項(xiàng)目的logs文件夾下保存日志文件 142
7.3.2 指定日志文件名稱 143
7.3.3 為日志文件添加約束 144
[實(shí)例03] 若logs文件夾下日志文件超出2kB則打包成ZIP壓縮包 144
7.4 調(diào)整日志內(nèi)容 146
7.4.1 設(shè)置日志級別 146
[實(shí)例04] 讓所有控制器都打印DEBUG日志 146
7.4.2 修改日志格式 148
[實(shí)例05] 在控制臺顯示簡化的中文日志,在日志文件中記錄詳細(xì)英文日志 148
7.5 支持logback配置文件 149
[實(shí)例06] 使用logback.xml配置日志組件,在控制臺打印日志的同時(shí)生成日志文件 149
本章知識思維導(dǎo)圖 151
第8章 單元測試 152
8.1 JUnit簡介 153
8.1.1 什么是JUnit? 153
8.1.2 Spring Boot中的JUnit 153
8.2 注解 155
8.2.1 核心注解 155
[實(shí)例01] 測試用戶登錄驗(yàn)證服務(wù) 156
8.2.2 測前準(zhǔn)備與測后收尾 157
[實(shí)例02] 在測試方法運(yùn)行前后打印方法名稱 158
[實(shí)例03] 在測試開始前執(zhí)行初始化方法,測試結(jié)束后執(zhí)行資源釋放方法 159
8.2.3 參數(shù)化測試 161
[實(shí)例04] 測試判斷素?cái)?shù)算法的執(zhí)行效率 161
[實(shí)例05] 設(shè)計(jì)多組用例來測試證用戶登錄驗(yàn)證功能 163
[實(shí)例06] 將季節(jié)枚舉作為測試方法的參數(shù) 164
8.2.4 其他常用注解 165
8.3 斷言 168
8.3.1 Assertions類的常用方法 168
8.3.2 兩種導(dǎo)入方式 169
8.3.3 Executable接口 169
8.3.4 在測試中的應(yīng)用 170
[實(shí)例07] 驗(yàn)證開發(fā)者編寫的升序排序算法是否正確 170
[實(shí)例08] 驗(yàn)證用戶登錄方法是否完善 172
8.4 模擬Servlet內(nèi)置對象 174
[實(shí)例09] 在單元測試中偽造用戶登錄的session記錄 174
8.5 模擬網(wǎng)絡(luò)請求 176
8.5.1 創(chuàng)建網(wǎng)絡(luò)請求 176
8.5.2 添加請求參數(shù) 177
8.5.3 分析結(jié)果 178
8.5.4 在測試用的應(yīng)用 179
[實(shí)例10] 測試RESTful風(fēng)格的物料查詢服務(wù)和物料新增服務(wù) 180
[實(shí)例11] 使用MockMvc進(jìn)行斷言測試 182
本章知識思維導(dǎo)圖 184
第9章 異常處理 185
9.1 攔截特定異常 186
[實(shí)例01] 攔截缺失參數(shù)引發(fā)的空指針異常 186
9.2 攔截全局最底層異常 188
[實(shí)例02] 攔截意料之外出現(xiàn)的異常 188
9.3 獲取具體的異常日志 190
[實(shí)例03] 打印異常的堆棧日志 190
9.4 指定被攔截的Java文件 192
9.4.1 只攔截某個(gè)包中發(fā)生的異常 192
[實(shí)例04] 只攔截注冊服務(wù)引發(fā)異常 192
9.4.2 只攔截某個(gè)注解標(biāo)注類發(fā)生的異常 195
[實(shí)例05] 只攔截注冊服務(wù)引發(fā)異常 195
9.5 攔截自定義異常 197
[實(shí)例06] 攔截年齡是負(fù)數(shù)的異常 197
9.6 修改自定義異常的錯(cuò)誤狀態(tài) 198
[實(shí)例07] 讓負(fù)數(shù)年齡引發(fā)HTTP 400錯(cuò)誤 199
本章知識思維導(dǎo)圖 201
第2篇 實(shí)用Web技術(shù)篇
第10章 模板引擎 204
10.1 Thymeleaf 205
10.1.1 添加依賴 205
10.1.2 跳轉(zhuǎn)至HTML頁面文件 206
[實(shí)例01] 為首頁和登錄頁面編寫HTML文件,并實(shí)現(xiàn)跳轉(zhuǎn)邏輯 207
[實(shí)例02] 為項(xiàng)目添加默認(rèn)首頁和錯(cuò)誤頁 209
10.1.3 常用表達(dá)式和標(biāo)簽 210
10.1.4 向頁面?zhèn)髦? 212
[實(shí)例03] 在前端頁面顯示用戶的IP地址等信息 213
10.1.5 向頁面?zhèn)鬏攲ο? 214
[實(shí)例04] 用三種方式顯示人員信息 215
10.1.6 頁面中的判斷 216
[實(shí)例05] 判斷購票者是否符合兒童票要求 217
[實(shí)例06] 判斷季節(jié)并展示結(jié)果 218
10.1.7 頁面中的循環(huán) 219
[實(shí)例07] 打印人員名單 220
10.1.8 Thymeleaf內(nèi)置對象 221
[實(shí)例08] 以不同形式打印當(dāng)前日期 222
[實(shí)例09] 操作字符串內(nèi)容 223
[實(shí)例10] 操作List、Set和Map類型的集合對象 224
[實(shí)例11] 讀取當(dāng)前登錄的用戶名和請求中的消息 225
10.1.9 嵌入其他頁面文件 226
[實(shí)例12] 在主頁插入頂部的登錄菜單和底部的聲明頁面 227
10.1.10 其他配置 228
10.2 FreeMarke/ 229
10.2.1 添加依賴 229
10.2.2 添加配置 229
10.2.3 跳轉(zhuǎn)至頁面和傳遞參數(shù) 230
[實(shí)例13] 在主頁中顯示班級和老師姓名、年齡 230
10.2.4 指令 231
10.2.5 在網(wǎng)頁中聲明變量 233
[實(shí)例14] 使用assign指令定義西游記師徒四人的基本信息 234
10.2.6 “?”和“!”的用法 235
[實(shí)例15] 使用??和!處理后端發(fā)送的值,防止出現(xiàn)空數(shù)據(jù) 236
10.2.7 內(nèi)置函數(shù) 236
10.2.8 頁面中的條件判斷 240
[實(shí)例16] 根據(jù)學(xué)生各科成績給出優(yōu)、良、及格、不及格評級 241
10.2.9 頁面中的循環(huán) 243
[實(shí)例17] 使用list指令展示圖書銷售排行榜 243
10.2.10 在網(wǎng)頁中聲明方法 245
[實(shí)例18] 為特惠活動(dòng)中的圖書商品添加首尾標(biāo)簽 246
10.2.11 嵌入其他頁面文件 247
[實(shí)例19] 使用FreeMarker嵌入頂部的登錄菜單和底部的聲明頁面 247
本章知識思維導(dǎo)圖 249
第11章 JSON解析器 250
11.1 Jackson 251
11.1.1 什么是JSON 251
11.1.2 Jackson的核心API 252
11.1.3 將對象轉(zhuǎn)為JSON字符串 256
[實(shí)例01] 賬號密碼錯(cuò)誤時(shí)返回JSON格式錯(cuò)誤信息 258
11.1.4 將JSON字符串轉(zhuǎn)為實(shí)體對象 260
[實(shí)例02] 將JSON中的員工信息封裝成員工實(shí)體類 260
11.1.5 Spring Boot可自動(dòng)將對象轉(zhuǎn)換成JSON 262
11.1.6 Jackson的注解 264
[實(shí)例03] 利用注解設(shè)定商品實(shí)體類的JSON格式 264
11.1.7 JSON數(shù)據(jù)的增刪改查 265
11.2 FastJson 268
11.2.1 添加FastJson依賴 268
11.2.2 對象與JSON字符串互轉(zhuǎn) 268
[實(shí)例04] 接受前端發(fā)來的JSON登錄數(shù)據(jù),返回JSON登錄結(jié)果 269
11.2.3 @JSONField注解 270
11.2.4 FastJson對JSON數(shù)據(jù)進(jìn)行增刪改查 272
本章知識思維導(dǎo)圖 278
第12章 WebSocket長連接 279
12.1 概念 280
12.1.1 短連接與長連接 280
12.1.2 WebSocket協(xié)議 280
12.2 端點(diǎn) 280
12.2.1 添加依賴 280
12.2.2 開啟自動(dòng)注冊端點(diǎn) 281
12.2.3 創(chuàng)建服務(wù)器端點(diǎn) 281
12.2.4 Session會話對象 282
12.2.5 服務(wù)器端點(diǎn)的事件 284
12.3 頁面客戶端 286
12.3.1 JavaScript中的WebSocket對象 286
12.3.2 事件及觸發(fā)的方法 287
12.3.3 客戶端與服務(wù)端之間的觸發(fā)關(guān)系 287
12.4 一個(gè)簡單實(shí)例 288
[實(shí)例01] 頁面動(dòng)態(tài)展示服務(wù)器回執(zhí) 288
12.5 模擬手機(jī)掃碼登錄 291
[實(shí)例02] 模擬手機(jī)掃碼登錄 292
12.5.1 添加qrcode.js 292
12.5.2 模擬消息隊(duì)列 292
12.5.3 服務(wù)端實(shí)現(xiàn) 293
12.5.4 客戶端實(shí)現(xiàn) 294
12.5.5 控制器的實(shí)現(xiàn) 295
12.5.6 運(yùn)行效果 295
12.6 網(wǎng)頁聊天室 297
[實(shí)例03] 網(wǎng)頁聊天室 297
12.6.1 添加JQuery 297
12.6.2 自定義會話組 297
12.6.3 服務(wù)端實(shí)現(xiàn) 298
12.6.4 客戶端實(shí)現(xiàn) 299
12.6.5 運(yùn)行效果 300
本章知識思維導(dǎo)圖 302
第13章 上傳與下載 303
13.1 上傳文件 304
[實(shí)例01] 將圖片文件上傳至服務(wù)器 305
13.2 同時(shí)上傳多個(gè)文件 307
[實(shí)例02] 一次上傳文件至服務(wù)器 308
13.3 下載文件 310
[實(shí)例03] 根據(jù)URL地址下載不同的文件 311
13.4 提交Excel模板 312
13.4.1 添加POI依賴 312
13.4.2 讀取Excel文件的API 313
13.4.3 綜合實(shí)例 315
[實(shí)例04] 批量上傳考試成績 315
本章知識思維導(dǎo)圖 319
第3篇 框架整合篇
第14章 持久層框架——MyBatis 322
14.1 簡介 323
14.2 添加依賴 323
14.3 映射器Mappe/ 324
14.4 增、刪、改、查 325
14.4.1 @Select 326
[實(shí)例01] 將t_people表中的數(shù)據(jù)取出并封裝成實(shí)體類對象 328
14.4.2 @Insert、@Update和@Delete 330
[實(shí)例02] 向t_people表中添加新人員數(shù)據(jù)、修改新人員數(shù)據(jù),再刪除此新人員數(shù)據(jù) 330
14.5 SQL語句構(gòu)建器 332
14.5.1 SQL類 332
14.5.2 Provider系列注解 333
14.5.3 動(dòng)態(tài)構(gòu)建SQL 334
[實(shí)例03] 創(chuàng)建帶參數(shù)的接口方法,允許插入定義人員數(shù)據(jù),并查詢指定姓氏的人員數(shù)據(jù) 335
14.6 SQL參數(shù) 337
[實(shí)例04] 創(chuàng)建開放式人員信息增刪改查映射器接口 339
14.7 結(jié)果映射 340
[實(shí)例05] 創(chuàng)建圖書館借書單實(shí)體列,將三表聯(lián)查結(jié)果封裝到借書單對象中 341
14.8 級聯(lián)映射 343
14.8.1 一對一 344
[實(shí)例06] 構(gòu)建手機(jī)與電池的一對一關(guān)系 345
14.8.2 一對多 346
[實(shí)例07] 構(gòu)建老師與學(xué)生的一對多關(guān)系 348
本章知識思維導(dǎo)圖 351
第15章 緩存中間件——Redis 352
15.1 Redis簡介 353
15.1.1 非關(guān)系型數(shù)據(jù)庫 353
15.1.2 Redis簡介 353
15.1.3 為什么把Redis稱為緩存? 353
15.2 Windows系統(tǒng)搭建Redis環(huán)境 354
15.2.1 下載 354
15.2.2 啟動(dòng) 355
15.3 Redis常用命令 357
15.3.1 基礎(chǔ)鍵值命令 357
15.3.2 哈希命令 361
15.3.3 列表命令 364
15.3.4 集合命令 367
15.4 Spring Boot訪問Redis 370
15.4.1 添加依賴 370
15.4.2 配置項(xiàng) 371
15.4.3 使用Jedis訪問Redis 371
[實(shí)例01] 高并發(fā)搶票服務(wù) 373
15.4.4 使用RedisTemplate訪問Redis 376
[實(shí)例02] 為視頻播放量排行榜添加緩存 379
本章知識思維導(dǎo)圖 384