springMVC controller配置方式总结

一直弄不清在配置文件里怎么配置与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中是否一定要实现或继承上述红色字体的接口/类,再调查,以后再添加对此的理解。

原文地址:https://www.cnblogs.com/ysloong/p/6388962.html