最近和同事討論一個(gè)spring mvc的問題,問到HandlerMapping與HandlerAdapter有什么關(guān)系?雖然使用spring mvc時(shí)間也不短,但是瞬間能起來的只有兩個(gè)關(guān)鍵詞:

  • @RequestMapping,這個(gè)經(jīng)常用的,每個(gè) Controller下面的action方法上一般都會(huì)定義一個(gè)特有的url路徑。當(dāng)HTTP請(qǐng)求請(qǐng)求發(fā)送到服務(wù)端后會(huì)根據(jù)url來查找應(yīng)該執(zhí)行哪個(gè)Controller下面的哪個(gè)action,我理解為url與java代碼的一個(gè)路由關(guān)系。

    @RequestMapping(value = "/bss/{priceId}", method = RequestMethod.GET)    public ValueResult<ProductPrice> getProductPrice(HttpServletRequest request,                                                                 @Min(value = 1,message = "priceId不合法")                                                                 @PathVariable final long priceId)  {        //省略
    }
  • HandlerInterceptor,這個(gè)也是經(jīng)常用的,做請(qǐng)求攔截時(shí)比較常用。

上面兩個(gè)關(guān)鍵詞盡管與問題有所關(guān)聯(lián),但很明顯不是主要的,核心還是這兩個(gè)接口都是做什么的,兩者之間有什么互動(dòng)。于是我們可以從一個(gè)請(qǐng)求開始調(diào)試下spring mvc的調(diào)用過程,以此來分析它們的作用以及關(guān)系。

網(wǎng)友評(píng)論