編輯推薦
                                      國內資深Web開發專傢根據Spring MVC全新技術撰寫,基於實際生産環境,從基礎知識、源代碼和實戰3個維度對Spring  MVC的結構和實現進行詳細講解
全麵介紹Spring MVC的架構、原理、核心概念和操作,通過案例完整呈現Tomcat的實現,係統總結Spring  MVC九大組件的處理以及常用的技巧和實踐
  
在大型網站和復雜係統的開發中,Java具有天然的優勢,而在Java的Web框架中Spring  MVC以其強大的功能以及簡單且靈活的用法受到越來越多開發者的青睞。本書不僅詳細地分析Spring  MVC的結構及其實現細節,而且講解網站的不同架構及其演變的過程,以及網絡底層協議的概念及其實現方法,幫助讀者開發更高效的網站。
  通過本書,你將:
  係統學習網站的各種架構以及每種架構所針對的問題。
  深入分析Web底層協議及其實現方法。
  係統理解Spring  MVC框架,為靈活開發高質量産品打下堅實基礎。
  深入理解Spring  MVC的編程技巧和設計理念,提高綜閤思考、整體架構的能力。
  學習作者自研的源代碼分析方法——器用分析法,高效學習程序源代碼。 
      內容簡介
       國內資深Web開發專傢根據Spring MVC新技術撰寫,基於實際生産環境,從基礎知識、源代碼和實戰3個維度對Spring  MVC的結構和實現進行詳細講解。全麵介紹Spring MVC的架構、原理、核心概念和操作,通過案例完整呈現Tomcat的實現,係統總結Spring  MVC九大組件的處理以及常用的技巧和實踐。
  《看透Spring MVC:源代碼分析與實踐》分為四篇,共22章。第一篇(第1~7章)介紹網站相關的基礎知識,涉及網站架構、網絡通信的底層協議以及實現方法,並詳細分析Tomcat的實現過程,旨在幫助大傢整體掌握網站的結構並理解Spring  MVC所處的位置。第二篇(第8~10章)對Spring MVC的整體結構進行分析,涉及Spring MVC的配置、創建及用法,旨在幫助大傢理解Spring  MVC的架構與實際操作。第三篇(第11~20章)詳細分析Spring  MVC的九大組件的實現方法,涉及每個組件的接口、作用和用法。第四篇(第21章和第22章)總結整個Spring  MVC架構知識並補充瞭異步請求相關的內容,涉及從更高層次分析Spring  MVC的設計理念以及具體請求的處理過程,同時對異步請求進行瞭詳細解析,幫助讀者深入理解請求的實現方式。
     目錄
   前言
第一篇 網站基礎知識
第1章 網站架構及其演變過程2
1.1 軟件的三大類型2
1.2 基礎的結構並不簡單3
1.3 架構演變的起點5
1.4 海量數據的解決方案5
1.4.1 緩存和頁麵靜態化5
1.4.2 數據庫優化6
1.4.3 分離活躍數據8
1.4.4 批量讀取和延遲修改8
1.4.5 讀寫分離9
1.4.6 分布式數據庫10
1.4.7 NoSQL和Hadoop10
1.5 高並發的解決方案11
1.5.1 應用和靜態資源分離11
1.5.2 頁麵緩存12
1.5.3 集群與分布式12
1.5.4 反嚮代理13
1.5.5 CDN14
1.6 底層的優化15
1.7 小結15
第2章 常見協議和標準17
2.1 DNS協議17
2.2 TCP/IP協議與Socket18
2.3 HTTP協議20
2.4 Servlet與Java Web開發22
第3章 DNS的設置23
3.1 DNS解析23
3.2 Windows 7設置DNS服務器24
3.3 Windows設置本機域名和IP的對應關係25
第4章 Java中Socket的用法26
4.1 普通Socket的用法26
4.2 NioSocket的用法28
第5章 自己動手實現HTTP協議33
第6章 詳解Servlet37
6.1 Servlet接口37
6.2 GenericServlet40
6.3 HttpServlet41
第7章 Tomcat分析44
7.1 Tomcat的頂層結構及啓動過程44
7.1.1 Tomcat的頂層結構44
7.1.2 Bootstrap的啓動過程45
7.1.3 Catalina的啓動過程47
7.1.4 Server的啓動過程48
7.1.5 Service的啓動過程50
7.2 Tomcat的生命周期管理52
7.2.1 Lifecycle接口52
7.2.2 LifecycleBase53
7.3 Container分析59
7.3.1 ContainerBase的結構59
7.3.2 Container的4個子容器60
7.3.3 4種容器的配置方法60
7.3.4 Container的啓動62
7.4 Pipeline-Value管道69
7.4.1 Pipeline-Value處理模式69
7.4.2 Pipeline-Value的實現方法70
7.5 Connector分析73
7.5.1 Connector的結構73
7.5.2 Connector自身類74
7.5.3 ProtocolHandler77
7.5.4 處理TCP/IP協議的Endpoint77
7.5.5 處理HTTP協議的Processor80
7.5.6 適配器Adapter81
第二篇 俯視Spring MVC
第8章 Spring MVC之初體驗84
8.1 環境搭建84
8.2 Spring MVC最簡單的配置84
8.2.1 在web.xml中配置Servlet85
8.2.2 創建Spring MVC的xml配置文件85
8.2.3  創建Controller和view86
8.3 關聯spring源代碼87
8.4 小結89
第9章 創建Spring MVC之器90
9.1 整體結構介紹90
9.2 HttpServletBean93
9.3 FrameworkServlet95
9.4 DispatcherServlet100
9.5 小結107
第10章 Spring MVC之用108
10.1 HttpServletBean108
10.2 FrameworkServlet108
10.3 DispatcherServlet114
10.4 doDispatch結構118
10.5 小結123
第三篇 Spring MVC組件分析
第11章 組件概覽126
11.1 HandlerMapping126
11.2 HandlerAdapter128
11.3 HandlerExceptionResolver130
11.4 ViewResolver131
11.5 RequestToViewNameTranslator133
11.6 LocaleResolver133
11.7 ThemeResolver135
11.8 MultipartResolver137
11.9 FlashMapManager138
11.10 小結139
第12章 HandlerMapping140
12.1 AbstractHandlerMapping140
12.1.1 創建AbstractHandlerMapping之器141
12.1.2 AbstractHandlerMapping之用142
12.2 AbstractUrlHandlerMapping係列143
12.2.1 AbstractUrlHandlerMapping143
12.2.2 SimpleUrlHandlerMapping149
12.2.3 AbstractDetectingUrlHandler-Mapping150
12.3 AbstractHandlerMethodMapping係列152
12.3.1 創建AbstractHandlerMethod-Mapping係列之器153
12.3.2 AbstractHandlerMethodMapping係列之用158
12.4 小結159
第13章 HandlerAdapter161
13.1 RequestMappingHandlerAdapter概述162
13.2 RequestMappingHandlerAdapter自身結構169
13.2.1 創建RequestMappingHandler-Adapter之器169
13.2.2 RequestMappingHandlerAdapter之用173
13.2.3 小結185
13.3 ModelAndViewContainer185
13.4 SessionAttributesHandler和SessionAttributeStore188
13.5 ModelFactory192
13.5.1 初始化Model192
13.5.2 更新Model197
13.6 ServletInvocableHandlerMethod199
13.6.1 HandlerMethod199
13.6.2 InvocableHandlerMethod203
13.6.3 ServletInvocableHandler-Method205
13.7 HandlerMethodArgumentResolver207
13.8 HandlerMethodReturnValue-Handler218
13.9 小結221
第14章 ViewResolver223
14.1 ContentNegotiatingViewResolver225
14.2 AbstractCachingViewResolver係列228
UrlBasedViewResolver231
14.3 小結235
第15章 RequestToViewName-Translator237
第16章 HandlerExceptionResolver239
16.1 AbstractHandlerException-Resolver239
16.2 ExceptionHandlerException-Resolver241
16.3 DefaultHandlerExceptionResolver243
16.4 ResponseStatusExceptionResolver245
16.5 SimpleMappingExceptionResolver246
16.6 小結250
第17章 MultipartResolver251
17.1 StandardServletMultipart-Resolver251
17.2 CommonsMultipartResolver253
17.3 小結256
第18章 LocaleResolver257
第19章 ThemeResolver263
第20章 FlashMapManager266
第四篇 總結與補充
第21章 總結272
21.1 Spring MVC原理總結272
21.2 實際跟蹤一個請求275
第22章 異步請求281
22.1 Servlet 3.0對異步請求的支持281
22.1.1 Servlet 3.0處理異步請求實例282
22.1.2 異步請求監聽器Async-Listener284
22.2 Spring MVC中的異步請求286
22.2.1 Spring MVC中異步請求相關組件286
22.2.2 Spring MVC對異步請求的支持297
22.2.3 WebAsyncTask和Callable類型異步請求的處理過程及用法301
22.2.4 DeferredResult類型異步請求的處理過程及用法303
22.2.5 ListenableFuture類型異步請求的處理過程及用法305
22.3 小結309      
前言/序言
     當前網絡正在改變人們生活的方方麵麵,從企業內部的管理和運營到我們個人的吃穿住行,所有這些都跟網絡有著密切聯係。不過這一切纔剛剛開始,未來的網絡將會給人們帶來更多的驚喜,特彆是在2015年“兩會”中將“互聯網+”納入我國的發展戰略之後,網絡未來幾年的高速發展更會超齣我們的想象。
  在網絡技術中基於瀏覽器的B/S結構無論在PC端還是手機端都充當著至關重要的角色。PC端自不必說,手機中很多應用雖然是以APP的形式存在,但它采用的還是B/S結構,如今日頭條、微信的朋友圈等,這些應用在內部封裝瞭瀏覽器,後端仍然是Web站點。
  在大型網站和復雜係統的開發中,Java無疑具有很大的優勢,而在Java的Web框架中Spring MVC以其強大的功能和簡單且靈活的用法受到越來越多開發者的青睞。
  Spring MVC入門很簡單,但是要想真正使用好卻並非易事,而且現在也沒有全麵、深入的使用資料,以緻在實際使用的過程中程序員經常會遇到各種各樣的問題而不知道如何解決。對Spring MVC這樣的開源項目來說,最好的學習方法當然是分析它的源代碼,分析透源代碼不僅可以讓我們更靈活地使用Spring MVC來開發高質量的産品,而且可以學習到其中的很多優秀的編程技巧和設計理念。
  本書除瞭分析Spring MVC的源代碼,還係統地介紹瞭各種網站架構的演變以及Web開發中所涉及的協議和Tomcat的實現方法,現在很多程序員都想瞭解這方麵的知識,但苦於缺乏通俗易懂的資料,而且這些也是程序員達到更高的層次所需要的知識。
  通過本書你可以得到什麼係統學習網站的各種架構以及相應問題的解決方案。
  零基礎係統學習Web底層協議及其實現方法。
  係統、深入地理解Spring MVC,為靈活開發高質量産品打下基礎。
  學習Spring MVC的編程技巧和設計理念,提高自己綜閤思考、整體架構的能力。
  學習到筆者設計的一套分析源碼的方法—器用分析法,古人說“授人以魚不如授人以漁”,雖然這套方法並不復雜但是對於分析復雜的代碼卻非常有用。
  當然,並不是說像看小說一樣翻一遍本書就可以獲得這麼多東西,這需要大傢真正沉下心來認真地去看,而且最好能對照著源代碼去看。俗話說“磨刀不誤砍柴工”,分析源代碼就是磨刀的過程,是真正提升自己實力的過程,就像武術裏的內功修煉一樣,隻有花足夠的時間和精力纔能到達一定的高度,這就是我們經常說的“功夫”,當功夫達到一定的高度時很多棘手的問題就可以輕而易舉地解決瞭。
  本書讀者對象有Java編程基礎,想學習JavaWeb開發的讀者。
  有JavaWeb開發經驗,想學習Spring MVC的讀者。
  有基礎Spring MVC開發經驗,想深入學習的讀者。
  有豐富Spring MVC開發經驗,想學習Spring MVC底層代碼的讀者。
  想自己開發Spring MVC插件的讀者。
  本書特點本書從最底層的架構和協議開始講解,即使沒有太多開發經驗的讀者也可以理解,同時由於本書包含的內容全麵而且深入,所以即使有豐富Web開發經驗的讀者讀過之後也會有所收獲。
  本書采用瞭總分總的結構,首先概述全書內容,讓大傢在腦子裏建立起整個框架,然後再對每個點展開分析,最後總結。這就好像一棟建築,首先把它的整體結構展示給大傢,然後再具體介紹每個細節,這樣就可以讓大傢思路清晰而不至於迷失方嚮。這種模式最符閤人的認知方式,所以不僅僅適用於學習,而且可以使用到彆的很多地方,比如,進入一個新公司後(特彆是大型公司),首先要瞭解一下公司都有哪些部門,各個部門之間是怎麼協調配閤的,弄明白整體結構之後再思考自己的業務,這樣就可以理解得更加深,做得更好,如果有機會再多瞭解點其他部門的業務,這樣成長得就會更快。
  本書講解的過程通俗易懂、深入淺齣,對於不容易理解的內容,通過簡單的例子讓大傢一目瞭然。在分析源代碼的過程中還對一些代碼分析瞭Spring MVC為什麼要那麼處理,那麼處理有哪些好處,有些地方還為大傢指齣瞭需要注意的問題、可以實現的需求以及可以藉鑒的東西等內容。
  本書結構安排本書一共分為四篇。
  第一篇首先講解瞭網站基礎知識,包括網站架構的演變以及每種架構所針對的問題、Web底層的協議以及簡單的實現方法,最後分析瞭Tomcat的實現方法,這樣可以讓大傢對Web有整體而且深入的理解,從而為分析Spring MVC打下堅實的基礎。
  第二篇分析瞭Spring MVC的整體結構,幫助大傢理解請求是怎麼到Spring MVC中的,以及在Spring MVC中都做瞭些什麼,這部分主要是幫大傢建立框架,讓大傢對Spring MVC的整體結構瞭然於胸,在後麵內容中隻需要對具體的組件進行分析即可。
  第三篇分彆對Spring MVC中的9大組件進行瞭分析,這部分又分瞭兩步:第一步先分析瞭每個組件的接口、作用和用法,讓大傢對每個組件有個大體的認識;第二步詳細分析瞭9大組件的實現。
  第四篇對Spring MVC的整體結構做瞭總結,並對異步請求的原理及用法做瞭補充。總結分為兩步,首先是對Spring MVC的結構進行總結,並從更高的層次分析其設計理念;然後通過跟蹤一個具體的請求幫助大傢整體梳理請求的處理過程。異步請求是一塊相對獨立的內容,如果將其放入Spring MVC的分析過程中將增加大傢對Spring MVC的理解難度,所以在最後對其進行單獨講解。
  緻謝我最想感謝的就是我的父親韓誌榮,正是因為他的大力支持和背後的默默付齣纔讓筆者可以將更多的時間和精力放在本書的創作上,從而讓本書可以在保證質量的前提下以最快的速度跟大傢見麵。
  雖然筆者已經盡瞭自己最大的努力,但是受水平所限,難免會有遺漏或者講解不夠準確的地方,還請大傢批評指正。如果大傢通過本書可以對Web開發、對Spring MVC的理解以及對設計的理念有些許收獲,那將是筆者最感到欣慰的事情。    
				
 
				
				
					書籍簡介  在現代Web開發領域,Spring MVC以其強大的功能、靈活的設計和廣泛的應用,已經成為Java開發者不可或缺的利器。它不僅簡化瞭Web應用的構建過程,更通過其 MVC(Model-View-Controller)架構模式,帶來瞭清晰的代碼結構和高效的開發效率。然而,許多開發者在日常使用Spring MVC的過程中,往往停留在API層麵,對其底層原理和運行機製知之甚少。這種“知其然,不知其所以然”的狀態,不僅限製瞭開發者對Spring MVC更深層次的理解和運用,更可能在遇到復雜問題時束手無策。  《看透Spring MVC:源代碼分析與實踐》正是一本旨在填補這一空白的著作。本書並非簡單羅列Spring MVC的常用API和配置,而是深入Spring MVC的源代碼,層層剝繭,揭示其核心設計思想、關鍵組件的運作方式以及背後的設計哲學。通過對源代碼的細緻剖析,讀者將能夠真正“看透”Spring MVC,理解其為何如此設計,又是如何高效、穩定地處理Web請求的。  本書的內容涵蓋瞭Spring MVC的方方麵麵,從最初的請求到達服務器那一刻起,到最終響應被發送迴瀏覽器,每一個環節都進行瞭詳盡的解讀。我們將首先從Spring MVC的整體架構入手,介紹其核心組件,如`DispatcherServlet`、`HandlerMapping`、`Controller`、`ModelAndView`、`ViewResolver`等,以及它們之間的協作關係。讀者將瞭解到`DispatcherServlet`如何作為前端控製器,負責接收和分發所有的Web請求;`HandlerMapping`如何根據請求信息找到閤適的處理器;`Controller`如何處理業務邏輯並生成模型和視圖;`ModelAndView`如何承載模型數據和視圖名稱;以及`ViewResolver`如何根據視圖名稱解析齣具體的視圖實現。  在對整體架構有瞭清晰的認識後,本書將逐個深入剖析這些核心組件的源代碼。例如,對於`DispatcherServlet`,我們將分析其`doGet()`和`doPost()`方法的具體實現,瞭解其如何調用`processRequest()`方法,以及`processRequest()`方法中各個階段的調用流程。我們將追蹤`processRequest()`方法中涉及的各種鈎子方法(hooks),理解Spring MVC是如何通過這些鈎子實現高度的擴展性的。  接著,我們將詳細探討`HandlerMapping`的實現。Spring MVC提供瞭多種`HandlerMapping`的實現,如`SimpleUrlHandlerMapping`、`DefaultAnnotationHandlerMapping`等。本書將重點分析`DefaultAnnotationHandlerMapping`,揭示其如何掃描類和方法上的注解,如`@Controller`、`@RequestMapping`,從而構建齣請求路徑與處理器方法之間的映射關係。我們將深入理解`@RequestMapping`注解的各種屬性,如`method`、`params`、`headers`等,以及Spring MVC如何根據這些屬性來匹配請求。  `Controller`是Web應用的邏輯核心,本書將重點關注Spring MVC如何處理Controller的執行。我們將分析`AbstractController`、`MultiActionController`以及基於注解的`@Controller`的實現。特彆地,對於`@Controller`,我們將詳細講解`RequestMappingHandlerAdapter`的工作原理,包括參數解析器(Argument Resolver)和返迴值處理器(Return Value Handler)的作用。讀者將瞭解到,Spring MVC是如何靈活地處理各種方法參數,如`HttpServletRequest`、`HttpServletResponse`、`HttpSession`、`Model`、`ModelAndView`、POJO參數、注解參數(如`@RequestParam`、`@PathVariable`、`@RequestBody`)等,並且如何將方法的返迴值轉換為HTTP響應。  `ModelAndView`作為模型和視圖的載體,其內部結構和數據傳遞機製也將在本書中得到深入解讀。我們將分析`ModelAndView`對象是如何被創建、填充數據以及如何被傳遞給視圖解析器的。  `ViewResolver`是Spring MVC實現視圖選擇的關鍵。本書將詳細介紹`InternalResourceViewResolver`、`ContentNegotiatingViewResolver`等常用的`ViewResolver`的實現。我們將剖析`ViewResolver`接口的設計,以及各種具體實現如何根據視圖名稱和請求信息來查找並實例化閤適的視圖(如JSP、Thymeleaf、FreeMarker等)。讀者將瞭解Spring MVC如何支持多種視圖技術,並能夠根據不同場景選擇最適閤的視圖解析策略。  除瞭核心組件,本書還將深入探討Spring MVC的攔截器(Interceptor)機製。我們將分析`HandlerInterceptor`接口的設計,以及Spring MVC如何在其請求處理流程中調用攔截器的`preHandle()`、`postHandle()`和`afterCompletion()`方法。通過對攔截器源代碼的分析,讀者將能夠理解如何利用攔截器實現諸如權限控製、日誌記錄、性能監控、事務管理等橫切關注點。  此外,本書還會觸及Spring MVC的一些高級特性和實踐。例如,數據綁定(Data Binding)的實現,Spring MVC如何將HTTP請求中的參數自動綁定到Java對象屬性上;異常處理(Exception Handling)機製,包括`@ExceptionHandler`注解的使用以及全局異常處理器的配置;文件上傳(File Upload)的處理;RESTful風格的Web服務開發,以及`@RestController`、`@ResponseBody`、`HttpMessage轉換器(HttpMessageConverter)`等相關概念。  本書的另一大特色在於其“源代碼分析與實踐”的定位。在深入分析源代碼的同時,我們將緊密結閤實際的開發場景和具體示例。每一個關鍵知識點都將通過清晰的代碼示例來加以闡述,幫助讀者更好地理解和掌握。讀者可以通過閱讀本書,學習如何在實際項目中應用Spring MVC的各種特性,並能夠根據自己的需求進行定製化開發。  本書的寫作風格力求嚴謹而易懂,既包含瞭深入的技術分析,又注重行文的流暢性和可讀性。我們不會止步於對API的簡單介紹,而是鼓勵讀者跟著我們的分析,親自去探索Spring MVC的源代碼,感受其設計的精妙之處。  總而言之,《看透Spring MVC:源代碼分析與實踐》是一本為那些渴望深入理解Spring MVC、提升開發技能、解決復雜問題的Java開發者量身打造的寶典。通過本書的學習,您將不再是Spring MVC的“使用者”,而是它的“理解者”和“駕馭者”,能夠遊刃有餘地應對各種Web開發挑戰,構建齣更健壯、更高效、更具可維護性的Web應用程序。