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

歡迎訪問 生活随笔!

生活随笔

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

javascript

Spring mvc HandlerMapping 实现机制

發布時間:2024/9/30 javascript 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring mvc HandlerMapping 实现机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

當DispatcherServlet接受到客戶端的請求后,SpringMVC 通過 HandlerMapping 找到請求的Controller。
HandlerMapping 在這里起到路由的作用,負責找到請求的Controller。

Spring MVC 默認提供了4種 HandlerMapping的實現

  • org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
    通過配置請求路徑和Controller映射建立關系,找到相應的Controller
  • org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping
    通過 Controller 的類名找到請求的Controller。
  • org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
    通過定義的 beanName 進行查找要請求的Controller
  • org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
    通過注解 @RequestMapping(“/userlist”) 來查找對應的Controller。
  • HandlerMapping 的4種配置

    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/userlist.htm">userController</prop></props></property> </bean><bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/><bean id="userController" name="/users" class="cn.com.infcn.web.controller.UserController"></bean>

    UserController

    @Controller public class UserController extends AbstractController {@Override@RequestMapping("/userlist")protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)throws Exception {List<User> userList = new ArrayList<User>();userList.add(new User("zhangsan", 18));userList.add(new User("list", 16));return new ModelAndView("userList", "users", userList);} }

    HandlerMapping 4種訪問路徑

  • SimpleUrlHandlerMapping
    訪問方式: http://ip:port/project/userlist.htm
  • ControllerClassNameHandlerMapping
    訪問方式: http://ip:port/project/user
    注:類的首字母要小寫
  • BeanNameUrlHandlerMapping
    訪問方式: http://ip:port/project/users
    注:bean name屬性必須要以“/”開頭。
  • DefaultAnnotationHandlerMapping
    訪問方式: http://ip:port/project/userlist
    注:@RequestMapping(“/userlist”)定義的路徑
  • HandlerMapping 初始化原理

    繼續上一篇Spring mvc DispatchServlet 實現機制 初始化DispatchServlet的時候,執行了初始化HandlerMapping操作。

    initHandlerMapping() 方法


    1. 判斷detectAllHandlerMappings是否為true,如果為true,則加載當前系統中所有實現了HandlerMapping接口的bean。
    2. 如果為false,則加載bean名稱為“handlermapping”的HandlerMapping實現類。
    3. 如果還沒有找到HandlerMapping,則加載SpvingMVC 配置文件中,默認配置的HandlerMapping。

    detectAllHandlerMappings 設置

    detectAllHandlerMappings 默認為true,如果只想加載自己指定的HandlerMapping,請使用下面的方式指定

    如果這樣指定,則Spring MVC 只會加載這個HandlerMapping,而不會加載配置的其它的HandlerMapping。

    SimpleUrlHandlerMapping

    以SimpleUrlHandlerMapping 為例,簡單分析下HandlerMapping

    從SimpleUrlHandlerMapping 類結構中我們可以發現urlMap屬性。這個urlMap中保存了xml中配置的映射關系,通過setMappings方法填充到urlMap中。

    這個urlMap就充當了SpringMVC的路由功能。

    每個HandlerMapping都會有一個這樣的Map。

    DispatcherServlet.doDispatch()

    當用戶請求時,真正的請求會執行到DispatcherServlet的doDispatch()方法。

    1. 通過getHandler() 方法去查找HandlerMapping中查找對應的Controller,并封裝成HandlerExecutionChain。
    2. 如果找不到,則執行noHandlerFound() 方法。

    getHandler() 方法


    迭代查找所有的HandlerMapping,如果找到則直接返回。

    noHandlerFound() 方法


    如果找不到Controller 則后臺拋出異常或響應給前臺 404。


    想了解更多精彩內容請關注我的公眾號

    本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
    點擊這里快速進入簡書

    GIT地址:http://git.oschina.net/brucekankan/
    點擊這里快速進入GIT

    總結

    以上是生活随笔為你收集整理的Spring mvc HandlerMapping 实现机制的全部內容,希望文章能夠幫你解決所遇到的問題。

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