欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMVC適配器模式作用范圍介紹

 更新時間:2023年04月12日 08:31:13   作者:這堆干貨有點猛  
適配器這個詞我們應該很熟悉,天天都在使用,手機充電時,電源線頭頭就叫電源適配器,干什么用的呢?把220V電壓轉換成手機充電時使用的電壓,那么適配器是不是很好理解了,下面看一下

Spring MVC 啟動的關鍵流程我們已經(jīng)學習了 Handler 與 HandlerMapping,還未掌握的小伙伴可以翻看前面的文章進行學習,今天我們將進入啟動的第四步,了解 HandlerAdapter 的基本實現(xiàn)與作用。

HandlerAdapter的作用

HandlerAdapter 的作用是將 HTTP 請求與控制器之間的接口進行轉換。它接受一個處理請求的控制器(Handler,任何實現(xiàn)了Controller接口或者注解了 @Controller注解的類),并將請求的參數(shù)、請求的類型、響應的類型等信息適配給控制器進行處理,最終將處理結果封裝成一個 ModelAndView 對象返回給 DispatcherServlet。

HandlerAdapter 的主要作用包括:

請求參數(shù)適配

當 Handler 方法需要參數(shù)時,HandlerAdapter 會根據(jù)參數(shù)類型和名稱,將請求中的參數(shù)適配給 Handler 的方法。例如,當 Handler 方法需要一個 String 類型的參數(shù)時,HandlerAdapter 會從請求中獲取參數(shù),并將其轉換成 String 類型的參數(shù)傳遞給 Handler 的方法。

請求類型適配

HandlerAdapter 還負責將請求的類型適配給 Handler。例如,當請求為 GET 請求時,HandlerAdapter 會調(diào)用控制器方法中的 GET 方法;當請求為 POST 請求時,HandlerAdapter 會調(diào)用 Handler 中的 POST 方法。

響應類型適配

Handler 返回的結果通常應該是一個 ModelAndView 對象,因此 HandlerAdapter 負責將 Handler 的返回結果適配給 ModelAndView 對象。例如,當 Handler 返回一個字符串時,HandlerAdapter 會將該字符串封裝成 ModelAndView 對象并返回給 DispatcherServlet。

HandlerAdapter的源碼實現(xiàn)

HandlerAdapter 接口定義了一個方法,即 handle() 方法,用于處理請求并返回 ModelAndView 對象。

Spring MVC 框架提供了多個 HandlerAdapter 的實現(xiàn)類,主要包括以下幾個:

HandlerAdapter
SimpleControllerHandlerAdapter
HttpRequestHandlerAdapter
AnnotationMethodHandlerAdapter
RequestMappingHandlerAdapter

下面以 RequestMappingHandlerAdapter 為例,介紹 HandlerAdapter 的源碼實現(xiàn)。

public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    if (handler instanceof HandlerMethod) {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        ModelAndView mav = new ModelAndView();
        mav.setViewName(getViewName(handlerMethod));
        mav.addAllObjects(getModelAndView(handlerMethod, request, response));
        return mav;
    } else {
        throw new IllegalArgumentException("handler is not a HandlerMethod");
    }
}

該方法接受三個參數(shù):HttpServletRequest、HttpServletResponse 和 Object。其中,HttpServletRequest 和 HttpServletResponse 分別表示當前請求和響應對象,Object 表示當前請求所對應的 Handler 的 HandlerMethod 對象。

在 handle() 方法中,

  • 首先判斷傳入的 Handler 是否為 HandlerMethod 類型。
  • 如果是,則強制轉換為 HandlerMethod 對象,并初始化一個 ModelAndView 對象。
  • 然后,通過 getViewName() 方法獲取視圖名稱,并通過 getModelAndView() 方法獲取控制器方法的參數(shù)值并封裝成 ModelAndView 對象。
  • 最后,將 ModelAndView 對象返回給 DispatcherServlet。

總結

HandlerAdapter 通過適配器模式將 HTTP 請求與 Handler 之間的接口進行轉換,從而實現(xiàn)了請求的分發(fā)和處理。

HandlerAdapter 通過 handle() 方法將請求參數(shù)適配給 Handler 參數(shù),將請求的類型適配給 Handler,將響應的類型適配給 ModelAndView 對象,并最終將 ModelAndView 對象返回給 DispatcherServlet。

Spring MVC 框架提供了多個 HandlerAdapter 的實現(xiàn)類,其中最常用的是 RequestMappingHandlerAdapter。RequestMappingHandlerAdapter 支持使用 @RequestMapping 注解來定義請求映射。

到此這篇關于SpringMVC適配器模式作用范圍介紹的文章就介紹到這了,更多相關SpringMVC適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringCloudAlibaba整合Feign實現(xiàn)遠程HTTP調(diào)用的簡單示例

    SpringCloudAlibaba整合Feign實現(xiàn)遠程HTTP調(diào)用的簡單示例

    這篇文章主要介紹了SpringCloudAlibaba 整合 Feign 實現(xiàn)遠程 HTTP 調(diào)用,文章中使用的是OpenFeign,是Spring社區(qū)開發(fā)的組件,需要的朋友可以參考下
    2021-09-09
  • SpringBoot Pom文件依賴及Starter啟動器詳細介紹

    SpringBoot Pom文件依賴及Starter啟動器詳細介紹

    這篇文章主要介紹了SpringBoot Pom文件的依賴與starter啟動器的作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • 解決@CachePut設置的key值無法與@CacheValue的值匹配問題

    解決@CachePut設置的key值無法與@CacheValue的值匹配問題

    這篇文章主要介紹了解決@CachePut設置的key的值無法與@CacheValue的值匹配問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java的外部類為什么不能使用private和protected進行修飾的講解

    Java的外部類為什么不能使用private和protected進行修飾的講解

    今天小編就為大家分享一篇關于Java的外部類為什么不能使用private和protected進行修飾的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • SpringBoot封裝響應處理超詳細講解

    SpringBoot封裝響應處理超詳細講解

    這篇文章主要介紹了SpringBoot封裝響應處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-12-12
  • IDEA集成MyBatis Generator插件的使用

    IDEA集成MyBatis Generator插件的使用

    這篇文章主要介紹了IDEA集成MyBatis Generator插件的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • spring boot(四)之thymeleaf使用詳解

    spring boot(四)之thymeleaf使用詳解

    Thymeleaf 是一個跟 Velocity、FreeMarker 類似的模板引擎,它可以完全替代 JSP 。接下來通過本文給大家介紹spring boot(四)之thymeleaf使用詳解,需要的朋友可以參考下
    2017-05-05
  • 一文教會你使用jmap和MAT進行堆內(nèi)存溢出分析

    一文教會你使用jmap和MAT進行堆內(nèi)存溢出分析

    本文介紹關于jmap和MAT的使用來進行堆內(nèi)存溢出分析,因為這個內(nèi)存溢出是我們手動構造出來的,查找比較簡單,真的到了生產(chǎn)上面需要我們仔細排除
    2021-09-09
  • springmvc集成shiro登錄權限示例代碼

    springmvc集成shiro登錄權限示例代碼

    本篇文章主要介紹了springmvc集成shiro登錄權限示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • JAVA編程實現(xiàn)TCP網(wǎng)絡通訊的方法示例

    JAVA編程實現(xiàn)TCP網(wǎng)絡通訊的方法示例

    這篇文章主要介紹了JAVA編程實現(xiàn)TCP網(wǎng)絡通訊的方法,簡單說明了TCP通訊的原理并結合具體實例形式分析了java實現(xiàn)TCP通訊的步驟與相關操作技巧,需要的朋友可以參考下
    2017-08-08

最新評論