我正在使用Spring 3.1开始一个新项目,并且已经深入了解了有关如何使用@Controller注释的所有文档和论坛意见。
我个人不喜欢使用MVC注释;我更喜欢使用SimpleUrlHandlerMapping在一个地方提供webapp的所有URL。
此外,从使用Spring 2.x的许多以前的工作中,我已经习惯了BaseCommandController heirarchy。
我一直很喜欢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类映射它们?
此致
答案 0 :(得分:3)
这是一个简单的设置,支持注释和非注释控制器。
Dispatcher 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注释使用自己的处理程序。您可以查看ClassPathBeanDefinitionScanner
和DefaultAnnotationHandlerMapping.determineUrlsForHandlerMethods
。