Skip to content

Latest commit

 

History

History
48 lines (28 loc) · 2.12 KB

18131-the-controller-controllerclassnamehandlermapping.md

File metadata and controls

48 lines (28 loc) · 2.12 KB

18.13.1Controller ControllerClassNameHandlerMapping

ControllerClassNameHandlerMapping类是HandlerMapping实现,它使用约定来确定请求URL和处理这些请求的Controller实例之间的映射。

考虑以下简单的Controller实现。 请特别注意class的名称。

public class ViewShoppingCartController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
        // the implementation is not hugely important for this example...
    }

}

这里是相应的Spring Web MVC配置文件的一个片段:

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

<bean id="viewShoppingCart" class="x.y.z.ViewShoppingCartController">
    <!-- 根据需要注入依赖关系... -->
</bean>

ControllerClassNameHandlerMapping查找在其应用程序上下文中定义的所有各种处理程序(或Controller)Bean,并从名称中除去Controller以定义其处理程序映射。 因此,ViewShoppingCartController映射到/viewshoppingcart *请求URL。

让我们来看一些更多的例子,让中心思想变得非常熟悉。 (请注意URL中的所有小写字母,而不是骆驼式的Controller类名称。)

  • WelcomeController映射到/welcome*请求URL

  • HomeController映射到/home*请求URL

  • IndexController映射到/index*请求URL

  • RegisterController映射到/register*请求URL

MultiActionController处理程序类的情况下,生成的映射稍微复杂一些。 以下示例中的Controller名称假定为MultiActionController实现:

  • AdminController映射到/admin/*请求URL

  • CatalogController映射到/catalog/*请求URL

如果按照惯例将Controller实现命名为xxxController,那么ControllerClassNameHandlerMapping将为您节省定义和维护SimpleUrlHandlerMapping(或类似的)的繁琐工作。

ControllerClassNameHandlerMapping类扩展了AbstractHandlerMapping基类,因此您可以像处理许多其他HandlerMapping实现一样定义HandlerInterceptor实例和其他所有内容。