一直弄不清在配置文件里怎么配置与controller相关的bean,今天一次性就自己知道的做个总结。
第一种:不配置controller 的bean。(注解的方式) 在dispatch-servlet.xml中,在beans节点下配置context:component-scan节点 <!-- 启用spring注解--> <context:component-scan base-package="com.loong.controller" /> 这种方式需要在Controller对象上使用@RequestMapping("hello")指定方法对应处理的路径,比如一下两种方式: 举例1:url:http://localhost:8080/demo1/welcome/hello 1.@Controller 2.@RequestMapping("/welcome") 3.public class HelloWorldController { 4.@RequestMapping(value="/hello" ,method=RequestMethod.GET) 5.public String printWelcome(ModelMap model){ 6.model.addAttribute("message" ,"Spring 3 MVC Hello World"); 7. return "hello"; } 8.} 举例2:url:http://localhost:8080/demo1/home 1.@Controller 2.public class HomeController { 3. @RequestMapping("home") 4. public String home(){ 5.return "home"; } 6.} 第二种方式配置controller的bean(url匹配bean) 在xxx-servlet.xml中 <context:component-scan base-package="com.controller" /> <!-- HandlerMapping --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> <!-- HandlerAdapter --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 处理器 --> <bean name="/hello" class="com.controller.HelloWorldController" /> 提示:关于写不写HandlerMapping 和HandlerAdapter的问题,参考: http://www.imooc.com/article/4293 这种情况Controller类要实现Controller接口: public class HelloWorldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception { // TODO Auto-generated method stub ModelAndView mv = new ModelAndView(); mv.addObject("message", "HelloWorld"); mv.setViewName("hello"); return mv; } 第三种配置Controller中bean的方式,使用一个统一配置集合,对各个URL对应的Controller做关系映射 在xxx-servlet中 <bean id="loginController" class="com.msm2.controller.LoginController" /> <bean id="mainController" class="com.msm2.controller.MainController" /> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="login">loginController</prop> <prop key="userLogin">mainController</prop> </props> </property> </bean> 在Controller类中
url:http://localhost:8080/msm2/login @Controller public class LoginController extends AbstractController{ @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView(); mav.addObject("login"); return mav; } }
至于在Controller中是否一定要实现或继承上述红色字体的接口/类,再调查,以后再添加对此的理解。