SpringMVC-04-Controller

4. Controller及RestFul风格

控制器Controller

  • 控制器提供访问应用程序的行为,通常通过接口定义或注解定义实现;
  • 控制器负责解析用户的请求并将其转化为一个模型;
  • 在SpringMVC中一个控制器类可以包含多个方法;
  • 对于Controller的配置方式有很多种(紧接下文)

实现Controller接口

  1. 编写一个Controller类,ControllerTest1

    public class ControllerTest1 implements Controller {
        public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
            ModelAndView mv = new ModelAndView();
    
            mv.addObject("msg","ControllerTest1");
    
            mv.setViewName("test");
    
            return mv;
        }
    }
    
  2. 编写完毕后,去Spring配置文件中注册请求的bean;name对应请求路径,class对应请求的类

    <bean id="/test" class="com.kuang.controller.ControllerTest1"/>
    
  3. 编写前端的test.jsp,对应视图解析器

  4. 配置Tomcat运行测试,这里的项目发布名配置就是一个/,所以请求不用加项目名。

说明:

  • 实现接口的方法比较古老,不建议使用;
  • 缺点:一个控制器类只有一个方法;

使用注解方法

  • @Controller注解类型用于声明Spring类的实例是一个控制器,另外还有3个等效的注解:

    • Component
    • @Service
    • @Repository
  • Spring可以使用扫描机制找到所有基于注解的控制器类,为了保证Spring找到你的控制器,需要在配置文件中声明组件扫描;

    <!--自动扫描包 让指定包下的注解生效 由IOC容器统一管理-->
    <context:component-scan base-package="com.kuang.controller"/>
    
  • 增加一个ControllerTest2类,使用注解实现;

    @Controller //代表这个类会被Spring接管,被这个注解的类,中的所有方法,如果返回值是String,并且可以跳转,那么就会被视图解析器解析
    public class ControllerTest2 {
        @RequestMapping("/test2")
        public String test1(Model model){
    
            model.addAttribute("msg","ControllerTest2");
    
            return "test";
        }
    }
    
  • 运行Tomcat测试

多个请求可以指向一个视图,但页面结果可以不一样,可以看出视图是被复用的,而控制器和视图之间是弱耦合关系。

RequestMapper

@RequestMapper

  • 该注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法。用于类上,表示类中所有的响应请求的方式都是以该地址作为父路径。
原文地址:https://www.cnblogs.com/CodeHuba/p/13608043.html