出版時(shí)間:2012-9 出版社:電子工業(yè)出版社 作者:許令波
Tag標(biāo)簽:無(wú)
內(nèi)容概要
《深入分析Java Web技術(shù)內(nèi)幕》圍繞Java Web相關(guān)技術(shù)從三方面全面深入地進(jìn)行闡述。首先介紹前端知識(shí),主要介紹Java Web開(kāi)發(fā)中涉及的一些基本知識(shí),包括Web請(qǐng)求過(guò)程、HTTP協(xié)議、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框架等原理介紹。本書(shū)不僅介紹這些技術(shù)和框架的工作原理,而且結(jié)合示例來(lái)講解,通過(guò)通俗易懂的文字和豐富生動(dòng)的配圖,讓讀者充分并深入理解它們的內(nèi)部工作原理,同時(shí)還結(jié)合了設(shè)計(jì)模式來(lái)介紹這些技術(shù)背后的架構(gòu)思維。
作者簡(jiǎn)介
許令波,畢業(yè)于合肥工業(yè)大學(xué),獲計(jì)算機(jī)碩士學(xué)位。熱愛(ài)Java Web技術(shù),關(guān)注服務(wù)端性能優(yōu)化,熱衷開(kāi)源技術(shù)的研究和分享,曲獲developerWorks最佳作者稱(chēng)號(hào)。2009年進(jìn)入淘寶工作,目前從事模板渲染框架與MVC框架的開(kāi)發(fā)與應(yīng)用、Java Web的性能優(yōu)化、高訪問(wèn)量系統(tǒng)靜態(tài)化和商品詳情系統(tǒng)的業(yè)務(wù)改造等工作。
書(shū)籍目錄
第1章 深入Web請(qǐng)求過(guò)程1 1.1 B/S網(wǎng)絡(luò)架構(gòu)概述2 1.2 如何發(fā)起一個(gè)請(qǐng)求4 1.3 HTTP協(xié)議解析6 1.3.1 查看HTTP信息的工具8 1.3.2 瀏覽器緩存機(jī)制9 1.4 DNS域名解析12 1.4.1 DNS域名解析過(guò)程12 1.4.2 跟蹤域名解析過(guò)程15 1.4.3 清除緩存的域名18 1.4.4 幾種域名解析方式19 1.5 CDN工作機(jī)制20 1.5.1 CDN架構(gòu)20 1.5.2 負(fù)載均衡21 1.6 總結(jié)24 第2章 深入分析JavaI/O的工作機(jī)制25 2.1 Java的I/O類(lèi)庫(kù)的基本架構(gòu)25 2.1.1 基于字節(jié)的I/O操作接口26 2.1.2 基于字符的I/O操作接口27 2.1.3 字節(jié)與字符的轉(zhuǎn)化接口28 2.2 磁盤(pán)I/O工作機(jī)制29 2.2.1 幾種訪問(wèn)文件的方式29 2.2.2 Java訪問(wèn)磁盤(pán)文件33 2.2.3 Java序列化技術(shù)34 2.3 網(wǎng)絡(luò)I/O工作機(jī)制36 2.3.1 TCP狀態(tài)轉(zhuǎn)化37 2.3.2 影響網(wǎng)絡(luò)傳輸?shù)囊蛩?9 2.3.3 JavaSocket的工作機(jī)制39 2.3.4 建立通信鏈路40 2.3.5 數(shù)據(jù)傳輸41 2.4 NIO的工作方式41 2.4.1 BIO帶來(lái)的挑戰(zhàn)41 2.4.2 NIO的工作機(jī)制42 2.4.3 Buffer的工作方式45 2.4.4 NIO的數(shù)據(jù)訪問(wèn)方式47 2.5 I/O調(diào)優(yōu)49 2.5.1 磁盤(pán)I/O優(yōu)化49 2.5.2 TCP網(wǎng)絡(luò)參數(shù)調(diào)優(yōu)50 2.5.3 網(wǎng)絡(luò)I/O優(yōu)化52 2.6 設(shè)計(jì)模式解析之適配器模式56 2.6.1 適配器模式的結(jié)構(gòu)56 2.6.2 JavaI/O中的適配器模式57 2.7 設(shè)計(jì)模式解析之裝飾器模式57 2.7.1 裝飾器模式的結(jié)構(gòu)58 2.7.2 JavaI/O中的裝飾器模式58 2.8 適配器模式與裝飾器模式的區(qū)別59 2.9 總結(jié)59 第3章 深入分析JavaWeb中的中文編碼問(wèn)題60 3.1 幾種常見(jiàn)的編碼格式60 3.1.1 為什么要編碼60 3.1.2 如何“翻譯”61 3.2 Java中需要編碼的場(chǎng)景63 3.2.1 I/O操作中存在的編碼63 3.2.2 內(nèi)存操作中的編碼65 3.3 Java中如何編解碼66 3.3.1 按照ISO—8859—1編碼68 3.3.2 按照GB2312編碼69 3.3.3 按照GBK編碼70 3.3.4 按照UTF—16編碼70 3.3.5 按照UTF—8編碼71 3.3.6 UTF—8編碼代碼片段71 3.3.7 幾種編碼格式的比較73 3.4 JavaWeb中涉及的編解碼73 3.4.1 URL的編解碼75 3.4.2 HTTPHeader的編解碼78 3.4.3 POST表單的編解碼78 3.4.4 HTTPBODY的編解碼79 3.5 JS中的編碼問(wèn)題80 3.5.1 外部引入JS文件80 3.5.2 JS的URL編碼81 3.5.3 其他需要編碼的地方83 3.6 常見(jiàn)問(wèn)題分析83 3.6.1 中文變成了看不懂的字符83 3.6.2 一個(gè)漢字變成一個(gè)問(wèn)號(hào)84 3.6.3 一個(gè)漢字變成兩個(gè)問(wèn)號(hào)84 3.6.4 一種不正常的正確編碼85 3.7 總結(jié)86 第4章 Javac編譯原理87 4.1 Javac是什么88 4.2 Javac編譯器的基本結(jié)構(gòu)88 4.3 Javac工作原理分析90 4.3.1 詞法分析器91 4.3.2 語(yǔ)法分析器98 4.3.3 語(yǔ)義分析器103 4.3.4 代碼生成器113 4.4 設(shè)計(jì)模式解析之訪問(wèn)者模式116 4.4.1 訪問(wèn)者模式的結(jié)構(gòu)117 4.4.2 Javac中訪問(wèn)者模式的實(shí)現(xiàn)118 4.5 總結(jié)119 第5章 深入class文件結(jié)構(gòu)120 5.1 JVM指令集簡(jiǎn)介120 5.1.1 類(lèi)相關(guān)的指令122 5.1.2 方法的定義123 5.1.3 屬性的定義124 5.1.4 其他指令集125 5.2 class文件頭的表示形式133 5.3 常量池137 5.3.1 UTF8常量類(lèi)型140 5.3.2 Fieldref、Methodref常量類(lèi)型141 5.3.3 Class常量類(lèi)型141 5.3.4 NameAndType常量類(lèi)型142 5.4 類(lèi)信息142 5.5 Fields和Methods定義143 5.6 類(lèi)屬性描述147 5.7 Javap生成的class文件結(jié)構(gòu)148 5.7.1 LineNumberTable150 5.7.2 LocalVariableTable151 5.8 總結(jié)153 第6章 深入分析ClassLoader工作機(jī)制154 6.1 ClassLoader類(lèi)結(jié)構(gòu)分析155 6.2 ClassLoader的等級(jí)加載機(jī)制156 6.3 如何加載class文件159 6.3.1 加載字節(jié)碼到內(nèi)存159 6.3.2 驗(yàn)證與解析161 6.3.3 初始化Class對(duì)象161 6.4 常見(jiàn)加載類(lèi)錯(cuò)誤分析161 6.4.1 ClassNotFoundException161 6.4.2 NoClassDefFoundError162 6.4.3 UnsatisfiedLinkError163 6.4.4 ClassCastException164 6.4.5 ExceptionInInitializerError165 6.5 常用的ClassLoader分析166 6.6 如何實(shí)現(xiàn)自己的ClassLoader170 6.6.1 加載自定義路徑下的class文件170 6.6.2 加載自定義格式的class文件172 6.7 實(shí)現(xiàn)類(lèi)的熱部署174 6.8 Java應(yīng)不應(yīng)該動(dòng)態(tài)加載類(lèi)176 6.9 總結(jié)177 第7章 JVM體系結(jié)構(gòu)與工作方式178 7.1 JVM體系結(jié)構(gòu)178 7.1.1 何謂JVM178 7.1.2 JVM體系結(jié)構(gòu)詳解181 7.2 JVM工作機(jī)制183 7.2.1 機(jī)器如何執(zhí)行代碼183 7.2.2 JVM為何選擇基于棧的架構(gòu)184 7.2.3 執(zhí)行引擎的架構(gòu)設(shè)計(jì)185 7.2.4 執(zhí)行引擎的執(zhí)行過(guò)程186 7.2.5 JVM方法調(diào)用棧191 7.3 總結(jié)195 第8章 JVM內(nèi)存管理196 8.1 物理內(nèi)存與虛擬內(nèi)存197 8.2 內(nèi)核空間與用戶(hù)空間198 8.3 Java中哪些組件需要使用內(nèi)存199 8.3.1 Java堆199 8.3.2 線程199 8.3.3 類(lèi)和類(lèi)加載器200 8.3.4 NIO200 8.3.5 JNI201 8.4 JVM內(nèi)存結(jié)構(gòu)201 8.4.1 PC寄存器202 8.4.2 Java棧202 8.4.3 堆203 8.4.4 方法區(qū)203 8.4.5 運(yùn)行時(shí)常量池204 8.4.6 本地方法棧204 8.5 JVM內(nèi)存分配策略204 8.5.1 通常的內(nèi)存分配策略205 8.5.2 Java中內(nèi)存分配詳解205 8.6 JVM內(nèi)存回收策略210 8.6.1 靜態(tài)內(nèi)存分配和回收210 8.6.2 動(dòng)態(tài)內(nèi)存分配和回收211 8.6.3 如何檢測(cè)垃圾211 8.6.4 基于分代的垃圾收集算法213 8.7 內(nèi)存問(wèn)題分析222 8.7.1 GC日志分析222 8.7.2 堆快照文件分析225 8.7.3 JVMCrash日志分析225 8.8 實(shí)例1231 8.9 實(shí)例2233 8.10 實(shí)例3235 8.11 總結(jié)240 第9章 Servlet工作原理解析241 9.1 從Servlet容器說(shuō)起241 9.1.1 Servlet容器的啟動(dòng)過(guò)程242 9.1.2 Web應(yīng)用的初始化工作245 9.2 創(chuàng)建Servlet實(shí)例247 9.2.1 創(chuàng)建Servlet對(duì)象248 9.2.2 初始化Servlet248 9.3 Servlet體系結(jié)構(gòu)250 9.4 Servlet如何工作253 9.5 Servlet中的Listener255 9.6 Filter如何工作257 9.7 Servlet中的url—pattern259 9.8 總結(jié)260 第10章 深入理解Session與Cookie261 10.1 理解Cookie262 10.1.1 Cookie屬性項(xiàng)262 10.1.2 Cookie如何工作263 10.1.3 使用Cookie的限制266 10.2 理解Session267 10.2.1 Session與Cookie267 10.2.2 Session如何工作268 10.3 Cookie安全問(wèn)題271 10.4 分布式Session框架272 10.4.1 存在哪些問(wèn)題272 10.4.2 可以解決哪些問(wèn)題273 10.4.3 總體實(shí)現(xiàn)思路273 10.5 Cookie壓縮278 10.6 表單重復(fù)提交問(wèn)題280 10.7 總結(jié)281 第11章 Tomcat的系統(tǒng)架構(gòu)與設(shè)計(jì)模式282 11.1 Tomcat總體設(shè)計(jì)282 11.1.1 Tomcat總體結(jié)構(gòu)283 11.1.2 Connector組件289 11.1.3 Servlet容器Container294 11.1.4 Tomcat中的其他組件305 11.2 Tomcat中的設(shè)計(jì)模式305 11.2.1 門(mén)面設(shè)計(jì)模式305 11.2.2 觀察者設(shè)計(jì)模式307 11.2.3 命令設(shè)計(jì)模式309 11.2.4 責(zé)任鏈設(shè)計(jì)模式310 11.3 總結(jié)312 第12章 Jetty的工作原理解析313 12.1 Jetty的基本架構(gòu)313 12.1.1 Jetty的基本架構(gòu)簡(jiǎn)介313 12.1.2 Handler的體系結(jié)構(gòu)315 12.2 Jetty的啟動(dòng)過(guò)程316 12.3 接受請(qǐng)求317 12.3.1 基于HTTP協(xié)議工作317 12.3.2 基于AJP工作319 12.3.3 基于NIO方式工作322 12.4 處理請(qǐng)求323 12.5 與Jboss集成326 12.6 與Tomcat的比較327 12.6.1 架構(gòu)比較327 12.6.2 性能比較328 12.6.3 特性比較328 12.7 總結(jié)329 第13章 Spring框架的設(shè)計(jì)理念與設(shè)計(jì)模式分析330 13.1 Spring的骨骼架構(gòu)330 13.1.1 Spring的設(shè)計(jì)理念331 13.1.2 核心組件如何協(xié)同工作332 13.2 核心組件詳解333 13.2.1 Bean組件333 13.2.2 Context組件335 13.2.3 Core組件336 13.2.4 Ioc容器如何工作338 13.3 Spring中AOP特性詳解348 13.3.1 動(dòng)態(tài)代理的實(shí)現(xiàn)原理348 13.3.2 SpringAOP如何實(shí)現(xiàn)351 13.4 設(shè)計(jì)模式解析之代理模式354 13.4.1 代理模式原理354 13.4.2 Spring中代理模式的實(shí)現(xiàn)354 13.5 設(shè)計(jì)模式解析之策略模式357 13.5.1 策略模式原理357 13.5.2 Spring中策略模式的實(shí)現(xiàn)358 13.6 總結(jié)358 第14章 SpringMVC工作機(jī)制與設(shè)計(jì)模式360 14.1 SpringMVC的總體設(shè)計(jì)360 14.2 Control設(shè)計(jì)365 14.2.1 HandlerMapping初始化366 14.2.2 HandlerAdapter初始化368 14.2.3 Control的調(diào)用邏輯369 14.3 Model設(shè)計(jì)370 14.4 View設(shè)計(jì)371 14.5 框架設(shè)計(jì)的思考373 14.5.1 為什么需要框架373 14.5.2 需要什么樣的框架373 14.5.3 框架設(shè)計(jì)的原則374 14.5.4 “指航燈”374 14.5.5 最基本的原則374 14.6 設(shè)計(jì)模式解析之模板模式375 14.6.1 模板模式的結(jié)構(gòu)375 14.6.2 SpringMVC中的模板模式示例376 14.7 總結(jié)377 第15章 深入分析Ibatis框架之系統(tǒng)架構(gòu)與映射原理378 15.1 Ibatis框架主要的類(lèi)層次結(jié)構(gòu)378 15.2 Ibatis框架的設(shè)計(jì)策略379 15.3 Ibatis框架的運(yùn)行原理381 15.4 示例383 15.5 Ibatis對(duì)SQL語(yǔ)句的解析385 15.6 數(shù)據(jù)庫(kù)字段映射到Java對(duì)象386 15.7 示例運(yùn)行的結(jié)果388 15.8 設(shè)計(jì)模式解析之簡(jiǎn)單工廠模式388 15.8.1 簡(jiǎn)單工廠模式的實(shí)現(xiàn)原理388 15.8.2 Ibatis中的簡(jiǎn)單工廠模式示例389 15.9 設(shè)計(jì)模式解析之工廠模式390 15.9.1 工廠模式的實(shí)現(xiàn)原理390 15.9.2 Ibatis中的工廠模式示例391 15.10 總結(jié)392 第16章 Velocity工作原理解析394 16.1 Velocity總體架構(gòu)395 16.2 JJTree渲染過(guò)程解析398 16.2.1 #set語(yǔ)法402 16.2.2 Velocity的方法調(diào)用403 16.2.3 #if、#elseif和#else語(yǔ)法406 16.2.4 #foreach語(yǔ)法407 16.2.5 #parse語(yǔ)法409 16.3 事件處理機(jī)制410 16.4 常用優(yōu)化技巧413 16.4.1 減少樹(shù)的總節(jié)點(diǎn)數(shù)量413 16.4.2 減少渲染耗時(shí)的節(jié)點(diǎn)數(shù)量413 16.5 與JSP比較414 16.5.1 JSP渲染機(jī)制414 16.5.2 Velocity與JSP420 16.6 設(shè)計(jì)模式解析之合成模式420 16.6.1 合成模式的結(jié)構(gòu)420 16.6.2 Velocity中合成模式的實(shí)現(xiàn)421 16.7 設(shè)計(jì)模式解析之解釋器模式422 16.7.1 解釋器模式的結(jié)構(gòu)422 16.7.2 Velocity中解釋器模式的實(shí)現(xiàn)423 16.8 總結(jié)423 第17章 Velocity優(yōu)化實(shí)踐424 17.1 現(xiàn)實(shí)存在的問(wèn)題424 17.2 優(yōu)化的理論基礎(chǔ)425 17.2.1 程序語(yǔ)言的三角形結(jié)構(gòu)425 17.2.2 數(shù)據(jù)結(jié)構(gòu)減少抽象化426 17.2.3 簡(jiǎn)單的程序復(fù)雜化426 17.2.4 減少翻譯的代價(jià)427 17.2.5 變的轉(zhuǎn)化為不變427 17.3 一個(gè)高效的模板引擎的實(shí)現(xiàn)思路427 17.3.1 vm模板如何被編譯429 17.3.2 方法調(diào)用的無(wú)反射優(yōu)化436 17.3.3 字符輸出改成字節(jié)輸出439 17.4 優(yōu)化的成果440 17.4.1 char轉(zhuǎn)成byte440 17.4.2 無(wú)反射執(zhí)行441 17.5 其他優(yōu)化手段442 17.6 總結(jié)442
章節(jié)摘錄
版權(quán)頁(yè): 插圖: 1.類(lèi)加載器 在深入分析ClassLoader時(shí)我們?cè)敿?xì)分析了ClassLoader的工作機(jī)制,這里需要說(shuō)明的是,每一個(gè)被JVM裝載的類(lèi)型都有一個(gè)對(duì)應(yīng)的java.lang.Class類(lèi)的實(shí)例來(lái)表示該類(lèi)型,該實(shí)例可以唯一表示被JVM裝載的class類(lèi),要求這個(gè)實(shí)例和其他類(lèi)實(shí)例一樣都存放在Java的堆中。 2.執(zhí)行引擎 執(zhí)行引擎是JVM的核心部分,執(zhí)行引擎的作用就是解析JVM字節(jié)碼指令,得到執(zhí)行結(jié)果。在《Java虛擬機(jī)規(guī)范》中詳細(xì)地定義了執(zhí)行引擎遇到每條字節(jié)碼指令時(shí)應(yīng)該處理什么,并且應(yīng)該得到什么結(jié)果。但是并沒(méi)有規(guī)定執(zhí)行引擎應(yīng)該如何或采取什么方式處理而得到這個(gè)結(jié)果。因?yàn)閳?zhí)行引擎具體采取什么方式由JVM的實(shí)現(xiàn)廠家自己去實(shí)現(xiàn),是直接解釋執(zhí)行還是采用JIT技術(shù)轉(zhuǎn)成本地代碼去執(zhí)行,還是采用寄存器這個(gè)芯片模式去執(zhí)行都可以。所以執(zhí)行引擎的具體實(shí)現(xiàn)有很大的發(fā)揮空間,如SUN的hotspot是基于棧的執(zhí)行引擎,而Google的Dalvik是基于寄存器的執(zhí)行引擎。 執(zhí)行引擎也就是執(zhí)行一條條代碼的一個(gè)流程,而代碼都是包含在方法體內(nèi)的,所以執(zhí)行引擎本質(zhì)上就是執(zhí)行一個(gè)個(gè)方法所串起來(lái)的流程,對(duì)應(yīng)到操作系統(tǒng)中一個(gè)執(zhí)行流程是一個(gè)Java進(jìn)程還是一個(gè)Java線程呢?很顯然是后者,因?yàn)橐粋€(gè)Java進(jìn)程可以有多個(gè)同時(shí)執(zhí)行的執(zhí)行流程。這樣說(shuō)來(lái)每一個(gè)Java線程就是一個(gè)執(zhí)行引擎的實(shí)例,那么一個(gè)JVM實(shí)例中就會(huì)同時(shí)有多個(gè)執(zhí)行引擎在工作,這些執(zhí)行引擎有的在執(zhí)行用戶(hù)的程序,而有的在執(zhí)行JVM內(nèi)部的程序(如Java垃圾收集器)。 3.Java內(nèi)存管理 執(zhí)行引擎在執(zhí)行一段程序時(shí)需要存儲(chǔ)一些東西,如操作碼需要的操作數(shù),操作碼的執(zhí)行結(jié)果需要保存。class類(lèi)的字節(jié)碼還有類(lèi)的對(duì)象等這些信息都需要在執(zhí)行引擎執(zhí)行之前就準(zhǔn)備好。從圖7—2中可以看出一個(gè)JVM實(shí)例會(huì)有一個(gè)方法區(qū)、Java堆、Java棧、PC寄存器和本地方法區(qū)。其中方法區(qū)和Java堆是所有線程共享的,也就是可以被所有的執(zhí)行引擎實(shí)例訪問(wèn)。每一個(gè)新的執(zhí)行引擎實(shí)例被創(chuàng)建時(shí)會(huì)為這個(gè)執(zhí)行引擎創(chuàng)建一個(gè)Java棧和一個(gè)PC寄存器,如果當(dāng)前正在執(zhí)行一個(gè)Java方法,那么當(dāng)前的這個(gè)Java棧中保存的是該線程中方法調(diào)用的狀態(tài),包括方法的參數(shù)、方法的局部變量、方法的返回值以及運(yùn)算的中間結(jié)果等。而PC寄存器會(huì)指向即將執(zhí)行的下一條指令。
編輯推薦
《深入分析Java Web技術(shù)內(nèi)幕》不僅介紹這些技術(shù)和框架的工作原理,而且結(jié)合示例來(lái)講解,通過(guò)通俗易懂的文字和豐富生動(dòng)的配圖,讓讀者充分并深入理解它們的內(nèi)部工作原理,同時(shí)還結(jié)合了設(shè)計(jì)模式來(lái)介紹這些技術(shù)背后的架構(gòu)思維。
名人推薦
這是一本有關(guān)Java的書(shū),里面講述的大量基礎(chǔ)知識(shí)對(duì)前端開(kāi)發(fā)工程師也非常有幫助。比如中文編碼章節(jié),作者以一個(gè)實(shí)踐者的身份詳細(xì)闡述了編碼問(wèn)題的方方面面??傊@是一本用心的書(shū),是實(shí)踐者的思考和總結(jié)。國(guó)內(nèi)目前很少看到這類(lèi)書(shū)籍,強(qiáng)烈推薦從事Web開(kāi)發(fā)工作的人員購(gòu)買(mǎi)閱讀并實(shí)踐之。 ——王保平,開(kāi)源前端類(lèi)庫(kù)KISSY、SeaJS作者 作者在淘寶做了很:多Java Web方面的改造項(xiàng)目,在Java Web的相關(guān)技術(shù)上有深入的掌握,并積累了豐富的經(jīng)驗(yàn)。在這本書(shū)中作者不僅向讀者展示了這類(lèi)大改造項(xiàng)目所需的知識(shí)。還展示了Java Web更為全景的技術(shù)知識(shí)體系,值得Java Web開(kāi)發(fā)人員閱讀。 ——林昊,淘寶資探深技術(shù)專(zhuān)家、China OSGi User Group總監(jiān) 從第一次拜讀相關(guān)內(nèi)容開(kāi)始,就可以感覺(jué)到作者并不是簡(jiǎn)簡(jiǎn)單單地講述一個(gè)技術(shù)或者概念,他的分析和講解十分深入,并且可以很好地聚焦讀者的思路,尤其是在Java Web、Servlet規(guī)范及字符串處理方面,都有很優(yōu)秀的內(nèi)容。在眾多向developerWorks投稿的國(guó)內(nèi)作者中,無(wú)論從文章的質(zhì)量看,還是從內(nèi)容的選題方向看,作者的文章都可稱(chēng)是上乘之作。同時(shí),他的多篇文章還得到了廣大網(wǎng)站讀者的好評(píng),其訪問(wèn)量、評(píng)分及評(píng)論的數(shù)量均名列前茅。 ——?jiǎng)⑦_(dá)
圖書(shū)封面
圖書(shū)標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載
深入分析Java Web技術(shù)內(nèi)幕 PDF格式下載
250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版