控制器controller

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

1.实现Controller接口

@FunctionalInterface
//实现该接口的类获得控制器功能
public interface Controller {
	//处理请求并返回一个模型与视图对象
    @Nullable
    ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

编写一个Controller类

public class ControllerTest1 implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg","ControllerTest1");
        modelAndView.setViewName("test");

        return modelAndView;
    }
}

编写完毕后,去spring配置文件中注册请求的bean,name对应请求路径,class对应处理请求的类

<bean class="com.yf.controller.ControllerTest1" name="/test"/>

这样就可以使用了。
说明:

  • 实现接口Controller定义控制器是比较老的方法
  • 缺点是:一个控制器中只有一个方法,如果要多个方法需要定义多个Controller,定义方式比较麻烦。

使用注解@Controller

  • @Controller注解类型用于声明Spring类的实例是一个控制器
  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了Spring能够找到你的控制器,需要在配置文件中声明组件扫描。
<!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
   <context:component-scan base-package="com.yf.controller"/>

然后进行Controller类的编写

@Controller
//代表这个类会被spring接管
//被这个注解的类,中所有的方法,如果返回值是string,并且有具体的页面可以跳转,就会被视图解析器解析
public class ControllerTest2 {
    @RequestMapping("/test2")
    public String test1(Model model){

        model.addAttribute("msg","ControllerTest2");

        return "test";
    }

    @RequestMapping("/test3")
    public String test3(Model model){

        model.addAttribute("msg","ControllerTest3");

        return "test";
    }
}

可以看到一个控制器内的两个方法指向都是同一个视图,但是页面的 结果是不一样的,视图是被复用的,而控制器和视图之间是弱耦合关系。

ResultMapping

  • ResultMapping注解用于映射到控制器类或一个特定的处理程序方法。可用于类和方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
    例如我在一个controller类中写:
@RequestMapping("/t")
public class ControllerTest2 {
    @RequestMapping("/test2")
    public String test1(Model model){

        model.addAttribute("msg","ControllerTest2");

        return "test";
    }

    @RequestMapping("/test3")
    public String test3(Model model){

        model.addAttribute("msg","ControllerTest3");

        return "test";
    }
}

这样要想访问到控制器中的方法就必须在路径上加上/t

java controller调用controller方法 在controller方法中怎么调用接口_SpringMVC