深入分析 Java Web 技術內幕 (修訂版)

許令波

立即出貨 (庫存 < 3)

買這商品的人也買了...

相關主題

商品描述

 

<內容簡介>

《深入分析Java Web技術內幕(修訂版)新增了淘 寶在無線端的應用實踐,包括:CDN動態加速、多終端化改造、多終端Session統一,以及在大流量的情況下,如何跨越性能、網絡和一個地區的電力瓶頸等內容,並提供了比較完整的解決方案。《深入分析Java Web技術內幕(修訂版)》主要圍繞Java Web相關技術從三方面全面、深入地進行了闡述。首先介紹前端知識,即在JavaWeb開發中涉及的一些基本知識,包括Web請求過程、HTTP、DNS技術和CDN技術。其次深入介紹了Java技術,包括I/O技術、中文編碼問題、Javac編譯原理、class文件結構解析、ClassLoader工作機制及JVM的內存管理等。最後介紹了Java服務端技術,主要包括Servlet、Session與Cookie、Tomcat與Jetty服務器、Spring容器、iBatis框架和Velocity框架等原理介紹,並介紹了服務端的一些優化技術。
《深入分析Java Web技術內幕(修訂版)》不僅介紹這些技術和框架的工作原理,而且結合示例來講解,通過通俗易懂的文字和豐富、生動的配圖,讓讀者充分並深入理解它們的內部工作原理,同時還結合了設計模式來介紹這些技術背後的架構思維。

 

<章節目錄>

第1章  深入Web請求過程 1
1.1  B/S網絡架構概述 2
1.2  如何發起一個請求 4
1.3  HTTP解析 6
1.3.1  查看HTTP信息的工具 8
1.3.2  瀏覽器緩存機制 9
1.4  DNS域名解析 12
1.4.1  DNS域名解析過程 12
1.4.2  跟蹤域名解析過程 15
1.4.3  清除緩存的域名 18
1.4.4  幾種域名解析方式 19
1.5  CDN工作機制 20
1.5.1  CDN架構 20
1.5.2  負載均衡 21
1.5.3  CDN動態加速 24
1.6  總結 25
第2章  深入分析Java I/O的工作機制 26
2.1  Java的I/O類庫的基本架構 26
2.1.1  基於字節的I/O操作接口 27
2.1.2  基於字符的I/O操作接口 28
2.1.3  字節與字符的轉化接口 29
2.2  磁盤I/O工作機制 30
2.2.1  幾種訪問文件的方式 30
2.2.2  Java訪問磁盤文件 34
2.2.3  Java序列化技術 35
2.3  網絡I/O工作機制 37
2.3.1  TCP狀態轉化 38
2.3.2  影響網絡傳輸的因素 40
2.3.3  Java Socket的工作機制 40
2.3.4  建立通信鏈路 41
2.3.5  數據傳輸 42
2.4  NIO的工作方式 42
2.4.1  BIO帶來的挑戰 42
2.4.2  NIO的工作機制 43
2.4.3  Buffer的工作方式 46
2.4.4  NIO的數據訪問方式 48
2.5  I/O調優 50
2.5.1  磁盤I/O優化 50
2.5.2  TCP網絡參數調優 51
2.5.3  網絡I/O優化 53
2.6  設計模式解析之適配器模式 57
2.6.1  適配器模式的結構 57
2.6.2  Java I/O中的適配器模式 58
2.7  設計模式解析之裝飾器模式 58
2.7.1  裝飾器模式的結構 59
2.7.2  Java I/O中的裝飾器模式 59
2.8  適配器模式與裝飾器模式的區別 60
2.9  總結 60
第3章  深入分析Java Web中的中文編碼問題 61
3.1  幾種常見的編碼格式 61
3.1.1  為什麽要編碼 61
3.1.2  如何“翻譯” 62
3.2  在Java中需要編碼的場景 64
3.2.1  在I/O操作中存在的編碼 64
3.2.2  在內存操作中的編碼 66
3.3  在Java中如何編解碼 67
3.3.1  按照ISO-8859-1編碼 69
3.3.2  按照GB2312編碼 70
3.3.3  按照GBK編碼 71
3.3.4  按照UTF-16編碼 71
3.3.5  按照UTF-8編碼 72
3.3.6  UTF-8編碼代碼片段 72
3.3.7  對幾種編碼格式的比較 74
3.4  在Java Web中涉及的編解碼 74
3.4.1  URL的編解碼 76
3.4.2  HTTP Header的編解碼 79
3.4.3  POST表單的編解碼 79
3.4.4  HTTP BODY的編解碼 80
3.5  在JS中的編碼問題 81
3.5.1  外部引入JS文件 81
3.5.2  JS的URL編碼 82
3.5.3  其他需要編碼的地方 84
3.6  常見問題分析 84
3.6.1  中文變成了看不懂的字符 84
3.6.2  一個漢字變成一個問號 85
3.6.3  一個漢字變成兩個問號 85
3.6.4  一種不正常的正確編碼 86
3.7  一種繁簡轉換的實現方式 87
3.8  總結 88
第4章  Javac編譯原理 89
4.1  Javac是什麽 90
4.2  Javac編譯器的基本結構 90
4.3  Javac工作原理分析 92
4.3.1  詞法分析器 93
4.3.2  語法分析器 100
4.3.3  語義分析器 105
4.3.4  代碼生成器 115
4.4  設計模式解析之訪問者模式 118
4.4.1  訪問者模式的結構 119
4.4.2  Javac中訪問者模式的實現 120
4.5  總結 121
第5章  深入class文件結構 122
5.1  JVM指令集簡介 122
5.1.1  與類相關的指令 124
5.1.2  方法的定義 125
5.1.3  屬性的定義 126
5.1.4  其他指令集 127
5.2  class文件頭的表示形式 135
5.3  常量池 139
5.3.1  UTF8常量類型 142
5.3.2  Fieldref、Methodref常量類型 143
5.3.3  Class常量類型 143
5.3.4  NameAndType常量類型 144
5.4  類信息 144
5.5  Fields和Methods定義 145
5.6  類屬性描述 149
5.7  Javap生成的class文件結構 150
5.7.1  LineNumberTable 152
5.7.2  LocalVariableTable 153
5.8  總結 155
第6章  深入分析ClassLoader工作機制 156
6.1  ClassLoader類結構分析 157
6.2  ClassLoader的等級加載機制 158
6.3  如何加載class文件 161
6.3.1  加載字節碼到內存 161
6.3.2  驗證與解析 163
6.3.3  初始化Class對象 163
6.4  常見加載類錯誤分析 163
6.4.1  ClassNotFoundException 163
6.4.2  NoClassDefFoundError 164
6.4.3  UnsatisfiedLinkError 165
6.4.4  ClassCastException 166
6.4.5  ExceptionInInitializerError 167
6.5  常用的ClassLoader分析 168
6.6  如何實現自己的ClassLoader 172
6.6.1  加載自定義路徑下的class文件 172
6.6.2  加載自定義格式的class文件 174
6.7  實現類的熱部署 176
6.8  Java應不應該動態加載類 178
6.9  總結 179
第7章  JVM體系結構與工作方式 180
7.1  JVM體系結構 180
7.1.1  何謂JVM 180
7.1.2  JVM體系結構詳解 183
7.2  JVM工作機制 185
7.2.1  機器如何執行代碼 185
7.2.2  JVM為何選擇基於棧的架構 186
7.2.3  執行引擎的架構設計 187
7.2.4  執行引擎的執行過程 188
7.2.5  JVM方法調用棧 193
7.3  總結 197
第8章  JVM內存管理 198
8.1  物理內存與虛擬內存 199
8.2  內核空間與用戶空間 200
8.3  在Java中哪些組件需要使用內存 201
8.3.1  Java堆 201
8.3.2  線程 201
8.3.3  類和類加載器 202
8.3.4  NIO 202
8.3.5  JNI 203
8.4  JVM內存結構 203
8.4.1  PC寄存器 204
8.4.2  Java棧 204
8.4.3  堆 205
8.4.4  方法區 205
8.4.5  運行時常量池 206
8.4.6  本地方法棧 206
8.5  JVM內存分配策略 206
8.5.1  通常的內存分配策略 207
8.5.2  Java中的內存分配詳解 207
8.6  JVM內存回收策略 212
8.6.1  靜態內存分配和回收 212
8.6.2  動態內存分配和回收 213
8.6.3  如何檢測垃圾 213
8.6.4  基於分代的垃圾收集算法 215
8.7  內存問題分析 224
8.7.1  GC日誌分析 224
8.7.2  堆快照文件分析 227
8.7.3  JVM Crash日誌分析 227
8.8  實例1 233
8.9  實例2 235
8.10  實例3 237
8.11  總結 242
第9章  Servlet工作原理解析 243
9.1  從Servlet容器說起 243
9.1.1  Servlet容器的啟動過程 244
9.1.2  Web應用的初始化工作 247
9.2  創建Servlet實例 249
9.2.1  創建Servlet對象 250
9.2.2  初始化Servlet 250
9.3  Servlet體系結構 252
9.4  Servlet如何工作 255
9.5  Servlet中的Listener 257
9.6  Filter如何工作 259
9.7  Servlet中的url-pattern 261
9.8  總結 262
第10章  深入理解Session與Cookie 263
10.1  理解Cookie 264
10.1.1  Cookie屬性項 264
10.1.2  Cookie如何工作 265
10.1.3  使用Cookie的限制 268
10.2  理解Session 269
10.2.1  Session與Cookie 269
10.2.2  Session如何工作 270
10.3  Cookie安全問題 273
10.4  分佈式Session框架 274
10.4.1  存在哪些問題 274
10.4.2  可以解決哪些問題 275
10.4.3  總體實現思路 275
10.5  Cookie壓縮 280
10.6  表單重覆提交問題 282
10.7  多終端Session統一 283
10.8  總結 285
第11章  Tomcat的系統架構與設計模式 286
11.1  Tomcat總體設計 286
11.1.1  Tomcat總體結構 287
11.1.2  Connector組件 293
11.1.3  Servlet容器Container 298
11.1.4  Tomcat中的其他組件 309
11.2  Tomcat中的設計模式 309
11.2.1  門面設計模式 309
11.2.2  觀察者設計模式 311
11.2.3  命令設計模式 313
11.2.4  責任鏈設計模式 314
11.3  總結 316
第12章  Jetty的工作原理解析 317
12.1  Jetty的基本架構 317
12.1.1  Jetty基本架構簡介 317
12.1.2  Handler的體系結構 319
12.2  Jetty的啟動過程 320
12.3  接受請求 321
12.3.1  基於HTTP工作 321
12.3.2  基於AJP工作 323
12.3.3  基於NIO方式工作 326
12.4  處理請求 327
12.5  與JBoss集成 330
12.6  與Tomcat的比較 331
12.6.1  架構比較 331
12.6.2  性能比較 332
12.6.3  特性比較 332
12.7  總結 333
第13章  Spring框架的設計理念與設計模式分析 334
13.1  Spring的骨骼架構 334
13.1.1  Spring的設計理念 335
13.1.2  核心組件如何協同工作 336
13.2  核心組件詳解 337
13.2.1  Bean組件 337
13.2.2  Context組件 339
13.2.3  Core組件 340
13.2.4  Ioc容器如何工作 342
13.3  Spring中AOP的特性詳解 352
13.3.1  動態代理的實現原理 352
13.3.2  Spring AOP如何實現 355
13.4  設計模式解析之代理模式 358
13.4.1  代理模式原理 358
13.4.2  Spring中代理模式的實現 358
13.5  設計模式解析之策略模式 361
13.5.1  策略模式原理 361
13.5.2  Spring中策略模式的實現 362
13.6  總結 362
第14章  Spring MVC的工作機制與設計模式 364
14.1  Spring MVC的總體設計 364
14.2  Control設計 369
14.2.1  HandlerMapping初始化 370
14.2.2  HandlerAdapter初始化 372
14.2.3  Control的調用邏輯 373
14.3  Model設計 374
14.4  View設計 375
14.5  框架設計的思考 377
14.5.1  為什麽需要框架 377
14.5.2  需要什麽樣的框架 377
14.5.3  框架設計原則 378
14.5.4 “指航燈” 378
14.5.5  最基本的原則 378
14.6  設計模式解析之模板模式 379
14.6.1  模板模式的結構 379
14.6.2  Spring MVC中的模板模式示例 379
14.7  總結 380
第15章  深入分析iBatis框架之系統架構與映射原理 381
15.1  iBatis框架主要的類層次結構 381
15.2  iBatis框架的設計策略 382
15.3  iBatis框架的運行原理 384
15.4  示例 386
15.5  iBatis對SQL語句的解析 388
15.6  數據庫字段映射到Java對象 389
15.7  示例運行的結果 391
15.8  設計模式解析之簡單工廠模式 391
15.8.1  簡單工廠模式的實現原理 391
15.8.2  iBatis中的簡單工廠模式示例 392
15.9  設計模式解析之工廠模式 393
15.9.1  工廠模式的實現原理 393
15.9.2  iBatis中的工廠模式示例 394
15.10  總結 395
第16章  Velocity工作原理解析 397
16.1  Velocity總體架構 398
16.2  JJTree渲染過程解析 401
16.2.1  #set語法 405
16.2.2  Velocity的方法調用 406
16.2.3  #if、#elseif和#else語法 409
16.2.4  #foreach語法 410
16.2.5  #parse語法 412
16.3  事件處理機制 413
16.4  常用優化技巧 416
16.4.1  減少樹的總節點數量 416
16.4.2  減少渲染耗時的節點數量 416
16.5  與JSP比較 417
16.5.1  JSP渲染機制 417
16.5.2  Velocity與JSP 423
16.6  設計模式解析之合成模式 423
16.6.1  合成模式的結構 423
16.6.2  Velocity中合成模式的實現 424
16.7  設計模式解析之解釋器模式 425
16.7.1  解釋器模式的結構 425
16.7.2  Velocity中解釋器模式的實現 426
16.8  總結 426
第17章  Velocity優化實踐 427
17.1  現實存在的問題 427
17.2  優化的理論基礎 428
17.2.1  程序語言的三角形結構 428
17.2.2  數據結構減少抽象化 429
17.2.3  簡單的程序覆雜化 429
17.2.4  減少翻譯的代價 430
17.2.5  變的轉化為不變的 430
17.3  一個高效的模板引擎實現思路 430
17.3.1  vm模板如何被編譯 432
17.3.2  方法調用的無反射優化 439
17.3.3  將字符輸出改成字節輸出 442
17.4  優化的成果 443
17.4.1  將char轉成byte 443
17.4.2  無反射執行 444
17.5  其他優化手段 445
17.6  總結 445
第18章  大瀏覽量系統的靜態化架構設計 446
18.1  淘 寶大瀏覽量商品詳情系統簡介 446
18.2  系統面臨哪些挑戰 447
18.3  淘 寶前臺系統的優化歷程 449
18.4  大瀏覽量系統的靜態改造 449
18.4.1  什麽是靜態化系統 449
18.4.2  為什麽要進行靜態化架構設計 450
18.4.3  如何改造動態系統 451
18.4.4  幾種靜態化方案的設計及選擇 453
18.4.5  如何解決失效問題 458
18.4.6  服務端靜態化方案的演進:CDN化 459
18.5  總結 462
參考資料 463