Java EE互聯網輕量級框架整合開發— —SSM框架(Spring MVC+Spring+MyBatis)和Redis實現 ( 簡體 字) |
作者:楊開振等 | 類別:1. -> 程式設計 -> JAVA -> J2EE 2. -> 程式設計 -> JAVA -> Spring |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 47185 詢問書籍請說出此書號!【缺書】 NT售價: 595 元 |
出版日:7/1/2017 |
頁數:688 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121318474 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:隨著移動互聯網的興起以及手機和平板電腦的普及,Java開發方向發生了很大變化,漸漸從管理系統走向了互聯網系統。互聯網系統的要求是大數據、高并發、高響應,而非管理系統的少數據、低并發和緩慢響應。為順應技術發展趨勢,2016年春季筆者寫了一本關于MyBatis的著作《深入淺出MyBatis技術原理與實戰》,作為國內第一本關于MyBatis技術的著作,該書受到了業內的廣泛肯定。與此同時,電子工業出版社編輯汪達文給了我一個很好的建議,她建議寫一本Java合集,這更貼近開發工作的實際需求。在移動互聯網興起的時代,Spring+Spring MVC+MyBatis(SSM)的Java組合已經成為時代的主流,伴隨著NoSQL(緩存)的廣泛應用,Redis成了主要的NoSQL工具,這些都是當今移動互聯網最為流行的技術,于是筆者打算竭盡所能寫一本SSM+Redis的合集,這就是本書創作的緣起。 移動互聯網的新要求 ? 高并發:舉個例子,大公司企業ERP應用,有1萬名員工使用,同時在線的用戶可能只有數百人,而操作一個業務的同一個數據的可能只有幾個人,其系統一般不會存在高并發的壓力,使用傳統程序和數據庫完全可以應付。在互聯網中一件熱門的商品,比如新版小米手機,可能剛一上市就有成千上萬的請求到達服務器,要求瞬間執行數以萬計的數據操作,對性能要求高,操作不當容易造成網站癱瘓,引發網站的生存危機。 ? 高響應:企業管理系統可以緩慢處理一些業務,而在高并發的互聯網系統中,卻不可以,按照互聯網的要求一般以5秒為上限,超過5秒后響應,用戶體驗不好,從而影響用戶忠誠度,而這些往往需要在高并發和大數據量的場景下實現。 ? 數據一致性:由于高并發,多個線程對同一數據同時訪問,需要保證數據的一致性,比如電商網站的金額、商品庫存不能出錯,還要保證其性能不能太差,這是在管理系統中不會出現的場景。 ? 技術復雜化:在互聯網中流行許多新技術,比如常見的NoSQL(Redis、MongoDB),又如MQ、RPC框架、ZooKeeper、大數據、分布式等技術。 為什么選擇SSM框架+Redis的開發模式 首先,Struts2框架和Spring結合,多年來改變不了臃腫的老毛病,更為嚴重的是近年來多次出現的漏洞問題,使得其名聲和使用率大降。這個時候Spring MVC框架成了新一代MVC框架的主流。它原生于Spring框架,可以無縫對接Spring的核心技術。與Struts不同,它的流程模塊化,沒有那么多臃腫的類,所以互聯網應用的框架大部分使用的是Spring MVC。 其次,目前企業的Java應用中,Spring框架是必須的,Spring的核心是IoC(控制反轉),它是一個大容器,方便組裝和管理各類系統內外部資源,同時支持AOP(面向切面編程),這是對面向對象的補充,目前廣泛用于日志和數據庫事務控制,減少了大量的重復代碼,使得程序更為清晰。因為Spring可以使模塊解耦,控制對象之間的協作,所以Spring框架是目前Java最為流行的框架,幾乎沒有之一。 最后,對于Hibernate而言,筆者感慨最多,在需要存儲過程或者復雜SQL時,它的映射關系幾乎完全用不上,所有的問題都需要自己敲代碼處理。作為全映射的框架,它的致命缺點是沒有辦法完全掌控數據庫的SQL,而優化SQL是高并發、高響應系統的必然要求,這是互聯網系統的普遍特性,所以Hibernate在互聯網系統中被排除了。而另一個持久層框架MyBatis,它需要編寫SQL、提供映射規則,不過它加入了動態SQL、自動映射、接口編程等功能使得它簡單易用,同時支持SQL優化、動態綁定,并滿足高并發和高響應的要求,所以它成為最流行的Java互聯網持久框架。 NoSQL的成功在于,首先它是基于內存的,也就是數據放在內存中,而不是像數據庫那樣把數據放在磁盤上,而內存的讀取速度是磁盤讀取速度的幾十倍到上百倍,所以NoSQL工具的速度遠比數據庫讀取速度要快得多,滿足了高響應的要求。即使NoSQL將數據放在磁盤中,它也是一種半結構化的數據格式,讀取到解析的復雜度遠比數據庫要簡單,這是因為數據庫存儲的是經過結構化、多范式等有復雜規則的數據,還原為內存結構的速度較慢。NoSQL在很大程度上滿足了高并發、快速讀/寫和響應的要求,所以它也是Java互聯網系統的利器。于是兩種NoSQL的工具Redis和MongoDB流行起來,尤其是Redis已經成為了主要的NoSQL工具,本書會詳細介紹它的常用方法。 基于以上原因,Spring+Spring MVC +MyBatis已經成了Java互聯網時代的主流框架,而Redis緩存已經成了主流的NoSQL技術,筆者愿意將自己所掌握的知識分享給大家,為目前奮斗在SSM和Redis戰線上的同行們奉獻一本有價值的參考書,給一些準備進入這個行業的新手一定的幫助和指導。 本書的特點 全書具備五大特點。 ? 實用性:全書內容來自于筆者多年互聯網實踐開發工作,理論結合實際應用。 ? 理論性:突出基礎理念,結合設計模式闡述框架的實現原理和應用理念,讓讀者知其然也知其所以然。 ? 與時俱進:介紹最新框架技術,與當前互聯網企業保持同步,比如全注解搭建SSM框架和Redis的應用,使得讀者能夠把最新技術應用到實際的工作中去。 ? 突出熱點和重點:著重介紹MyBatis實踐應用,Spring數據庫及事務應用,使用Spring介紹Redis實踐應用、高并發和鎖等互聯網熱門技術的熱點和重點。 ? 性能要求突出:這是移動互聯網的要求,因為互聯網面對大數據和高并發,體現互聯網企業真實需要。 本書的內容安排 本書基于一線企業的實際應用要求,介紹了Java互聯網最流行的框架技術,內容全面,以實際應用為導向,取舍明確,尤其對于技術的重點、難點解釋得深入淺出,案例豐富,具體來說本書在體例上分為六大部分。 第1部分,首先講解基礎,讓讀者對SSM框架里的每一門技術的主要作用有所了解。然后介紹SSM框架的主要設計模式,它們有助于從底層深入理解框架。 第2部分,講解MyBatis的基礎應用,包括其主要組成、配置、映射器、動態SQL,并且深入MyBatis的底層運行原理和插件,詳細討論它們的高級應用。 第3部分,講解Spring IoC和Spring AOP。掌握Spring如何通過IoC管理資源,然后通過設計模式討論AOP的實現原理及其使用方法、實踐。討論Spring對數據庫的支持,如何整合MyBatis,并且著重討論了Spring數據庫事務的相關內容,包括數據庫隔離級別和傳播行為的應用。 第4部分,講解Spring MVC主要的流程、HandlerMapping的應用、控制器Controller、處理適配器(HandlerAdapter)、視圖和視圖解析器,然后討論傳遞參數、注解、數據校驗、消息轉換和國際化等應用。 第5部分,掌握NoSQL的優勢和應用方法,掌握Redis的常用數據類型和主要命令,以及一些基本的特性(比如事務)和用法,并教會你在Java和Spring環境中使用它。 第6部分,SSM框架+Redis的實戰,通過全注解的方式搭建SSM框架,講解Redis應用,并展現了互聯網的核心問題——高并發和鎖的問題。介紹了通過悲觀鎖、樂觀鎖和Redis Lua語言方案來解決高并發和鎖的問題。 和讀者的約定 為了方便論述,我們進行以下約定。 ? import語句一般不出現在代碼中,主要是為了縮減篇幅,可以使用IDE自動導入,除非是筆者認為有必要的場景、一些重要的實例它才會出現在代碼中。 ? 本書的例子大部分使用附錄A中的數據模型,附錄A中有基本的論述和對應的SQL語句。 ? 對于普通的POJO,筆者大部分都會以“/**setter and getter**/”代替POJO的setter和getter方法,類似這樣:
public class Role { private Long id; private String roleName; private String note; /**setter and getter**/ }
讀者可以用IDE生成這些屬性的setter和getter方法,這樣做主要是為了節省篇幅,突出重點,也有利于讀者的閱讀。當然在一些特別重要的和使用廣泛的場景,比如MyBatis入門、SSM框架整合等場景才會給出全量代碼,以便讀者進行編碼學習。 ? 在默認情況下,筆者使用互聯網最常用的MySQL數據庫,當使用其他數據庫時,筆者會事先加以說明。 ? 本書采用MyBatis的版本是3.4.1,Spring的版本是4.3.2,Redis的版本是3.2.4,在實踐的過程中讀者需要注意版本之間的差異。 本書的目標讀者 閱讀本書,讀者要掌握以下知識:Java編程基礎、Java EE基礎(JSP、Servlet等)及數據庫基礎知識(本書以互聯網數據庫MySQL為主)。本書以互聯網企業最廣泛使用的技術框架為中心講解Java EE技術,從入門講解到實踐,適合有志于從事Java EE開發的各類人員閱讀,通過學習本書能夠有效提高技術能力,并且將知識點應用到實際的企業工作當中去。本書也可以作為大中專院校計算機專業的教材,幫助在校學生學習企業實際應用,當然你也可以把本書當作一本工作手冊進行查閱。 致謝 本書的成功出版,要感謝電子工業出版社的編輯們,沒有他們的辛苦付出,絕對沒有本書的成功出版,尤其是編輯汪達文,她啟發我創作本書,并且在寫作過程中給了我很多的建議和幫助,她為此付出了很多時間和精力。 在撰寫本書的過程中,得到了我的師兄周吉文的大力支持,他統稿了全書,也幫助我編寫了部分章節的內容;同時還得到梁華輝和譚茂華兩位好友的協助,他們以過硬的技術為我排除了不少錯誤,同時也給了我很多很好的建議,并撰寫了一些很好的實例;還要感謝我的姐姐楊堅,她撰寫了部分內容,并對書中那些晦澀難懂的句子進行了潤色,在此對他們的辛苦付出表示最誠摯的感謝。 互聯網技術博大精深,涉及的技術門類特別多,甚至跨行業也特別頻繁,技術更新較快。撰寫本書時筆者也遇到了一些困難,涉及的知識十分廣泛,對技術要求也更高,出錯的概率也大大增加,正如沒有完美的程序一樣,也沒有完美的書,一切都需要一個完善的過程,所以尊敬的讀者,如果對本書有任何意見或建議,歡迎發送郵件(ykzhen2013@163.com),或者在博客(http://blog.csdn.net/ykzhen2015)上留言,以便于本書的修訂。
楊開振 2017年6月 |
內容簡介:隨著移動互聯網的興起,以Java技術為后臺的互聯網技術占據了市場的主導地位,而在Java互聯網后臺開發中,SSM框架(Spring+Spring MVC+MyBatis)成為了主要架構,本書以此為焦點從入門到實際工作要求講述了SSM框架的技術應用;與此同時,為了提高系統性能,NoSQL(尤其是Redis)在互聯網系統中已經廣泛使用,為了適應這個變化,本書通過Spring講解了有關Redis的技術應用,這樣更加貼近實際學習和工作的需要。本書主要分為6個部分,第1部分對Java互聯網的框架和主要涉及的模式做初步簡介;第2部分講述MyBatis技術;第3部分講述Spring基礎(包括IoC、AOP和數據庫應用),重點講解Spring數據庫事務應用,以滿足互聯網企業的應用要求;第4部分,講述Spring MVC框架;第5部分,通過Spring技術的應用,講解Redis技術;第6部分,講解SSM+Redis實踐應用,通過互聯網高并發如搶票、搶紅包等場景,使用全注解的方式講解SSM框架的整合,以及高并發與鎖的應用和系統性能優化。本書結合企業的實際需求,從原理到實踐全面講解SSM+Redis技術應用,無論你是Java程序員、SSM應用和研究人員,還是Redis應用人員、互聯網開發人員,都可以從本書中收獲知識。 |
目錄:第1部分 入門和技術基礎 第1章 認識SSM框架和Redis 2 1.1 Spring框架 2 1.1.1 Spring IoC簡介 2 1.1.2 Spring AOP 4 1.2 MyBatis簡介 6 1.2.1 Hibernate簡介 7 1.2.2 MyBatis 8 1.2.3 Hibernate和MyBatis的區別 11 1.3 Spring MVC簡介 11 1.4 最流行的NoSQL——Redis 12 1.5 SSM+Redis結構框圖及概述 13 第2章 Java設計模式 15 2.1 Java反射技術 15 2.1.1 通過反射構建對象 15 2.1.2 反射方法 17 2.1.3 實例 18 2.2 動態代理模式和責任鏈模式 19 2.2.1 JDK動態代理 20 2.2.2 CGLIB動態代理 22 2.2.3 攔截器 24 2.2.4 責任鏈模式 28 2.3 觀察者(Observer)模式 30 2.3.1 概述 31 2.3.2 實例 32 2.4 工廠模式和抽象工廠模式 35 2.4.1 普通工廠(Simple Factory)模式 35 2.4.2 抽象工廠(Abstract Factory)模式 36 2.5 建造者(Builder)模式 38 2.5.1 概述 38 2.5.2 Builder模式實例 39 2.6 總結 41 第2部分 互聯網持久框架——MyBatis 第3章 認識MyBatis核心組件 44 3.1 持久層的概念和MyBatis的特點 44 3.2 準備MyBatis環境 45 3.3 MyBatis的核心組件 46 3.4 SqlSessionFactory(工廠接口) 47 3.4.1 使用XML構建SqlSessionFactory 48 3.4.2 使用代碼創建SqlSessionFactory 50 3.5 SqlSession 50 3.6 映射器 51 3.6.1 用XML實現映射器 52 3.6.2 注解實現映射器 53 3.6.3 SqlSession發送SQL 54 3.6.4 用Mapper接口發送SQL 55 3.6.5 對比兩種發送SQL方式 55 3.7 生命周期 55 3.7.1 SqlSessionFactoryBuilder 56 3.7.2 SqlSessionFactory 56 3.7.3 SqlSession 56 3.7.4 Mapper 56 3.8 實例 57 第4章 MyBatis配置 63 4.1 概述 63 4.2 properties屬性 64 4.2.1 property子元素 64 4.2.2 使用properties文件 65 4.2.3 使用程序傳遞方式傳遞參數 66 4.2.4 總結 66 4.3 settings設置 66 4.4 typeAliases別名 69 4.4.1 系統定義別名 69 4.4.2 自定義別名 72 4.5 typeHandler類型轉換器 72 4.5.1 系統定義的typeHandler 73 4.5.2 自定義typeHandler 78 4.5.3 枚舉typeHandler 81 4.5.4 文件操作 86 4.6 ObjectFactory(對象工廠) 87 4.7 插件 89 4.8 environments(運行環境) 89 4.8.1 transactionManager(事務管理器) 90 4.8.2 environment數據源環境 92 4.9 databaseIdProvider數據庫廠商標識 95 4.9.1 使用系統默認的databaseIdProvider 95 4.9.2 不使用系統規則 98 4.10 引入映射器的方法 99 第5章 映射器 102 5.1 概述 102 5.2 select元素——查詢語句 103 5.2.1 簡單的select元素的應用 104 5.2.2 自動映射和駝峰映射 105 5.2.3 傳遞多個參數 106 5.2.4 使用resultMap映射結果集 109 5.2.5 分頁參數RowBounds 110 5.3 insert元素——插入語句 112 5.3.1 概述 112 5.3.2 簡單的insert語句的應用 113 5.3.3 主鍵回填 113 5.3.4 自定義主鍵 114 5.4 update元素和delete元素 114 5.5 sql元素 115 5.6 參數 116 5.6.1 概述 116 5.6.2 存儲過程參數支持 117 5.6.3 特殊字符串的替換和處理(#和$) 117 5.7 resultMap元素 118 5.7.1 resultMap元素的構成 118 5.7.2 使用map存儲結果集 119 5.7.3 使用POJO存儲結果集 119 5.8 級聯 120 5.8.1 MyBatis中的級聯 121 5.8.2 建立POJO 124 5.8.3 配置映射文件 127 5.8.4 N+1問題 133 5.8.5 延遲加載 133 5.8.6 另一種級聯 137 5.8.7 多對多級聯 140 5.9 緩存 143 5.9.1 一級緩存和二級緩存 144 5.9.2 緩存配置項、自定義和引用 147 5.10 存儲過程 149 5.10.1 IN和OUT參數存儲過程 150 5.10.2 游標的使用 152 第6章 動態SQL 155 6.1 概述 155 6.2 if元素 156 6.3 choose、when、otherwise元素 156 6.4 trim、where、set元素 157 6.5 foreach元素 159 6.6 用test的屬性判斷字符串 159 6.7 bind元素 160 第7章 MyBatis的解析和運行原理 162 7.1 構建SqlSessionFactory過程 163 7.1.1 構建Configuration 165 7.1.2 構建映射器的內部組成 165 7.1.3 構建SqlSessionFactory 167 7.2 SqlSession運行過程 168 7.2.1 映射器(Mapper)的動態代理 168 7.2.2 SqlSession下的四大對象 172 7.2.3 SqlSession運行總結 179 第8章 插件 181 8.1 插件接口 181 8.2 插件的初始化 182 8.3 插件的代理和反射設計 183 8.4 常用的工具類——MetaObject 186 8.5 插件開發過程和實例 187 8.5.1 確定需要攔截的簽名 187 8.5.2 實現攔截方法 189 8.5.3 配置和運行 191 8.5.4 插件實例——分頁插件 192 8.6 總結 205 第3部分 Spring基礎 第9章 Spring IoC的概念 208 9.1 Spring的概述 208 9.2 Spring IoC概述 210 9.2.1 主動創建對象 211 9.2.2 被動創建對象 213 9.2.3 Spring IoC闡述 214 9.3 Spring IoC容器 215 9.3.1 Spring IoC容器的設計 215 9.3.2 Spring IoC容器的初始化和依賴注入 218 9.3.3 Spring Bean的生命周期 219 9.4 小結 223 第10章 裝配Spring Bean 224 10.1 依賴注入的3種方式 224 10.1.1 構造器注入 224 10.1.2 使用setter注入 225 10.1.3 接口注入 226 10.2 裝配Bean概述 227 10.3 通過XML配置裝配Bean 228 10.3.1 裝配簡易值 228 10.3.2 裝配集合 229 10.3.3 命名空間裝配 233 10.4 通過注解裝配Bean 235 10.4.1 使用@Component裝配Bean 236 10.4.2 自動裝配——@Autowired 239 10.4.3 自動裝配的歧義性(@Primary和@Qualifier) 241 10.4.4 裝載帶有參數的構造方法類 244 10.4.5 使用@Bean裝配Bean 245 10.4.6 注解自定義Bean的初始化和銷毀方法 245 10.5 裝配的混合使用 246 10.6 使用Profile 249 10.6.1 使用注解@Profile配置 249 10.6.2 使用XML定義Profile 250 10.6.3 啟動Profile 252 10.7 加載屬性(properties)文件 254 10.7.1 使用注解方式加載屬性文件 254 10.7.2 使用XML方式加載屬性文件 257 10.8 條件化裝配Bean 258 10.9 Bean的作用域 259 10.10 使用Spring表達式(Spring EL) 261 10.10.1 Spring EL相關的類 261 10.10.2 Bean的屬性和方法 264 10.10.3 使用類的靜態常量和方法 265 10.10.4 Spring EL運算 265 第11章 面向切面編程 267 11.1 一個簡單的約定游戲 267 11.1.1 約定規則 267 11.1.2 讀者的代碼 269 11.1.3 筆者的代碼 271 11.2 Spring AOP的基本概念 274 11.2.1 AOP的概念和使用原因 274 11.2.2 面向切面編程的術語 278 11.2.3 Spring對AOP的支持 280 11.3 使用@AspectJ注解開發Spring AOP 280 11.3.1 選擇切點 281 11.3.2 創建切面 281 11.3.3 連接點 283 11.3.4 測試AOP 285 11.3.5 環繞通知 287 11.3.6 織入 289 11.3.7 給通知傳遞參數 289 11.3.8 引入 290 11.4 使用XML配置開發Spring AOP 293 11.4.1 前置通知、后置通知、返回通知和異常通知 294 11.4.2 環繞通知 296 11.4.3 給通知傳遞參數 297 11.4.4 引入 298 11.5 經典Spring AOP應用程序 299 11.6 多個切面 301 11.7 小結 306
第12章 Spring和數據庫編程 307 12.1 傳統的JDBC代碼的弊端 307 12.2 配置數據庫資源 309 12.2.1 使用簡單數據庫配置 309 12.2.2 使用第三方數據庫連接池 310 12.2.3 使用JNDI數據庫連接池 310 12.3 JDBC代碼失控的解決方案——jdbcTemplate 311 12.3.1 jdbcTemplate的增、刪、查、改 312 12.3.2 執行多條SQL 314 12.3.3 jdbcTemplate的源碼分析 315 12.4 MyBatis-Spring項目 317 12.4.1 配置SqlSessionFactoryBean 318 12.4.2 SqlSessionTemplate組件 322 12.4.3 配置MapperFactoryBean 324 12.4.4 配置MapperScannerConfigurer 324 12.4.5 測試Spring+MyBatis 327 第13章 深入Spring數據庫事務管理 330 13.1 Spring數據庫事務管理器的設計 331 13.1.1 配置事務管理器 333 13.1.2 用Java配置方式實現Spring數據庫事務 334 13.2 編程式事務 336 13.3 聲明式事務 337 13.3.1 Transactional的配置項 337 13.3.2 使用XML進行配置事務管理器 339 13.3.3 事務定義器 340 13.3.4 聲明式事務的約定流程 341 13.4 數據庫的相關知識 343 13.4.1 數據庫事務ACID特性 343 13.4.2 丟失更新 343 13.4.3 隔離級別 344 13.5 選擇隔離級別和傳播行為 347 13.5.1 選擇隔離級別 347 13.5.2 傳播行為 348 13.6 在Spring+MyBatis組合中使用事務 350 13.7 @Transactional的自調用失效問題 358 13.8 典型錯誤用法的剖析 363 13.8.1 錯誤使用Service 363 13.8.2 過長時間占用事務 364 13.8.3 錯誤捕捉異常 366 第4部分 Spring MVC框架 第14章 Spring MVC的初始化和流程 370 14.1 MVC設計概述 370 14.1.1 Spring MVC的架構 372 14.1.2 Spring MVC組件與流程 372 14.1.3 Spring MVC入門的實例 374 14.2 Spring MVC初始化 378 14.2.1 初始化Spring IoC上下文 378 14.2.2 初始化映射請求上下文 379 14.2.3 使用注解配置方式初始化 386 14.3 Spring MVC開發流程詳解 389 14.3.1 配置@RequestMapping 390 14.3.2 控制器的開發 391 14.3.3 視圖渲染 396 14.4 小結 398 第15章 深入Spring MVC組件開發 399 15.1 控制器接收各類請求參數 399 15.1.1 接收普通請求參數 401 15.1.2 使用@RequestParam注解獲取參數 402 15.1.3 使用URL傳遞參數 403 15.1.4 傳遞JSON參數 404 15.1.5 接收列表數據和表單序列化 406 15.2 重定向 409 15.3 保存并獲取屬性參數 412 15.3.1 注解@RequestAttribute 412 15.3.2 注解@SessionAttribute和注解@SessionAttributes 414 15.3.3 注解@CookieValue和注解@RequestHeader 417 15.4 攔截器 417 15.4.1 攔截器的定義 418 15.4.2 攔截器的執行流程 419 15.4.3 開發攔截器 419 15.4.4 多個攔截器執行的順序 421 15.5 驗證表單 424 15.5.1 使用JSR 303注解驗證輸入內容 425 15.5.2 使用驗證器 429 15.6 數據模型 432 15.7 視圖和視圖解析器 434 15.7.1 視圖 434 15.7.2 視圖解析器 436 15.7.3 實例:Excel視圖的使用 438 15.8 上傳文件 441 15.8.1 MultipartResolver概述 442 15.8.2 提交上傳文件表單 446 第16章 Spring MVC高級應用 449 16.1 Spring MVC的數據轉換和格式化 449 16.1.1 HttpMessageConverter和JSON消息轉換器 451 16.1.2 一對一轉換器(Converter) 455 16.1.3 數組和集合轉換器GenericConverter 458 16.1.4 使用格式化器(Formatter) 463 16.2 為控制器添加通知 466 16.3 處理異常 470 16.4 國際化 471 16.4.1 概述 471 16.4.2 MessageSource接口 473 16.4.3 CookieLocaleResolver和SessionLocaleResolver 475 16.4.4 國際化攔截器(LocaleChangeInterceptor) 477 16.4.5 開發國際化 477 第5部分 Redis應用 第17章 Redis概述 480 17.1 Redis在Java Web中的應用 481 17.1.1 緩存 481 17.1.2 高速讀/寫場合 482 17.2 Redis基本安裝和使用 483 17.2.1 在Windows下安裝Redis 483 17.2.2 在Linux下安裝Redis 485 17.3 Redis的Java API 486 17.3.1 在Java程序中使用Redis 487 17.3.2 在Spring中使用Redis 488 17.4 簡介Redis的6種數據類型 494 17.5 Redis和數據庫的異同 495 第18章 Redis數據結構常用命令 496 18.1 Redis數據結構——字符串 497 18.2 Redis數據結構——哈希 502 18.3 Redis數據結構——鏈表(linked-list) 506 18.4 Redis數據結構——集合 513 18.5 Redis數據結構——有序集合 516 18.5.1 Redis基礎命令 516 18.5.2 spring-data-redis對有序集合的封裝 518 18.5.3 使用Spring操作有序集合 520 18.6 基數——HyperLogLog 522 18.7 小結 524 第19章 Redis的一些常用技術 525 19.1 Redis的基礎事務 526 19.2 探索Redis事務回滾 528 19.3 使用watch命令監控事務 529 19.4 流水線(pipelined) 532 19.5 發布訂閱 534 19.6 超時命令 538 19.7 使用Lua語言 540 19.7.1 執行輸入Lua程序代碼 541 19.7.2 執行Lua文件 544 19.8 小結 547 第20章 Redis配置 548 20.1 Redis基礎配置文件 548 20.2 Redis備份(持久化) 549 20.3 Redis內存回收策略 552 20.4 復制 553 20.4.1 主從同步基礎概念 553 20.4.2 Redis主從同步配置 554 20.4.3 Redis主從同步的過程 555 20.5 哨兵(Sentinel)模式 556 20.5.1 哨兵模式概述 557 20.5.2 搭建哨兵模式 558 20.5.3 在Java中使用哨兵模式 559 20.5.4 哨兵模式的其他配置項 563 第21章 Spring緩存機制和Redis的結合 565 21.1 Redis和數據庫的結合 565 21.1.1 Redis和數據庫讀操作 566 21.1.2 Redis和數據庫寫操作 567 21.2 使用Spring緩存機制整合Redis 568 21.2.1 準備測試環境 568 21.2.2 Spring的緩存管理器 573 21.2.3 緩存注解簡介 575 21.2.4 注解@Cacheable和@CachePut 576 21.2.5 注解@CacheEvict 580 21.2.6 不適用緩存的方法 581 21.2.7 自調用失效問題 582 21.3 RedisTemplate的實例 582 第6部分 SSM框架+Redis實踐應用 第22章 高并發業務 586 22.1 互聯系統應用架構基礎分析 586 22.2 高并發系統的分析和設計 588 22.2.1 有效請求和無效請求 588 22.2.2 系統設計 590 22.2.3 數據庫設計 591 22.2.4 動靜分離技術 593 22.2.5 鎖和高并發 594 22.3 搭建搶紅包開發環境和超發現象 595 22.3.1 搭建Service層和DAO層 595 22.3.2 使用全注解搭建SSM開發環境 602 22.3.3 開發控制器和超發現象測試 609 22.4 悲觀鎖 611 22.5 樂觀鎖 614 22.5.1 CAS原理概述 614 22.5.2 ABA問題 615 22.5.3 樂觀鎖實現搶紅包業務 616 22.5.4 樂觀鎖重入機制 618 22.6 使用Redis實現搶紅包 621 22.6.1 使用注解方式配置Redis 621 22.6.2 數據存儲設計 622 22.6.3 使用Redis實現搶紅包 627 22.7 各類方式的優缺點 631 附錄A 數據庫表模型 633 附錄B DispatcherServlet流程源碼分析 637 附錄C JSTL常用標簽 648 附錄D spring data redis項目分析 660 |
序: |