SpringMVC


Spring Framework中Web模块包含了 spring-web 、 spring-webmvc 、 spring-websocket 和 spring-webmvc-portlet 4 个模块.
spring-web 模块提供了web开发所需要的基础特性,如文件上传,基于IoC容器初始化 Servlet 监听器等.
spring-webmvc 模块包含了Spring的 MVC 实现,及 REST 方式的web服务.
SpringMVC框架围绕 DispatcherServlet(前端控制器) 这个核心展开,它负责截获请求并将其分派给相应的处理器处理.

1、MVC设计模式介绍

MVC(Model View Controller)是软件工程中的一种软件架构模式,它把软件系统分为模型、视图和控制器三个基本部分.
在这里插入图片描述
Model(模型):😗 是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据.
View(视图):😗 是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的.
Controller(控制器):😗 是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据.

2、@Controller注解

@Controller注解在类上使用,标注该类是Web控制器,其和@Component注解等价,只不过在Web层使用,用来区分类的作用.

3、@RequestMapping注解

@RequestMapping注解可以指定请求与处理方法之间的映射关系,该注解可以在控制器类的级别和其方法级别上使用,例如:

//映射到 test1()方法的路径为 "/test1/1"
@Controller
@RequestMapping("/test1")
public class TestController {
    @RequestMapping(value="/1")
    public String test1(){
        return "forward:/home.html";
    }

@RequestMapping注解能够处理的HTTP请求方法有: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE .
如果要将一个请求映射到一个特定的HTTP方法,需要在@RequestMapping中使用method参数声明HTTP请求所使用的方法类型.例如:

//指定服务提供的请求方法为get
@RequestMapping(value = "/1", method = RequestMethod.GET)
public String test1(){
    return "forward:/home.html"; }

4、控制器方法的返回

这里列举几个常用的返回类型:

👉详细参考

4.1 返回String类型

有两种使用方式:

  1. 返回一个路径的字符串,可以使用 redirect:/服务路径 表示重定向到某个路径,forward:/服务路径
    表示转发到某个路径,如果前边不写默认就是转发.
    例如:
@Controller
public class TestController {
    @RequestMapping("/test1")
    public String test1(){
    	//转发方式跳转页面
        return "forward:/home.html";
   }
}
@Controller
public class TestController {
    @RequestMapping("/test2")
    public String test2(){
    	//重定向方式跳转页面
        return "redirect:/home.html";
   }
}

这里复习一下转发和重定向的区别:
forward:请求成功返回200状态码,只发起一次请求,url不改变,服务端拿到资源路径,把资源作为响应体返回;
redirect:请求成功返回3xx状态码,发起二次请求,url改变,服务端响应3xx+Location,浏览器根据Location自动跳转到资源页面.

  1. @RequestMapping结合@ResponseBody使用,返回的字符串会作为响应体内容. 此时响应的Content-Type为
    text/plain 或 text/html.
    @ResponseBody注解表示将控制器方法的返回序列化作为响应体内容返回前端.
    例如:
//此时页面不会发生跳转而是显示字符串"forward:/home.html"
@Controller
@RequestMapping("/test1")
public class TestController {
    @RequestMapping(value="/1")
    @ResponseBody
    public String test1(){
        return "forward:/home.html";
    }

4.2 返回普通的Java类型

  • 返回类型为Object,一般使用带Getter,Setter方法的模型类

  • 结合@ResponseBody使用,表示将对象序列化后的数据放在响应体返回

  • 在SpringBoot中默认响应的Content-Type为 application/json

  • 非字符串对象会自动序列化为 json字符串

例如:

@Controller
@RequestMapping("/test1")
public class TestController {
    @RequestMapping("/4")
    @ResponseBody
    public Object test4(){
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "张三");
    map.put(2, "李四");
    map.put(3, "王五");
    return map;
    }

在浏览器访问 /test1/4 路径的结果:

{“1”:“张三”,“2”:“李四”,“3”:“王五”}

在application.properties文件中添加:

spring.jackson.serialization.indent-output=true

美化后的结果为:

{
“1” : “张三”,
“2” : “李四”,
“3” : “王五”
}

4.3 返回ResponseEntity

由SpringMVC框架提供的ResponseEntity,可以灵活的设置响应状态码,响应头,响应体,例如:

@RequestMapping("/7")
public ResponseEntity test7(){
    Map<Integer, String> map = new HashMap<>();
    map.put(1, "张三");
    map.put(2, "李四");
    map.put(3, "王五");
    return ResponseEntity.status(200).body(map);
}

5、@ResponseBody注解说明

  • 返回类型为String,表示响应Content-Type: text/plain或text/html,且响应体为控制器方法的字符串返回值.
  • 返回类型为普通Java类型,表示响应Content-Type: application/json,以返回对象序列化为json后作为响应体.
  • @ResponseBody可以使用方法上也可以使用在类上,如果使用在类上表示该类中所有方法都是默认以返回值作为响应体,也就是所有方法都使用@ResponseBody.

如果返回值为null,表示响应体内容为空

6、组合注解

可以使用组合注解来完成同时定义多个注解的效果,如:@RestController,@GetMapping,@PostMapping

  • 在类上使用@RestController = 在类上使用@Controller + @ResponseBody
  • 在方法上使用@GetMapping = 在方法上使用@RequestMapping(RequestMethod=GET)
  • 在方法上使用@PostMapping = 在方法上使用@RequestMapping(RequestMethod=POST)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值