Spring MVC九大元件簡介說明
下文筆者講述Spring MVC九大元件簡介說明,如下所示
HandlerMappings
HandlerMapping是用來查詢Handler
也就是處理器
具體的表現形式可以是類也可以是方法
如:
標註了@RequestMapping每個method都可以看成是一個Handler
由Handler來負責實際的請求處理
HandlerMapping 在請求到達之後
它的作用便是找到請求相應的處理器Handler和Interceptors
HandlerAdapters
由於Servlet的方法結構都是如doService(HttpServletRequest req, HttpServletResponse resp)
,讓固定的Servlet處理方法呼叫Handler來進行處理,這一步工作便是 HandlerAdapter要做的事。
HandlerExceptionResolvers
用來處理Handler過程中產生的異常情況的元件
此元件的作用是根據異常設定ModelAndView
之後再交給render方法進行渲染,而render便將ModelAndView渲染成頁面
不過有一點
HandlerExceptionResolver只是用於解析對請求做處理階段產生的異常而渲染階段的異常
這也是Spring MVC元件設計的一大原則分工明確互不干涉。
ViewResolvers
這個元件的主要作用,便是將String型別的檢視名和Locale解析為View型別的檢視
這個介面只有一個resolveViewName()方法。
從方法的定義就可以看出,Controller層返回的String型別的檢視名viewName ,
最終會在這裡被解析成為View.View是用來渲染頁面的
它會將程式返回的引數和資料填入模板中,最終生成html檔案
ViewResolver在這個過程中,主要做兩件大事
即ViewResolver 會找到渲染所用的模板(使用什麼模板來渲染?)
和所用的技術(其實也就是檢視的型別,如JSP啊還是其他什麼Blabla的)填入引數
預設情況下,Spring MVC會為我們自動配置一個InternalResourceViewResolver,這個是針對JSP型別檢視的。
RequestToViewNameTranslator
從Request中獲取viewName
ViewResolver是根據ViewName查詢View
但有的 Handler處理完成之後
沒有設定View也沒有設定ViewName
便要通過這個元件來從Request中查詢viewName。
LocaleResolver
LocaleResolver用於從request 中解析出Locale
在中國大陸地區
Locale當然就會是zh-CN之類
用來表示一個區域。這個類也是i18n的基礎。
ThemeResolver
這個類是用來解析主題的
主題,就是樣式,圖片以及它們所形成的顯示效果的集合
Spring MVC中一套主題對應一個properties檔案
裡面存放著跟當前主題相關的所有資源
如圖片,css樣式等。建立主題非常簡單,只需準備好資源
然後新建一個“主題名.properties”並將資源設定進去
放在classpath下,便可以在頁面中使用了
Spring MVC中跟主題有關的類
有ThemeResolver, ThemeSource和Theme。ThemeResolver負責
從request中解析出主題名
ThemeSource則根據主題名找到具體的主題
其抽象也就是 Theme
通過Theme來獲取主題和具體的資源。
MultipartResolver
MultipartResolver用於處理上傳請求
通過將普通的Request包裝成MultipartHttpServletRequest來實現
MultipartHttpServletRequest
可以通過getFile(直接獲得檔案,如果是多個檔案上傳
還可以通過呼叫getFileMap得到Map<FileName, File>
MultipartResolver的作用就是用來封裝普通的request
使其擁有處理檔案上傳的功能
FlashMapManager
```
FlashMap用於重定向Redirect時的引數資料傳遞 如,在處理使用者訂單提交時,為了避免重複提交,可以處理完post請求後redirect到一個get請求 這個get請求可以用來顯示訂單詳情之類的資訊。這樣做雖然可以規避使用者重新整理重新提交表單的問題 但是在這個頁面上要顯示訂單的資訊,那這些資料從哪裡去獲取呢 因為redirect重定向是沒有傳遞引數這一功能的 如果不想把引數寫進url(其實也不推薦這麼做,url有長度限制不說, 把引數都直接暴露,感覺也不安全),那麼就可以通過flashMap來傳遞。 只需要在redirect 之前,將要傳遞的資料寫入request( 可以通過ServletRequestAttributes.getRequest()獲得)的屬性 OUTPUT_FLASH_MAP_ATTRIBUTE中 在redirect之後的handler中 spring 就會自動將其設定到 Model中,在顯示訂單資訊的頁面上, 就可以直接從 Model中取得資料了。而FlashMapManager就是用來管理FlashMap ```
- 通過自動化單元測試的形式守護系統架構
- 如何實現資料庫讀一致性
- 什麼是微服務的可擴充套件性、高可用性和效能伸縮?
- 詳解 MongoDB 索引優化
- 搜尋中常見資料結構與演算法探究
- 各大中介軟體底層技術-分散式一致性協議 Raft 詳解
- Java多執行緒批量操作,居然有人不做事務控制?
- Java 下資料業務邏輯開發技術 JOOQ 和 SPL
- spring中每個模組都具有什麼功能呢?
- Spring MVC九大元件簡介說明
- SpringBoot 中使用 @Valid 註解 Exception 全域性處理器優雅處理引數驗證
- maven引入本地jar包,執行時報錯"java.lang.NoClassDefFoundError"--如何處理呢?
- 說說 Spring 定時任務如何大規模企業級運用
- 掌握這些 Spring Boot 啟動擴充套件點,已經超過 90% 的人了!
- 高併發下秒殺商品,你必須知道的9個細節