6

我正在使用 Spring 3.1 开始一个新项目,并且已经深入了解了有关如何使用 @Controller 注释的所有文档和论坛意见。

我个人不喜欢为 MVC 使用注解;我更喜欢使用 SimpleUrlHandlerMapping 将 web 应用程序的所有 URL 放在一个地方。

此外,从以前使用 Spring 2.x 的许多工作来看,我非常习惯于 BaseCommandController 层次结构。

我一直很喜欢 Spring,因为它赋予了力量而不受限制。现在我发现 Spring MVC 迫使我将 URL 放入 java 源中,这意味着(a)我无法将控制器映射到多个 URL,并且(b)要发现 webapp 中正在使用哪些 URL,我必须扫描通过不同的java源文件,我觉得不切实际。

请问@Controller 与 SimpleUrlHandlerMapping 结合的推荐方法是什么?


更新:

嗨,戴夫,您是说您可以像这样映射多个 URL(从 petcini.web.ClinicController 更改)?

@RequestMapping({"/vets", "/another"})
public ModelMap vetsHandler() {

如果这行得通,那么很好。

我的问题仍然存在:如果我不想在我的 java 源代码中使用 URL,如何最好地将它们与 @Controller 类映射?

问候,

4

1 回答 1

3

这是一个支持注释和非注释控制器的简单设置。

调度程序 servlet 配置 xml

<mvc:annotation-driven/>
<bean id="testController" class="com.test.web.TestController"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
      <value>
      /test=testController
      </value>
  </property>
  <property name="order" value="0"/>
</bean>

一个简单的 URL 映射控制器

public class TestController implements Controller {

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        PrintWriter responseWriter = response.getWriter();
        responseWriter.write("test");
        responseWriter.flush();
        responseWriter.close();
        return null;
    }
}

mvc annotation-config 的控制器

@Controller
@RequestMapping("/home")
public class HomeController {

    @RequestMapping(method = RequestMethod.GET)
    @ResponseBody
    public String dashboard(Model model, HttpServletRequest request) {
        return "home";
    }
}

如果您想使用自己的处理程序进行 @Controller 注释。您可能可以查看ClassPathBeanDefinitionScannerand DefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods

于 2012-07-05T12:57:37.240 回答