没有注释的Spring MVC 3.1?


问题内容

我从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(从petclini.web.ClinicController更改)?

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

如果这有效的话。

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

问候,


问题答案:

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

分派器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注解配置的控制器

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

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

如果要对@Controller注释使用自己的处理程序。您可能可以研究ClassPathBeanDefinitionScannerDefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods