輕量級(jí)Java Web企業(yè)應(yīng)用實(shí)戰(zhàn)——Spring MVC+Spring+MyBatis整合開發(fā)
定 價(jià):139 元
- 作者:李剛
- 出版時(shí)間:2020/3/1
- ISBN:9787121385001
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP312.8
- 頁碼:724
- 紙張:
- 版次:01
- 開本:16開
本書介紹了Java EE開發(fā)非常流行的三個(gè)開源框架:Spring MVC、Spring和MyBatis,其中Spring MVC、Spring用的是5.1版本,MyBatis用的是3.5版本。本書重點(diǎn)介紹了如何整合Spring MVC + Spring + MyBatis進(jìn)行開發(fā),內(nèi)容主要包括三部分。第一部分介紹Java EE開發(fā)的基礎(chǔ)知識(shí),以及如何搭建開發(fā)環(huán)境。第二部分詳細(xì)講解MyBatis、Spring和Spring MVC三個(gè)框架的用法,并從Eclipse IDE的使用上手,一步步帶領(lǐng)讀者深入三個(gè)框架的核心。這部分是本書的核心內(nèi)容,因此也是重點(diǎn)部分。這部分并不是簡單地講授三個(gè)框架的基本用法,而是真正剖析它們?cè)趯?shí)際開發(fā)場景中面臨的挑戰(zhàn)及最佳實(shí)踐,并對(duì)其諸多關(guān)鍵技術(shù)實(shí)現(xiàn)提供了源代碼解讀,這樣既能加深讀者對(duì)框架本質(zhì)的理解,也能直接提升讀者的Java功底。第三部分示范開發(fā)了一個(gè)包含7個(gè)表,表之間具有復(fù)雜的關(guān)聯(lián)映射、繼承映射等關(guān)系,且業(yè)務(wù)也相對(duì)復(fù)雜的工作流案例,幫助讀者理論聯(lián)系實(shí)際,將三個(gè)框架真正運(yùn)用到實(shí)際開發(fā)中。該案例采用目前非常流行、規(guī)范的Java EE架構(gòu),整個(gè)應(yīng)用分為領(lǐng)域?qū)ο髮、Mapper(DAO)。層、業(yè)務(wù)邏輯層、MVC層和視圖層,各層之間分層清晰,層與層之間以松耦合的方式組織在一起。該案例既提供了與IDE無關(guān)的、基于Ant管理的項(xiàng)目源代碼,也提供了基于Eclipse IDE的項(xiàng)目源代碼,最大限度地滿足讀者的需求。本書配有讀者答疑交流群,讀者可通過掃描本書封面勒口上的二維碼,按照指引加入,本書作者將通過交流群提供線上不定期答疑服務(wù)。
李剛,十余年軟件開發(fā)從業(yè)經(jīng)驗(yàn),瘋狂軟件教育中心教學(xué)總監(jiān)。瘋狂Java實(shí)訓(xùn)營創(chuàng)始人,瘋狂Java體系原創(chuàng)圖書作者。廣東技術(shù)師范學(xué)院計(jì)算機(jī)科學(xué)系兼職副教授,CSDN特邀講師。培訓(xùn)的學(xué)生已在騰訊、阿里、華為、IBM、網(wǎng)易、唯品會(huì)、電信盈科等名企就職。國內(nèi)知名高端IT技術(shù)圖書作家,已出版《瘋狂Java講義》《瘋狂Android講義》《輕量級(jí)Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)》《瘋狂前端開發(fā)講義》《瘋狂HTML5/CSS3/JavaScript講義》等著作。其中瘋狂Java體系圖書均已沉淀多年,贏得極高的市場認(rèn)同,多次重印,多部著作印刷數(shù)量超過10萬冊(cè),并被多所“985”“211”院校選作教材,部分圖書已被翻譯成繁體中文版,授權(quán)到中國臺(tái)灣地區(qū)。
第1章 Java EE應(yīng)用和開發(fā)環(huán)境 1
1.1 Java EE應(yīng)用概述 2
1.1.1 Java EE應(yīng)用的分層模型 2
1.1.2 Java EE應(yīng)用的組件 3
1.1.3 Java EE應(yīng)用的結(jié)構(gòu)和優(yōu)勢 4
1.1.4 常用的Java EE服務(wù)器 4
1.2 輕量級(jí)Java EE應(yīng)用相關(guān)技術(shù) 5
1.2.1 JSP、Servlet 4.x和JavaBean及替代技術(shù) 5
1.2.2 Spring MVC及替代技術(shù) 6
1.2.3 MyBatis及替代技術(shù) 6
1.2.4 Spring及替代技術(shù) 7
1.3 Tomcat的下載和安裝 8
1.3.1 安裝Tomcat服務(wù)器 8
1.3.2 配置Tomcat的服務(wù)端口 9
1.3.3 進(jìn)入控制臺(tái) 10
1.3.4 部署Web應(yīng)用 12
1.3.5 配置Tomcat的數(shù)據(jù)源 13
1.4 Eclipse的安裝和使用 15
1.4.1 Eclipse的下載和安裝 15
1.4.2 在線安裝Eclipse插件 15
1.4.3 從本地壓縮包安裝插件 17
1.4.4 手動(dòng)安裝Eclipse插件 18
1.4.5 使用Eclipse開發(fā)Java Web應(yīng)用 18
1.4.6 導(dǎo)入Eclipse項(xiàng)目 21
1.4.7 導(dǎo)入非Eclipse項(xiàng)目 22
1.5 Ant的安裝和使用 23
1.5.1 Ant的下載和安裝 24
1.5.2 使用Ant工具 25
1.5.3 定義生成文件 26
1.5.4 Ant的任務(wù)(task) 30
1.6 Maven的安裝和使用 32
1.6.1 下載和安裝Maven 33
1.6.2 設(shè)置Maven 34
1.6.3 創(chuàng)建、構(gòu)建簡單的項(xiàng)目 35
1.6.4 Maven的核心概念 39
1.6.5 依賴管理 44
1.6.6 POM文件的元素 46
1.7 使用Git進(jìn)行軟件配置管理(SCM) 47
1.7.1 下載和安裝Git、TortoiseGit 47
1.7.2 創(chuàng)建本地資源庫 49
1.7.3 添加文件和文件夾 51
1.7.4 提交修改 52
1.7.5 查看文件或文件夾的版本變更 53
1.7.6 刪除文件或文件夾 54
1.7.7 從以前版本重新開始 55
1.7.8 克隆項(xiàng)目 56
1.7.9 創(chuàng)建分支 56
1.7.10 沿著分支開發(fā) 57
1.7.11 合并分支 58
1.7.12 使用Eclipse作為Git客戶端 59
1.7.13 配置遠(yuǎn)程中央資源庫 61
1.7.14 推送項(xiàng)目 64
1.7.15 獲取項(xiàng)目和拉取項(xiàng)目 64
1.8 本章小結(jié) 66
第2章 MyBatis的基礎(chǔ)用法 67
2.1 MyBatis是ORM框架嗎 68
2.1.1 何謂ORM 68
2.1.2 ORM的映射方式 69
2.1.3 MyBatis的映射方式 70
2.2 MyBatis入門 71
2.2.1 MyBatis的下載和安裝 72
2.2.2 MyBatis的數(shù)據(jù)庫操作 72
2.2.3 使用MyBatis執(zhí)行CRUD 78
2.2.4 利用Mapper對(duì)象 80
2.2.5 在Eclipse中使用MyBatis 84
2.3 MyBatis核心API及作用域 90
2.3.1 SqlSessionFactoryBuilder的作用域 90
2.3.2 SqlSessionFactory的作用域 91
2.3.3 SqlSession及其作用域 92
2.3.4 Mapper組件的作用域 94
2.4 MyBatis配置詳解 94
2.4.1 屬性配置 95
2.4.2 設(shè)置配置 98
2.4.3 為類型配置別名 101
2.4.4 對(duì)象工廠 103
2.4.5 加載Mapper 105
2.5 類型處理器 106
2.5.1 內(nèi)置的類型處理器 106
2.5.2 自定義類型處理器 107
2.5.3 枚舉的類型處理器 111
2.5.4 存儲(chǔ)枚舉值的序號(hào) 112
2.5.5 同時(shí)存儲(chǔ)枚舉值的名稱和序號(hào) 113
2.6 數(shù)據(jù)庫環(huán)境配置 116
2.6.1 環(huán)境配置與默認(rèn)環(huán)境配置 116
2.6.2 事務(wù)管理器 117
2.6.3 數(shù)據(jù)源配置 121
2.6.4 配置第三方C3P0數(shù)據(jù)源 122
2.7 支持不同類型的數(shù)據(jù)庫 124
2.8 Mapper基礎(chǔ) 127
2.8.1 select的用法 128
2.8.2 insert的用法 130
2.8.3 使用useGeneratedKeys返回 自增長的主鍵值 131
2.8.4 使用selectKey生成主鍵值 132
2.8.5 update和delete元素的用法 134
2.8.6 使用sql元素定義可復(fù)用的SQL片段 134
2.8.7 參數(shù)處理 136
2.8.8 參數(shù)的額外聲明 142
2.8.9 字符串替換 142
2.9 MyBatis代碼生成器 144
2.9.1 提供配置文件 145
2.9.2 運(yùn)行MBG 146
2.10 本章小結(jié) 149
第3章 深入使用MyBatis 151
3.1 結(jié)果集映射 152
3.1.1 簡單resultMap映射 152
3.1.2 構(gòu)造器映射 154
3.1.3 自動(dòng)映射 157
3.2 調(diào)用存儲(chǔ)過程 159
3.2.1 調(diào)用返回結(jié)果集的存儲(chǔ)過程 159
3.2.2 調(diào)用帶out模式參數(shù)的存儲(chǔ)過程 160
3.2.3 調(diào)用傳出參數(shù)為游標(biāo)引用的存儲(chǔ)過程 162
3.3 關(guān)聯(lián)映射 165
3.3.1 基于嵌套select的一對(duì)一映射 165
3.3.2 基于嵌套select映射策略的性能缺陷 171
3.3.3 延遲加載的原理 175
3.3.4 基于多表連接查詢的一對(duì)一映射 176
3.3.5 基于多結(jié)果集的一對(duì)一映射 182
3.3.6 基于嵌套select的一對(duì)多映射 184
3.3.7 基于多表連接查詢的一對(duì)多映射 191
3.3.8 基于多結(jié)果集的一對(duì)多映射 192
3.3.9 多對(duì)多映射的三種策略 194
3.4 基于辨別者列的繼承映射 201
3.4.1 繼承映射的簡單示例 201
3.4.2 繼承映射的復(fù)雜示例 205
3.5 動(dòng)態(tài)SQL 210
3.5.1 if元素的用法 210
3.5.2 在update更新列中使用if 216
3.5.3 在insert動(dòng)態(tài)插入列中使用if 219
3.5.4 choose、when、otherwise元素的 用法 222
3.5.5 where與trim的用法 225
3.5.6 set與trim的用法 228
3.5.7 使用trim實(shí)現(xiàn)動(dòng)態(tài)插入 230
3.5.8 foreach元素的基本用法 232
3.5.9 foreach實(shí)現(xiàn)批量插入 234
3.5.10 foreach實(shí)現(xiàn)批量更新 236
3.5.11 bind元素的用法 239
3.6 緩存 240
3.6.1 一級(jí)緩存 240
3.6.2 一級(jí)緩存的臟數(shù)據(jù)與避免方法 243
3.6.3 二級(jí)緩存 246
3.6.4 二級(jí)緩存的臟數(shù)據(jù)與避免方法 248
3.6.5 整合Ehcache實(shí)現(xiàn)二級(jí)緩存 252
3.7 用插件擴(kuò)展MyBatis 254
3.7.1 攔截器接口及作用原理 254
3.7.2 可攔截的目標(biāo) 256
3.7.3 為MyBatis開發(fā)分頁插件 260
3.8 本章小結(jié) 266
第4章 Spring的基礎(chǔ)用法 267
4.1 Spring簡介和Spring 5的變化 268
4.1.1 Spring簡介 268
4.1.2 Spring 5.x的變化 269
4.2 Spring入門 269
4.2.1 Spring的下載和安裝 270
4.2.2 使用Spring管理Bean 270
4.2.3 在Eclipse中使用Spring 274
4.3 Spring的核心機(jī)制:依賴注入 276
4.3.1 理解依賴注入 277
4.3.2 設(shè)值注入 278
4.3.3 構(gòu)造注入 282
4.3.4 兩種注入方式的對(duì)比 284
4.4 使用Spring容器 284
4.4.1 Spring容器 284
4.4.2 使用ApplicationContext 286
4.4.3 ApplicationContext的國際化支持 287
4.4.4 ApplicationContext的事件機(jī)制 289
4.4.5 讓Bean獲取Spring容器 292
4.5 Spring容器中的Bean 294
4.5.1 Bean的基本定義和Bean別名 294
4.5.2 容器中Bean的作用域 295
4.5.3 配置依賴 299
4.5.4 設(shè)置普通屬性值 300
4.5.5 配置合作者Bean 302
4.5.6 使用自動(dòng)裝配注入合作者Bean 302
4.5.7 注入嵌套Bean 305
4.5.8 注入集合值 306
4.5.9 組合屬性 311
4.5.10 Spring的Bean和JavaBean 312
4.6 Spring的Java配置管理 313
4.7 創(chuàng)建Bean的三種方式 316
4.7.1 使用構(gòu)造器創(chuàng)建Bean 316
4.7.2 使用靜態(tài)工廠方法創(chuàng)建Bean 317
4.7.3 使用實(shí)例工廠方法創(chuàng)建Bean 319
4.8 深入理解容器中的Bean 321
4.8.1 抽象Bean與子Bean 322
4.8.2 Bean繼承與Java繼承的區(qū)別 323
4.8.3 容器中的工廠Bean 323
4.8.4 獲得Bean本身的id 326
4.8.5 強(qiáng)制初始化Bean 327
4.9 容器中Bean的生命周期 327
4.9.1 依賴關(guān)系注入之后的行為 328
4.9.2 Bean銷毀之前的行為 330
4.9.3 協(xié)調(diào)作用域不同步的Bean 332
4.10 高級(jí)依賴關(guān)系配置 336
4.10.1 獲取其他Bean的屬性值 336
4.10.2 獲取Field值 339
4.10.3 獲取方法的返回值 341
4.11 基于XML Schema的簡化配置方式 344
4.11.1 使用p:命名空間簡化配置 344
4.11.2 使用c:命名空間簡化配置 345
4.11.3 使用util:命名空間簡化配置 347
4.12 Spring表達(dá)式語言 349
4.12.1 使用Expression接口進(jìn)行表達(dá)式求值 350
4.12.2 Bean定義中的表達(dá)式語言支持 352
4.12.3 SpEL語法詳述 353
4.13 本章小結(jié) 358
第5章 深入使用Spring 359
5.1 兩種后處理器 360
5.1.1 Bean后處理器 360
5.1.2 Bean后處理器的用處 364
5.1.3 容器后處理器 364
5.1.4 屬性占位符配置器 366
5.1.5 重寫占位符配置器 367
5.2 “零配置”支持 368
5.2.1 搜索Bean類 368
5.2.2 指定Bean的作用域 371
5.2.3 使用@Resource、@Value配置依賴 372
5.2.4 使用@PostConstruct和@PreDestroy定制生命周期行為 373
5.2.5 @DependsOn和@Lazy 374
5.2.6 自動(dòng)裝配和精確裝配 374
5.2.7 Spring 5新增的注解 379
5.3 資源訪問 380
5.3.1 Resource實(shí)現(xiàn)類 381
5.3.2 ResourceLoader接口和 ResourceLoaderAware接口 385
5.3.3 使用Resource作為屬性 388
5.3.4 在ApplicationContext中使用資源 389
5.4 Spring的AOP 392
5.4.1 為什么需要AOP 393
5.4.2 使用AspectJ實(shí)現(xiàn)AOP 394
5.4.3 AOP的基本概念 401
5.4.4 Spring的AOP支持 402
5.4.5 基于注解的“零配置”方式 403
5.4.6 基于XML配置文件的管理方式 418
5.5 Spring的緩存機(jī)制 424
5.5.1 啟用Spring緩存 425
5.5.2 使用@Cacheable執(zhí)行緩存 427
5.5.3 使用@CacheEvict清除緩存數(shù)據(jù) 431
5.6 Spring的事務(wù) 433
5.6.1 Spring支持的事務(wù)策略 433
5.6.2 使用XML Schema配置事務(wù)策略 436
5.6.3 使用@Transactional 442
5.7 Spring整合MyBatis 443
5.7.1 整合MyBatis的關(guān)鍵點(diǎn)及快速入門 443
5.7.2 配置SqlSessionFactory 448
5.7.3 通過工廠Bean配置Mapper組件 449
5.7.4 通過掃描自動(dòng)配置Mapper組件 450
5.7.5 基于SqlSession實(shí)現(xiàn)DAO組件 452
5.7.6 繼承SqlSessionDaoSupport實(shí)現(xiàn)DAO組件 455
5.7.7 事務(wù)管理 457
5.8 本章小結(jié) 458
第6章 Spring MVC的基礎(chǔ)用法 459
6.1 MVC概述 460
6.1.1 MVC模式及其優(yōu)勢 460
6.1.2 Spring MVC與Struts 2的區(qū)別 461
6.2 Spring MVC入門 463
6.2.1 在Web應(yīng)用中啟動(dòng)Spring容器 463
6.2.2 配置核心控制器 466
6.2.3 開發(fā)控制器 468
6.2.4 提供視圖資源 470
6.2.5 使用Eclipse開發(fā)Spring MVC應(yīng)用 471
6.3 Spring MVC的流程 472
6.3.1 Spring MVC應(yīng)用的開發(fā)步驟 472
6.3.2 Spring MVC的運(yùn)行流程 474
6.3.3 DispatcherServlet詳解 475
6.3.4 mvc:annotation-driven詳解 480
6.4 靜態(tài)資源處理 481
6.4.1 靜態(tài)資源映射 481
6.4.2 配置默認(rèn)Servlet 483
6.5 視圖解析器 485
6.5.1 UrlBasedViewResolver的功能與用法 486
6.5.2 InternalResourceViewResolver的功能與用法 491
6.5.3 XmlViewResolver及視圖解析器的鏈?zhǔn)教幚?492
6.5.4 ResourceBundleViewResolver的功能與用法 496
6.5.5 BeanNameViewResolver的功能與用法 497
6.5.6 重定向視圖 499
6.5.7 將數(shù)據(jù)傳給重定向目標(biāo) 500
6.5.8 ContentNegotiatingViewResolver的功能與用法 503
6.6 請(qǐng)求映射與參數(shù)處理 510
6.6.1 HandlerMapping與處理映射 510
6.6.2 SimpleUrlHandlerMapping的功能與用法 511
6.6.3 @RequestMapping注解及其變體 512
6.6.4 處理方法允許的返回值類型 515
6.6.5 @RequestParam注解與MultiValueMap 516
6.6.6 使用@PathVariable獲取路徑變量的值 520
6.6.7 使用@PathVariable處理正則 表達(dá)式 523
6.6.8 路徑模式 524
6.6.9 使用@MatrixVariable處理Matrix變量 526
6.6.10 使用@RequestHeader獲取請(qǐng)求頭的值 529
6.6.11 異步處理 530
6.6.12 使用DeferredResult支持異步處理 534
6.6.13 使用@ModelAttribute修飾方法本身 536
6.6.14 使用@ModelAttribute修飾方法參數(shù) 539
6.7 將數(shù)據(jù)傳給視圖頁面 541
6.7.1 Model、ModelMap和RedirectAttributes 541
6.7.2 使用@SessionAttributes添加session屬性 542
6.8 RESTful服務(wù)支持 544
6.8.1 RESTful簡介 544
6.8.2 @RequestBody與@ResponseBody注解 546
6.8.3 HttpMessageConverter與消息轉(zhuǎn)換 550
6.8.4 轉(zhuǎn)換XML數(shù)據(jù) 553
6.8.5 使用@RestController修飾RESTful控制器 557
6.8.6 @CrossOrigin注解與跨域請(qǐng)求 557
6.9 訪問Servlet API相關(guān)數(shù)據(jù) 561
6.9.1 處理方法可接受的形參類型 561
6.9.2 使用@RequestAttribute獲取請(qǐng)求屬性 562
6.9.3 使用@SessionAttribute獲取session屬性 563
6.9.4 直接訪問Servlet API 566
6.9.5 使用WebRequest和NativeWebRequest偽訪問 567
6.9.6 使用@CookieValue獲取cookie值 569
6.9.7 在處理方法中使用IO流 571
6.10 本章小結(jié) 573
第7章 深入使用Spring MVC 574
7.1 國際化 575
7.1.1 國際化到底怎么做 575
7.1.2 根據(jù)瀏覽器請(qǐng)求頭確定Locale 577
7.1.3 根據(jù)session確定Locale 582
7.1.4 根據(jù)cookie值確定Locale 586
7.2 異常處理 587
7.2.1 Spring MVC異常處理 587
7.2.2 傳統(tǒng)的異常處理機(jī)制 590
7.2.3 使用@ResponseStatus修飾異常類 594
7.2.4 使用@ExceptionHandler修飾異常 處理方法 596
7.2.5 使用@ControllerAdvice定義異常Aspect 599
7.2.6 使用@RestControllerAdvice定義異常Aspect 600
7.3 標(biāo)簽庫 602
7.3.1 form標(biāo)簽與普通表單域標(biāo)簽 602
7.3.2 radiobutton和radiobuttons標(biāo)簽 605
7.3.3 checkbox和checkboxes標(biāo)簽 607
7.3.4 select和option、options標(biāo)簽 610
7.3.5 htmlEscape和escapeBody標(biāo)簽 612
7.3.6 url和param標(biāo)簽 613
7.4 類型轉(zhuǎn)換與綁定 615
7.4.1 BeanWrapper簡介 616
7.4.2 PropertyEditor與內(nèi)置實(shí)現(xiàn)類 618
7.4.3 自定義PropertyEditor 619
7.4.4 使用WebBindingInitializer注冊(cè)全局PropertyEditor 621
7.4.5 使用ConversionService執(zhí)行轉(zhuǎn)換 623
7.4.6 處理轉(zhuǎn)換錯(cuò)誤 626
7.5 格式化 629
7.5.1 使用格式化器 630
7.5.2 使用FormatterRegistrar注冊(cè) 格式化器 633
7.6 數(shù)據(jù)校驗(yàn) 634
7.6.1 使用Validation執(zhí)行校驗(yàn) 634
7.6.2 基于JSR 303執(zhí)行校驗(yàn) 638
7.7 文件上傳與下載 641
7.7.1 使用MultipartFile處理文件上傳 641
7.7.2 基于Commons FileUpload組件 上傳文件 646
7.7.3 使用@RequestPart注解 647
7.7.4 文件下載 650
7.7.5 下載前的授權(quán)控制 652
7.8 攔截器 653
7.9 SSM整合開發(fā) 656
7.9.1 搭建項(xiàng)目 657
7.9.2 開發(fā)Mapper組件 659
7.9.3 開發(fā)Service組件 660
7.9.4 控制器與視圖 661
7.10 本章小結(jié) 666
第8章 簡單工作流系統(tǒng) 667
8.1 項(xiàng)目背景及系統(tǒng)結(jié)構(gòu) 668
8.1.1 應(yīng)用背景 668
8.1.2 系統(tǒng)功能介紹 668
8.1.3 相關(guān)技術(shù)介紹 669
8.1.4 系統(tǒng)結(jié)構(gòu) 670
8.1.5 系統(tǒng)的功能模塊 670
8.2 領(lǐng)域?qū)ο髮?671
8.2.1 設(shè)計(jì)領(lǐng)域?qū)ο?671
8.2.2 創(chuàng)建領(lǐng)域?qū)ο箢?672
8.3 實(shí)現(xiàn)Mapper(DAO)層 677
8.3.1 Mapper組件的定義 677
8.3.2 實(shí)現(xiàn)Mapper組件 681
8.3.3 部署Mapper層 685
8.4 實(shí)現(xiàn)Service層 686
8.4.1 業(yè)務(wù)邏輯組件的設(shè)計(jì) 686
8.4.2 實(shí)現(xiàn)業(yè)務(wù)邏輯組件 687
8.4.3 事務(wù)管理 692
8.4.4 部署業(yè)務(wù)邏輯組件 693
8.5 實(shí)現(xiàn)任務(wù)的自動(dòng)調(diào)度 693
8.5.1 使用Quartz 693
8.5.2 在Spring中使用Quartz 698
8.6 實(shí)現(xiàn)系統(tǒng)Web層 700
8.6.1 配置核心控制器和啟動(dòng)Spring容器 700
8.6.2 控制器的處理順序 701
8.6.3 員工登錄 702
8.6.4 進(jìn)入打卡 705
8.6.5 處理打卡 707
8.6.6 進(jìn)入申請(qǐng) 708
8.6.7 提交申請(qǐng) 709
8.6.8 使用攔截器完成權(quán)限管理 710
8.7 本章小結(jié) 712