没有注释的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注释使用自己的处理程序。您可能可以研究ClassPathBeanDefinitionScanner
和DefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods
。