《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》新增了淘 寶在無(wú)線端的應(yīng)用實(shí)踐,包括:CDN 動(dòng)態(tài)加速、多終端化改造、 多終端Session 統(tǒng)一 ,以及在大流量的情況下,如何跨越性能、網(wǎng)絡(luò)和一個(gè)地區(qū)的電力瓶頸等內(nèi)容,并提供了比較完整的解決方案。
《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》主要圍繞Java Web 相關(guān)技術(shù)從三方面、深入地進(jìn)行了闡述。首先介紹前端知識(shí),即在JavaWeb 開發(fā)中涉及的一些基本知識(shí),包括Web 請(qǐng)求過(guò)程、HTTP、DNS 技術(shù)和CDN 技術(shù)。其次深入介紹了Java 技術(shù),包括I/O 技術(shù)、中文編碼問(wèn)題、Javac 編譯原理、class 文件結(jié)構(gòu)解析、ClassLoader 工作機(jī)制及JVM 的內(nèi)存管理等。介紹了Java 服務(wù)端技術(shù),主要包括Servlet、Session 與Cookie、Tomcat 與Jetty服務(wù)器、Spring 容器、iBatis 框架和Velocity 框架等原理介紹,并介紹了服務(wù)端的一些優(yōu)化技術(shù)。
《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》不僅介紹這些技術(shù)和框架的工作原理,而且結(jié)合示例來(lái)講解,通過(guò)通俗易懂的文字和豐富、生動(dòng)的配圖,讓讀者充分并深入理解它們的內(nèi)部工作原理,同時(shí)還結(jié)合了設(shè)計(jì)模式來(lái)介紹這些技術(shù)背后的架構(gòu)思維。
讓讀者知其然,并知其所以然,是《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》一書的特色。
作者來(lái)自淘 寶技術(shù)一線,親歷了淘 寶網(wǎng)PV從1億到10億的發(fā)展歷程,直接經(jīng)歷了在這個(gè)過(guò)程中技術(shù)的不斷突破、飛躍等變遷,并積累了豐富實(shí)踐經(jīng)驗(yàn)。
《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》正是分享了作者在面臨種種技術(shù)問(wèn)題、技術(shù)瓶頸時(shí)的思路、方法和技巧,具體的應(yīng)用實(shí)踐和直接的案例。
在這次的修訂版中,作者補(bǔ)充了網(wǎng)近兩年在無(wú)線端的應(yīng)用實(shí)踐。在這個(gè)快速發(fā)展的移動(dòng)互聯(lián)的時(shí)代,這樣直接的技術(shù)積累和分享尤其珍貴。
相信讀者一定能從中獲益匪淺。
集團(tuán)技術(shù)叢書是抱持著為工程師服務(wù)的理念誕生的。
阿里的快速發(fā)展,使我們見證技術(shù)變革的強(qiáng)大力量。在這過(guò)程中,我們經(jīng)歷了技術(shù)的變遷、興衰、成敗,既有收獲也有教訓(xùn)。如今,阿里已成為一家令人矚目的互聯(lián)網(wǎng)公司,站在這樣的時(shí)點(diǎn)上,回顧過(guò)去,放眼四周,我們深刻地覺(jué)得有必要將沉淀下來(lái)的一線經(jīng)驗(yàn)與智慧,結(jié)集出版,理由有三。
1.回報(bào)。我們獲得的種種經(jīng)驗(yàn)與教訓(xùn),只有在阿里這樣快速成長(zhǎng)、體量巨大的公司中才會(huì)親歷。這樣的技術(shù)環(huán)境并不是每個(gè)工程師都有緣遇到的。這些經(jīng)歷幫助了我們個(gè)人能力的提升,也幫助阿里成為一家技術(shù)實(shí)力過(guò)硬的公司。我們?cè)敢獍堰@些內(nèi)容分享出來(lái),幫助即將或已經(jīng)面臨類似問(wèn)題的朋友們,如果他們可以從閱讀中獲得一些啟發(fā)而少走彎路的話,將令我們欣慰。
2.交流。在這套叢書里,我們同樣會(huì)拋出我們的困惑、問(wèn)題,借助叢書的平臺(tái),擴(kuò)大工程師溝通的圈子,以書會(huì)友,共同探索、學(xué)習(xí)、提高。
3.溫故知新。以結(jié)集的形式,將以往的經(jīng)驗(yàn)與知識(shí)固化下來(lái),既可便于以后查閱,也可以幫助我們系統(tǒng)地梳理思路,更為地審視、洞察、并理解過(guò)去發(fā)生的種種,為未來(lái)的變化做好更充分、扎實(shí)的準(zhǔn)備。
基于以上的考慮,集團(tuán)技術(shù)叢書將立足于實(shí)踐,著眼于問(wèn)題,從工程師的視角解讀技術(shù)的內(nèi)涵。
讓思考成為我們生活的樂(lè)趣,讓閱讀成為我們進(jìn)步的階梯!
2009??????????????????????PV?1??10????????????????Web??????????????????CDN???????? ???????????Cassandra???Tomcat?Jetty???????????????????????????????????????sketch?????MVC??Feiba???????????50%??????????????????????????????????????1s???
? ? ?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
第1版序
我第1次接觸計(jì)算機(jī)應(yīng)該是在10年前,記得當(dāng)時(shí)連怎么開計(jì)算機(jī)都不會(huì),當(dāng)時(shí)感覺(jué)計(jì)算機(jī)真是一個(gè)讓人著迷的東西,但是那時(shí)別說(shuō)擁有一臺(tái)計(jì)算機(jī),就算是能玩上計(jì)算機(jī)也是一件奢侈的事情了。人總是有好奇心的,而我也因?yàn)樽冯S著這份好奇和計(jì)算機(jī)一起走過(guò)了將近10年的光陰,也是這份好奇讓我接觸了計(jì)算機(jī),認(rèn)識(shí)了計(jì)算機(jī),到現(xiàn)在了解了計(jì)算機(jī)。但是到目前為止我仍然有很多好奇的東西,所以我將一直求解下去。
回想我開始學(xué)習(xí)編程的時(shí)候,那是在大學(xué)期間開始構(gòu)建自己的第1個(gè)網(wǎng)頁(yè),然后是第1個(gè)網(wǎng)站之時(shí),其中的復(fù)雜程度真是讓人難以想象。要構(gòu)建一個(gè)網(wǎng)頁(yè),需要學(xué)習(xí)當(dāng)時(shí)的"網(wǎng)頁(yè)三劍客",頁(yè)面布局需要學(xué)習(xí)Dreamweaver,圖片處理需要學(xué)習(xí)Fireworks,動(dòng)畫制作需要學(xué)習(xí)Flash。有時(shí)候?yàn)榱艘粋€(gè)導(dǎo)航欄甚至通宵達(dá)旦。還有,要自己搭建一個(gè)本地服務(wù)器,要學(xué)習(xí)IIS、Apache等。當(dāng)時(shí)的我竟然能夠一個(gè)人完成這一系列的事情,現(xiàn)在想想還真是有點(diǎn)兒佩服自己。
現(xiàn)在回想一下當(dāng)時(shí)自己的學(xué)習(xí)過(guò)程,真是走了很多彎路,浪費(fèi)了很多時(shí)間。當(dāng)時(shí)的學(xué)習(xí)就像是在一個(gè)陌生的城市找路一樣,不知道如何才能到達(dá)目的地,只能邊走邊問(wèn)別人,這個(gè)人告訴你一點(diǎn),那個(gè)人告訴你一點(diǎn),一點(diǎn)一點(diǎn)往前走。但是雖然在往前走,走的路卻并不是最近的,甚至有人指的方向是錯(cuò)的。當(dāng)時(shí)缺少一個(gè)總攬全局的地圖,所以不能畫出一條的路。雖然走了很多彎路,但是這種不斷自學(xué)的過(guò)程還是大大地提升了我的學(xué)習(xí)能力,這種好的自學(xué)能力也在我以后的學(xué)習(xí)工作中起到了關(guān)鍵作用。
IT行業(yè)的知識(shí)變化很快,需要不斷地學(xué)習(xí)新東西,所以學(xué)習(xí)知識(shí)的能力比掌握知識(shí)本身更重要。這也是目前大公司招聘標(biāo)準(zhǔn)中很重要的一條。記得當(dāng)時(shí)我的老大在招聘我進(jìn)入淘寶時(shí),面試時(shí)就問(wèn)我如何學(xué)習(xí)一門新技術(shù)。你在學(xué)習(xí)的過(guò)程中會(huì)碰到很多難題,并會(huì)克服這些難題,很多這樣的過(guò)程積累起來(lái)就是你無(wú)形的寶貴財(cái)富。因?yàn)槟阌龅降膯?wèn)題肯定也是其他人遇到的問(wèn)題,從發(fā)現(xiàn)問(wèn)題、分析問(wèn)題再到解決問(wèn)題的過(guò)程遠(yuǎn)比這個(gè)問(wèn)題本身更有價(jià)值。
愛因斯坦說(shuō)過(guò):"發(fā)現(xiàn)問(wèn)題比解決問(wèn)題更重要。"對(duì)IT人員來(lái)說(shuō),發(fā)現(xiàn)Bug和重現(xiàn)Bug比解決這個(gè)Bug更有難度。這就好比一個(gè)外國(guó)人問(wèn)周思來(lái)總理中國(guó)有多少廁所,總理回答說(shuō)只有兩個(gè)廁所:男廁所和女廁所。但是,什么人在什么時(shí)間、什么地點(diǎn)需要上廁所,考慮這樣的情形恐怕需要多少廁所就很難計(jì)算了。同樣,在計(jì)算機(jī)中也只有0和1兩個(gè)選擇,在計(jì)算機(jī)中的程序也同樣如此,每寫一行代碼就能增加甚至一個(gè)數(shù)量級(jí)的出錯(cuò)概率。但是我們還是要學(xué)習(xí)如何避免出現(xiàn)Bug,這就要求我們能有總理看問(wèn)題的思維,將復(fù)雜的問(wèn)題簡(jiǎn)單化,發(fā)現(xiàn)問(wèn)題背后的本質(zhì),找到解決問(wèn)題的背后的一些通用邏輯,按照這種思路來(lái)解決問(wèn)題可能會(huì)讓你事半功倍。
如何讓學(xué)習(xí)知識(shí)的過(guò)程事半功倍,尤其是我們程序員如何做到,從我這么多年的學(xué)習(xí)過(guò)程來(lái)說(shuō),有一些經(jīng)驗(yàn)可以分享給大家,這也是我寫這本書的初衷,我真正想分享的不是我掌握的知識(shí),更多的是我學(xué)習(xí)這個(gè)知識(shí)的過(guò)程,以及我對(duì)這些知識(shí)的一些總結(jié)和提煉。
雖然要掌握在整個(gè)Web開發(fā)中涉及的所有知識(shí)是一件非常困難的事情,尤其是要掌握這些知識(shí)的實(shí)現(xiàn)原理,不僅知其然還要知其所以然。所以掌握學(xué)習(xí)它們的方法至關(guān)重要。如何快速、高效地閱讀它們的源碼,有很多同學(xué)看到我在developerWorks上發(fā)表的文章時(shí)來(lái)信問(wèn)我如何閱讀各種框架的源碼,很多同學(xué)都說(shuō)不知道從哪里入手。其實(shí),當(dāng)你掌握了一些技巧,加上你的一點(diǎn)耐心,這并不是很難的。
本書雖然介紹了很多開源框架,但是始終都在告訴你如何才能更深入和簡(jiǎn)單地掌握這個(gè)框架,告訴你學(xué)習(xí)的方法,而并不是告訴你這個(gè)框架有哪些類,以及怎么使用這些零碎的知識(shí)。打個(gè)比喻,本書并不是告訴你1+1=2,1+2=3,2+2=4這個(gè)結(jié)果,然后你可以根據(jù)這個(gè)方式得出1+1+2=4,你要計(jì)算其他數(shù)必須根據(jù)它給你的公式才能計(jì)算,而是告訴你加、減、乘、除的算法規(guī)則,然后你就可以根據(jù)這個(gè)規(guī)則自己做運(yùn)算了。
另外本書為什么要選擇介紹Web開發(fā)中這些技術(shù)的實(shí)現(xiàn)原理,因?yàn)橹挥心阏莆账鼈兊膶?shí)現(xiàn)原理,才能夠快速地解決一些意想不到的問(wèn)題。例如,當(dāng)你理解了 ClassLoader的工作機(jī)制后,遇到ClassNotFoundException時(shí),你就能快速地判斷,到底為什么會(huì)報(bào)這個(gè)錯(cuò)誤,可能是哪個(gè)地方出錯(cuò)導(dǎo)致的。
另外還有一個(gè)很重要的原因是,如果你很想進(jìn)入淘寶、騰訊、百度這樣的大型互聯(lián)網(wǎng)企業(yè)工作,不掌握本書講到的這些技術(shù)的實(shí)現(xiàn)原理,是很難通過(guò)技術(shù)面試的。因?yàn)槊嬖嚬俨粌H希望你會(huì)用這些技術(shù),還要求你說(shuō)出個(gè)所以然來(lái),所以,掌握這些技術(shù)的實(shí)現(xiàn)原理可以為你的職業(yè)發(fā)展提供更好的機(jī)會(huì)。
本書的組織結(jié)構(gòu)
本書從結(jié)構(gòu)上主要分為3部分:第1部分為基礎(chǔ)知識(shí),主要介紹在Java Web開發(fā)中涉及的一些基本知識(shí),例如一次HTTP請(qǐng)求是什么樣的,HTTP本身是如何工作的;第2部分將深入介紹Java技術(shù),幫助讀者了解Java是如何工作的,在會(huì)用的基礎(chǔ)上進(jìn)一步理解Java;第3部分是Java服務(wù)端技術(shù),主要介紹Web服務(wù)器的處理流程,包括Servlet容器的工作原理和Web框架是如何運(yùn)轉(zhuǎn)的,也就是從Web服務(wù)器接收到請(qǐng)求至返回請(qǐng)求的這個(gè)過(guò)程中涉及的知識(shí),介紹了針對(duì)大流量情況下的系統(tǒng)的一些優(yōu)化技巧和實(shí)踐項(xiàng)目。
目標(biāo)讀者
如果你是一名剛畢業(yè)的學(xué)生或者剛剛準(zhǔn)備學(xué)習(xí)Web開發(fā)并且不知道如何入手的人,那么這本書比較適合你;如果你已經(jīng)工作1~2年,已經(jīng)熟悉了Java Web開發(fā)的基本流程并且想進(jìn)一步提升自己,那么這本書更適合你。
如果你已經(jīng)知道了如何學(xué)習(xí)Java Web開發(fā)技術(shù),正準(zhǔn)備入門進(jìn)行實(shí)際開發(fā),也就是說(shuō)你是一個(gè)開發(fā)新手,那么這本書不太適合你。但是當(dāng)你知道了如何開發(fā)一個(gè)Web應(yīng)用并想知道它們是如何工作時(shí),歡迎你再回來(lái)看本書,它能幫助你進(jìn)一步提高。
總的來(lái)說(shuō),本書適合以下讀者人群。
對(duì)Web技術(shù)感覺(jué)迷茫,不知道如何開始學(xué)習(xí),對(duì)整個(gè)B/S工作機(jī)制不了解的同學(xué)。
Java技術(shù)愛好者,以及想深入學(xué)習(xí)Java技術(shù)內(nèi)部實(shí)現(xiàn)細(xì)節(jié)的人。
有一定開發(fā)基礎(chǔ),但是不了解Web中一些容器和框架的內(nèi)部工作原理的人。
對(duì)性能優(yōu)化和分布式數(shù)據(jù)管理有興趣的大型互聯(lián)網(wǎng)工程師,這里介紹了淘寶的一些實(shí)踐經(jīng)驗(yàn)。
開源代碼愛好者,喜歡研究開源代碼的Coder可以從本書中找到一些分析源碼的方法。
本書不會(huì)教你如何開發(fā)Web應(yīng)用程序,也不會(huì)介紹Struts、Spring、iBatis等框架如何使用。這些框架的使用參考手冊(cè)在圖書市場(chǎng)上有很多,本書沒(méi)有必要重復(fù)介紹。但是如果你已經(jīng)掌握了如何使用并且不滿足只會(huì)使用,想知道它們是如何工作的,想打開這些黑盒子,想以后告訴他人這些黑盒子里到底有些什么東西,對(duì)每種技術(shù)有強(qiáng)烈的好奇心,如果你是這樣的人,那么本書值得你擁有。
本書特點(diǎn)
本書按照通常的學(xué)習(xí)習(xí)慣設(shè)計(jì),為你展示了從瀏覽器發(fā)出請(qǐng)求到瀏覽器最終顯示頁(yè)面的整個(gè)過(guò)程,讓你對(duì)Web開發(fā)的整個(gè)過(guò)程有個(gè)總體的理解。
本書雖然講解的都是比較深入的技術(shù),但是有關(guān)實(shí)踐的示例和比較恰當(dāng)?shù)谋扔鲗湍愀玫乩斫狻?/p>
本書將結(jié)合淘寶網(wǎng)中真實(shí)使用的示例應(yīng)用程序來(lái)講解技術(shù),讓讀者有更好的直觀認(rèn)識(shí)。
讀者討論
由于作者水平有限,書中難免有錯(cuò)誤之處。在本書出版后的任何時(shí)間,若你對(duì)本書有任何問(wèn)題,你都可以通過(guò)xulingbo0201@163.com發(fā)送郵件給我,或者到xulingbo.net上向我提交你的建議和想法,我會(huì)對(duì)所有問(wèn)題給予回復(fù)。
致謝
感謝我的父母,在我高考失敗后仍然給我機(jī)會(huì)讓我選擇做自己想做的事,支持我選擇了自己喜歡的計(jì)算機(jī)行業(yè),并在家庭并不富裕的情況下給我配置了第1臺(tái)計(jì)算機(jī),讓我有機(jī)會(huì)繼續(xù)追求自己的夢(mèng)想,是你們的支持和鼓勵(lì)讓我在做自己一直喜歡做的事。
感謝我的老婆,從大學(xué)你就一直陪伴在我身邊,有你在我身邊是我不斷努力的較大動(dòng)力,在本書的寫作過(guò)程中,你完成初稿的審閱工作,同時(shí)也給了我很多鼓勵(lì)和建議。
感謝電子工業(yè)出版社的劉皎和張國(guó)霞編輯,你們嚴(yán)謹(jǐn)認(rèn)真的工作態(tài)度讓我非常敬佩。
感謝吳澤明(范禹)老大為本書寫序,你不僅帶我進(jìn)入淘寶,而且一直幫助我持續(xù)進(jìn)步。感謝王保平、林昊和劉達(dá)在繁忙的工作中為我寫推薦語(yǔ)。
感謝在本書寫作過(guò)程中提出寶貴意見的同事們,他們的花名是:小凡、小邪、丹臣、哲別、景升、文通、向飛、凌棄、路奇、濟(jì)城、大仁、常彬、旭天、韓章、小賭、雁聲、索尼、鳳豪、柳擎、華黎、空望、嗷嗷、漸飛、普智、勝衣、叔度、文景、撒迦、狄龍、祝幽、單通、承澤等。
感謝developerWorks上所有向我提出問(wèn)題和建議的網(wǎng)友們。
許令波
2012年7月
再版序
自《深入分析Java Web技術(shù)內(nèi)幕》一書出版以來(lái),我收到了不少讀者的反饋,也很感謝他們指出了書中的一些錯(cuò)誤和不足。時(shí)隔兩年,在電子工業(yè)出版社博文視點(diǎn)編輯的幫助下,《深入分析Java Web技術(shù)內(nèi)幕》有了修訂再版的機(jī)會(huì)。
這兩年來(lái),一些技術(shù)也在發(fā)生著變化:無(wú)線技術(shù)越來(lái)越成熟,我們的系統(tǒng)開始更多地支持無(wú)線,并衍生出系統(tǒng)要進(jìn)行多終端化改造等問(wèn)題;同時(shí)我們也遇到了一些新的技術(shù)問(wèn)題如大流量、網(wǎng)絡(luò)瓶頸及機(jī)房的電力短缺等,這給系統(tǒng)的部署和系統(tǒng)架構(gòu)帶來(lái)新的挑戰(zhàn)。所以我借這次再版的機(jī)會(huì),將這方面的技術(shù)更新和實(shí)踐嘗試一并分享給讀者。除了修正前版的一些錯(cuò)漏之處,本次修訂還主要做了以下更新。
第1章增加了CDN動(dòng)態(tài)加速的內(nèi)容,介紹了我們當(dāng)前近期的想法和嘗試。
第3章增加一種繁簡(jiǎn)轉(zhuǎn)換的實(shí)現(xiàn)方式的內(nèi)容,介紹了我們?cè)谟龅蕉嘟K端的情況下面臨的多語(yǔ)言的問(wèn)題,將我們的思路和實(shí)踐分享給大家。
第10章增加了多終端Session統(tǒng)一的內(nèi)容,也介紹了在多終端的情況下如何解決Session統(tǒng)一的問(wèn)題。
新增了第18章,重點(diǎn)介紹了我們?cè)诮鼉赡暧龅酱罅髁康那闆r下,如何跨越性能、網(wǎng)絡(luò)和一個(gè)地區(qū)的電力瓶頸等問(wèn)題,并提供了一個(gè)比較完整的解決方案。
感謝劉皎和張國(guó)霞兩位編輯,感謝阿里巴巴的幾位大牛范禹、黃眉等對(duì)修訂版提供的一些有益建議,也感謝我們技術(shù)發(fā)展部恬玉同學(xué)的大力幫助。
許令波
2014.7
《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》的內(nèi)容涉及從HTTP、Servlet、模板渲染、數(shù)據(jù)層、容器到JVM 等Java Web開發(fā)的各個(gè)方面,這些問(wèn)題是許令波在日常工作中經(jīng)常遇到的,我想也是所有Java Web開發(fā)人員都會(huì)遇到的。《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》的特點(diǎn)就是讓Java Web 開發(fā)人員對(duì)整個(gè)開發(fā)過(guò)程所涉及的技術(shù)能有一個(gè)完整的脈絡(luò)圖,從前端瀏覽器到Java 技術(shù),再到Java 服務(wù)端技術(shù),還介紹了實(shí)現(xiàn)這些技術(shù)用到的設(shè)計(jì)模式;不僅詳細(xì)總結(jié)了這些技術(shù)的工作原理,而且也結(jié)合了很多實(shí)際案例來(lái)進(jìn)行闡述,將復(fù)雜、難懂的技術(shù)原理通過(guò)時(shí)序圖和架構(gòu)圖的方式展現(xiàn)出來(lái),更加便于讀者理解。可以說(shuō)如果你掌握了本書的知識(shí),那么你就可以成為一個(gè)合格的JavaWeb開發(fā)人員。
《深入分析Java Web技術(shù)內(nèi)幕(修訂版)》文筆流暢,圖表清晰、易懂,值得推薦給Java Web 開發(fā)人員作為進(jìn)階學(xué)習(xí)的參考書。
——吳澤明(范禹),天貓產(chǎn)品技術(shù)部研究員
這是一本關(guān)于Java 的書,里面講述的大量基礎(chǔ)知識(shí)對(duì)前端開發(fā)工程師非常有幫助。比如中文編碼章節(jié),作者以一個(gè)實(shí)踐者的身份詳細(xì)闡述了編碼問(wèn)題的方方面面。總之,這是一本很用心的書,是實(shí)踐者的思考和總結(jié)。目前在國(guó)內(nèi)很少看到這類書籍,強(qiáng)烈推薦從事Web 開發(fā)工作的人員閱讀并實(shí)踐之。
——王保平(玉伯),開源前端類庫(kù)KISSY、SeaJS作者
作者在做了很多Java Web 方面的改造項(xiàng)目,在Java Web 的相關(guān)技術(shù)上有深入的掌握,并積累了豐富的經(jīng)驗(yàn)。在這本書中作者不僅向讀者展示了這類大改造項(xiàng)目所需的知識(shí),還展示了Java Web 更為全景的技術(shù)知識(shí)體系。本書值得Java Web 開發(fā)人員閱讀。
——林昊(畢玄),博學(xué)技術(shù)專家
從第1 次拜讀相關(guān)內(nèi)容開始,就可以感覺(jué)到作者并不是在簡(jiǎn)簡(jiǎn)單單地講述一門技術(shù)或者一個(gè)概念,他的分析和講解十分深入,并且可以很好地聚焦讀者的思路,尤其是在Java Web 、Servlet 規(guī)范及字符串處理方面,都有很的內(nèi)容。在眾多向developerWorks投稿的國(guó)內(nèi)作者中,無(wú)論是從文章的質(zhì)量看,還是從內(nèi)容的選題方向看,作者的文章都可稱為上乘之作。同時(shí),他的多篇文章還得到了廣大網(wǎng)站讀者的好評(píng),其訪問(wèn)量、評(píng)分及評(píng)論的數(shù)量均名列前茅。
——?jiǎng)⑦_(dá),developerWorks中國(guó)Java 專區(qū)編輯、技術(shù)工程師
雖然網(wǎng)上有pdf版本,但是個(gè)人感覺(jué)知識(shí)最好還是通過(guò)紙質(zhì)傳輸會(huì)好點(diǎn),支持!
在手機(jī)上就一直在看的一本書,趁著這次雙11,果斷入手,非常全面的一本書
內(nèi)容多且泛,適合空閑時(shí)讀一下,深究某一方面的話這不是你想要的那本書
挺好的書,全面,適合初學(xué)者,不是那種深入一個(gè)角度的書
很不錯(cuò),有很多原理性的知識(shí)點(diǎn)不懂,正好多學(xué)習(xí)學(xué)習(xí)!
書還沒(méi)看,不知怎么樣,就是有個(gè)地方破了,不太開心。
非常不錯(cuò)的好書,書不記,熟讀可記,義不精,細(xì)思可精,共勉!
等了快半個(gè)月了,終于到了 活動(dòng)時(shí)候買的,還是很實(shí)惠的
內(nèi)容對(duì)于目前的我來(lái)說(shuō)還是有點(diǎn)深,適合有一兩年工作經(jīng)驗(yàn)的人學(xué)習(xí)
書里面的內(nèi)容特別好,把之前在學(xué)校里面的知識(shí)串了起來(lái),受益匪淺啊。
書非常不錯(cuò),很多之前沒(méi)有注意到的地方都有說(shuō)明,非常棒!
對(duì)需要深入了解技術(shù)的人比較實(shí)用,一般維護(hù)和開發(fā)人員不需要。
沒(méi)有膠封,紙張顏色很柔和,看著舒服。內(nèi)容排版親和。值得一看
很不錯(cuò)的書,比市面上其他講Java的書好多了
正版沒(méi)問(wèn)題,,價(jià)格挺便宜的。。。雖然其中有不少看不懂的內(nèi)容,,,
書中講了不少原理的東西,覺(jué)得有的地方講的還不是很清楚。建議配上servlet規(guī)范一起看 了解的會(huì)更多!
確實(shí)是深入理解,作者總結(jié)的精髓,也必須多實(shí)踐才能體會(huì)得到,看了書發(fā)展自己啥都不知道,趕緊碼吧!
講的主要是web相關(guān)的技術(shù)原理,以及在web開發(fā)中遇到的問(wèn)題以及解決方法,挺實(shí)用的...
包裝很好,沒(méi)有破碎,前一天晚上10點(diǎn)下單,第二天中午就到了,
物流還算比較給力,內(nèi)容也還不錯(cuò),包裝稍微簡(jiǎn)陋了點(diǎn)。希望能從中學(xué)到東西吧。
很不錯(cuò)的java web數(shù)據(jù),有利于提升技術(shù)水平
學(xué)習(xí)java web框架開發(fā)的好書,書中涉及了很多內(nèi)容,都讓人很有收獲
想把原理搞明白的童鞋不妨拿過(guò)來(lái)看看,但是個(gè)人感覺(jué)至少得有足夠的web基礎(chǔ)才能勝任本書。否則會(huì)有點(diǎn)吃力
深入分析技術(shù)內(nèi)幕(修訂版)比想象的要差,印刷一般,有點(diǎn)翻版的感覺(jué),又要貴
講解的很全面,部分知識(shí)講的不是很細(xì)致,但是入門足夠,要深入可以根據(jù)該書做索引來(lái)看其他的知識(shí)點(diǎn)
非常贊的書!技術(shù)細(xì)節(jié),技術(shù)內(nèi)幕,分析到位,程序員深入學(xué)習(xí)的好教材~給好評(píng)
朋友推薦的。很實(shí)用的一本書,都Java web的深入很有幫助
評(píng)價(jià)一下吧,大概看了幾章,感覺(jué)第三章的中文編碼講的很全面,第一二章屬于掃盲,后邊的應(yīng)該還不錯(cuò),還沒(méi)有看,不過(guò)第四到第八章這么少講虛擬機(jī)感覺(jué)應(yīng)該也不會(huì)講的很深入,十章往后很期待。書的紙張不錯(cuò),很厚,所以會(huì)覺(jué)得內(nèi)容不是很多。
學(xué)習(xí)Java的都應(yīng)該看一看,對(duì)自己會(huì)很有裨益,大牛進(jìn)階之路上的必備武器,趁這次活動(dòng),果斷入手,劃算!