Spring MVC 控制器類名-處理器映射

2018-07-26 14:39 更新

ControllerClassNameHandlerMapping類是HandlerMapping接口的一個實現(xiàn),它是通過一個約定來解析請求URL及處理該請求的@Controller控制器實例之間的映射關(guān)系。

請看下面一個簡單的控制器實現(xiàn)。請注意留意該類的 名稱

public class **ViewShoppingCartController** implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
        // 這個例子中方法的具體實現(xiàn)并不重要,故忽略。
    }

}

對應(yīng)的Spring Web MVC配置文件如下所示:

<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

<bean id="**viewShoppingCart**" class="x.y.z.ViewShoppingCartController">
    <!-- 注入需要的依賴 -->
</bean>

ControllerClassNameHandlerMapping會查找當(dāng)前應(yīng)用上下文中注冊的所有處理器(也即控制器)bean,并去除類名的Controller后綴作為決定處理器映射的依據(jù)。因此,類名ViewShoppingCartController會被映射到匹配/viewshoppingcart*的請求URL上。

讓我們多看幾個例子,這樣你對于核心的思想會馬上熟悉起來(注意URL中路徑是全小寫,而Controller控制器類名符合駝峰命名法):

  • WelcomeController將映射到/welcome*請求URL
  • HomeController 將映射到/home*請求URL
  • IndexController 將映射到/index*請求URL
  • RegisterController 將映射到/register*請求URL

對于MultiActionController處理器類,映射規(guī)則要稍微復(fù)雜一些。請看下面的代碼,假設(shè)這里的控制器都是MultiActionController的實現(xiàn):

  • AdminController將映射到/admin/*請求URL
  • CatalogController將映射到/catalog/*請求URL

只要所有控制器Controller實現(xiàn)都遵循xxxController這樣的命名規(guī)范,那么ControllerClassNameHandlerMapping能把你從定義維護一個 長長長 SimpleUrlHandlerMapping映射表的重復(fù)工作中拯救出來。

ControllerClassNameHandlerMapping類繼承自 AbstractHandlerMapping基類。因此,你可以視它與其他HandlerMapping實現(xiàn)一樣,定義你所需要的攔截器HandlerInterceptor實例及其他所有東西。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號