SpringMVC核心九大元件剖析

2021-10-17 08:58:55 字數 3162 閱讀 6098

2 handleradapter(處理器介面卡)

handleradapter是乙個介面卡。因為springmvc中的handler可以是任意形式的。只要能處理請求即可。但是把請求交給servlert的時候,由於servlet的方法本身都是doservice(httpservletrequest

response)的形式,要讓固定的servlet處理方呼叫handler來進行處理,便是handleradapter的職責。

3 handlerexceptionreslover

handlerexceptionreslover用於處理handler處理產生的異常情況。它的作用是根據異常的設定modelandview,之後交給渲染方法進行渲染。渲染方法會根據modelandview來渲染成實際的頁面。

4 viewreslover

用於將string型別的頁面名稱和locale解析為view型別的檢視。只有乙個resolveviewname()方法,從方法名稱可以看出controller返回string型別的檢視名稱,然後由viewname最終會被解析成真正的檢視。view是用來渲染頁面的,最終會將程式返回的引數和資料進行模板填充。最終生成視**件(html),

viewreslove主要做了兩件事:

配置:

springmvc對於三大件預設在底層已經進行了註冊和使用(三大件已經存在於springmvc的執行機制中),預設使用的三大件已經過時了(雖然過時,但是依然能夠保證程式執行的),建議我們使用更好更合適的三大件,只需要在springmvc的配置檔案中新增乙個標籤,配置完成後會自動註冊最合適的三大件。

實際應用:

/*

* 用例:url相同,根據請求方式(get/post)不同進入不同方法處理

* */

"gotoresultsameurl",method =

)public modelandview gotoresultsameurlget(modelandview modelandview)

/* * 用例:url相同,根據請求方式(get/post)不同進入不同方法處理

* */

"gotoresultsameurl",method =

)public modelandview gotoresultsameurlpost(modelandview modelandview)

4屬性限定請求引數,支援簡單的表示式語法。

url一樣,根據攜帶引數的不同進入不同的方法處理

url相同,請求方式相同,請求引數不同進入不同hanlder方法處理

param1:表示請求必須包含名為 param1 的請求引數!param1:表示請求不能包含名為 param1 的請求引數param1 != value1:表示請求包含名為 param1 的請求引數,但其值不能為 value1:請求必須包含名為 param1 和param2 的兩個請求引數,且 param1 引數的值必須為 value1

5 requesttonametranslator

主要作用是從請求之中進行獲取viewname,因為viewresolver根據viewname來進行查詢name,但是有的handler並沒有繼續配置view也沒從這個元件中進行查詢viewname.

比如:有的handler(controller)處理完後沒有設定返回型別,比如是void方法,這是就需要從request中獲取viewname

6 localeresolver

從request中解析出locale。locale表示乙個區域,比如zh-cn,對不同的區域的使用者,顯示不同的結果,這就是i18n(springmvc中有具體的***localechangeinterceptor)

7 themeresolver

主要指的時進行主題的切換,類似於不同端之間的主題切換。springmvc對於資源的切換會對應乙個properties檔案。裡面會存放著響應的資源、css等,

建立方式只需宣告properties檔案然後將響應的資源檔案放進去,放在classpath下,之後便可以使用了。springmvc對應的資源檔案類有

themeresolver(負責解析出主題名)。 themesource負責進行根據主題名來進行解析出具體的主題抽象為theme,

theme可以進行獲取具體的主題以及資源

8 multipartresolver

用於處理上傳請求。處理方法是將普通的request包裝成multiparthttpservletrequest,後者可以直接呼叫getfile方法獲取file,如果上傳多個檔案,還可以呼叫getfilemap得到map結構的map。此元件中一共有三個方法,作用分別是判斷是不是上傳請求,將request包裝成multiparthttpservletrequest、處理完後清理上傳過程中產生的臨時資源。

9 flashmapmanager

flashmap用於重定向時引數的傳遞,比如在處理訂單請求的時候為了避免重複提交,可以處理完post請求之後重定向到乙個get請求中,get請求可以用來顯示訂單詳情之類的東西。但是頁面資料**於**呢?因為本身重定向不支援引數傳遞。如果不把引數寫進url(不推薦),那麼可以考慮使用flashmap來進行傳遞,只需要在重定向之前的引數之中進行寫入請求。可以通過servletrequestattribute.gteattributes()來進行獲取屬性output_flash_map_attribute中,這樣在重定向之後的handler之中會自動設定到model之中。在顯示具體資訊的時候直接從model之中進行獲取資料即可。flashmapmanager就是用來管理flashmap的。

SpringMVC九大元件

handleradapter 運用了設計模式中的介面卡模式,統一呼叫不同的handler。handerexceptionresolver viewresolver 將string和locale解析為view。requesttoviewtranslator 從request中提取viewname。lo...

Spring MVC 的九大元件

從名字上看,handleradapter 是乙個介面卡。因為spring mvc中handler 可以是任意形式的,只要能夠處理請求便可。但是把請求交給servlet 的時候,由於servlet 的方法結構都是 doservice httpservletrequest req,httpservlet...

springmvc十六 九大元件

dispatcherservlet中有九個引用型別的屬性,這就是springmvc的九大元件。springmvc在工作的時候,關鍵位置都是由這些元件完成的。multipartresolver used by this servlet 檔案上傳解析器 private multipartresolver...