4

按照Spring Source和 Spring in Action 一书的指示,我正在尝试以最小化 xml 配置的方式设置 Spring MVC。但是根据 Spring Source,这是您设置 ControllerClassNameHandlerMap 的方式

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

<bean id="viewShoppingCart" class="x.y.z.ViewShoppingCartController">
    <!-- inject dependencies as required... -->
</bean>

这让我觉得完全没用,因为使用处理程序手动设置 bean 实际上更简单,因为它的 XML 数量大致相同。

现在,《Spring in Action》这本书听起来好像您只需要该代码块中的第一行即可使用 ControllerClassNameHandlerMapping,这将使其更加有用。但是,我还不能让它工作。

有Spring经验的人可以帮帮我吗?

4

2 回答 2

8

这里实际上发生了两种不同的事情:

  1. URL 和控制器之间的映射
  2. 将控制器定义为 Spring bean

对于 #1,如果您按照之前的方式定义 ControllerClassNameHandlerMapping,则会处理 URL 到控制器的映射。例如,http ://example.com/context/home -> HomeController

对于 #2,您可以像之前那样定义控制器 bean。或者,您可以继续使用 Spring 2.5 风格的 @Controllers 注释和自动装配,这样就不需要 XML bean 定义。与否,选择权在你。

使用 ControllerClassNameHandlerMapping 避免的是必须将所有潜在的 URL 显式映射到控制器。我们已经成功地使用了它。

您可能想要使用的另一件事是 DefaultRequestToViewNameTranslator:

<!-- Generates view names based on the request url (e.g. "/home.htm" => "home", "/user/list.htm" => "user/list", etc.) -->
<bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/>

我们还使用 UrlBasedViewResolver:

<!-- Maps view names to tiles view definitions files.  E.g., "home" => "home", etc.  -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>
于 2009-03-19T17:27:00.797 回答
0

我不认为使用 ControllerClassNameHandlerMapping 是一种好的工程实践,因为它确实会阻止您对 Controller java 类进行重构工作。

于 2009-08-25T00:27:50.767 回答