日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringMVC源码分析(4)剖析DispatcherServlet重要组件

發布時間:2025/6/16 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringMVC源码分析(4)剖析DispatcherServlet重要组件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單介紹了一個請求的處理過程, 簡略描述了調用過程,并沒有涉及過多細節,如url匹配,報文解析轉換等。

<SpringMVC源碼分析(2)DispatcherServlet的初始化>:介紹了servlet的初始化過程,尤其initStrategies方法。

本文主要總結DispatcherServlet幾個重要組件的關系。

1.類圖


該類圖并沒有全面的描述SpringMVC相關類,重點說明組件的關系。

該類圖基于springmvc3.0.5版本。

很多類屬性并沒有完全羅列,進行了取舍。

基于DispatcherServlet,而且深度盡量適可而止,否則造成圖復雜混亂。

---------------------------------------------------

2.HanlerMapping組件介紹

2.1?HanlerMapping類圖

HanlerMapping是springmvc中完成url到controller映射的組件。

2.2?HanlerMappingAPI

1 2 3 4 public?interface?HandlerMapping?{ ????//根據選擇策略,返回Handler ????HandlerExecutionChain?getHandler(HttpServletRequest?request)?throws?Exception; }

3.HandlerAdapter

3.1類圖

是MVC framework SPI ;負責具體干活。如調用方法,參數解析等。


3.2 API

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public?interface?HandlerAdapter?{ ???? ???/** ????????????判斷是否可以處理handler ????*/ ???boolean?supports(Object?handler);? ???? ???/** ????*?處理請求 ????*/ ???ModelAndView?handle(HttpServletRequest?request,?HttpServletResponse?response,?Object?handler)?throws?Exception; ???/** ????*?getLastModified ????*/ ???long?getLastModified(HttpServletRequest?request,?Object?handler); }

4.HandlerExceptionResolver

4.1 HandlerExceptionResolver類圖

專門處理異常情況,根據異常情況,構造ModelAndView

4.2 HandlerExceptionResolver API

1 2 3 4 5 6 7 8 9 public?interface?HandlerExceptionResolver?{ ???/** ????*?處理異常 ????*/ ???ModelAndView?resolveException( ?????????HttpServletRequest?request,?HttpServletResponse?response,?Object?handler,?Exception?ex); }

5.? ViewResolver

5.1 ViewResolver類圖

作用:將string的視圖名稱解析為View類型的視圖

5.2 ViewResolver API

1 2 3 4 5 6 7 8 9 public?interface?ViewResolver?{ ???/**? ????*?Resolve?the?given?view?by?name. ???????解析視圖 ????*/ ???View?resolveViewName(String?viewName,?Locale?locale)?throws?Exception; }

6.RequestToViewNameTranslator

默認實現是DefaultRequestToViewNameTranslator.主要作用是根據請求信息獲取視圖名稱。

1 2 3 4 5 public?interface?RequestToViewNameTranslator?{ ???String?getViewName(HttpServletRequest?request)?throws?Exception; }

7.LocaleResolver

7.1 LocaleResolver類圖

從request解析Locale,實現本地化;一般使用在解析視圖時使用;和使用國際化資源和主題時使用

7.2 LocaleResolver API

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public?interface?LocaleResolver?{ ??/** ???*?Resolve?the?current?locale?via?the?given?request. ???*?Should?return?a?default?locale?as?fallback?in?any?case. ???*?@param?request?the?request?to?resolve?the?locale?for ???*?@return?the?current?locale?(never?<code>null</code>) ???*/ ???Locale?resolveLocale(HttpServletRequest?request); ??/** ???*?Set?the?current?locale?to?the?given?one. ???*?@param?request?the?request?to?be?used?for?locale?modification ???*?@param?response?the?response?to?be?used?for?locale?modification ???*?@param?locale?the?new?locale,?or?<code>null</code>?to?clear?the?locale ????*?@throws?UnsupportedOperationException?if?the?LocaleResolver?implementation ????*?does?not?support?dynamic?changing?of?the?theme ???*/ ???void?setLocale(HttpServletRequest?request,?HttpServletResponse?response,?Locale?locale); }

8.ThemeResolver

8.1 ThemeResolver類圖

主要用來設置主題。

8.2 API

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public?interface?ThemeResolver?{ ??/** ???*?Resolve?the?current?theme?name?via?the?given?request. ???*?Should?return?a?default?theme?as?fallback?in?any?case. ???*?@param?request?request?to?be?used?for?resolution ???*?@return?the?current?theme?name ???*/ ???String?resolveThemeName(HttpServletRequest?request); ??/** ???*?Set?the?current?theme?name?to?the?given?one. ???*?@param?request?request?to?be?used?for?theme?name?modification ???*?@param?response?response?to?be?used?for?theme?name?modification ???*?@param?themeName?the?new?theme?name ????*?@throws?UnsupportedOperationException?if?the?ThemeResolver?implementation ????*?does?not?support?dynamic?changing?of?the?theme ???*/ ???void?setThemeName(HttpServletRequest?request,?HttpServletResponse?response,?String?themeName); }

9.MultipartResolver?

默認實現為CommonsMultipartResolver,處理文件上傳請求。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public?interface?MultipartResolver?{ ???/** ????*?Determine?if?the?given?request?contains?multipart?content. ????*/ ???boolean?isMultipart(HttpServletRequest?request); ???/** ????*?Parse?the?given?HTTP?request?into?multipart?files?and?parameters, ????*?and?wrap?the?request?inside?a ????*/ ???MultipartHttpServletRequest?resolveMultipart(HttpServletRequest?request)?throws?MultipartException; ???/** ????*?Cleanup?any?resources?used?for?the?multipart?handling, ????*/ ???void?cleanupMultipart(MultipartHttpServletRequest?request); }

10 總結。

簡單介紹了下各個組件,每個組件都各司其職,互相配合。才有了強大的SpringMVC功能。在以后的文章里,針對每個組件,會結合具體例子,由淺入深式的進行剖析。

另外一個重要的核心部分是HandlerMethodInvoker,涉及的東西比較多,非常有看頭。




本文轉自 randy_shandong 51CTO博客,原文鏈接:http://blog.51cto.com/dba10g/1878735,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的SpringMVC源码分析(4)剖析DispatcherServlet重要组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。