【JavaEE进阶】——Spring Web MVC (响应)

目录

[🚩学习Spring MVC](#🚩学习Spring MVC)

🎈返回静态网页

🎈返回数据@ResponseBody

🎈返回html代码片段

🎈返回JSON

🎈设置状态码

🎈设置Header


🚩学习Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.
咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互
主要分以下三个⽅⾯:

    1. 建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
    1. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.
    1. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.

⽐如⽤⼾去银⾏存款

    1. 建⽴连接: 去柜台
    1. 请求: 带着银⾏卡, ⾝份证去存款
    1. 响应: 银⾏返回⼀张存折.

对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC

上一章我们学了用spring mvc进行从客户端发出的请求中获取参数的功能。

  • 1.传递数组 同一个请求参数有多个时,会自动封装成数组
  • 2.传递集合 @RequestParam
  • 3.传递JSON @RequestBody (最重要,将json语句转成对象)
  • 4.上传文件 @RequestPart
  • 5.Cookie & Session & Header

<1>结合传统的获取方式

<2>简洁获取方式(注解获取)

@CookieValue

@SessionAttribute

@RequestHeader

cookie和Session的区别,两者都是会话机制,会话就相当于对话,cookie是客户端机制,session是服务器机制,它们之间是由sessionId作为桥梁进行关联的。在Cookie中保存Session ID,然后服务器根据这个ID来管理和存取Session数据,从而平衡安全性和性能。


这一章通过学习spring MVC如何返回响应给客户端。


🎈返回静态网页

创建前端页面index.html,注意路径,路径是在src/main/resources/static路径下。

html前端代码:

后端代码:

复制代码
@RequestMapping("/return2")
@Controller
public class ReturnController2 {
    @RequestMapping("/index")
    public String returnIndex(){
        return "/index.html";
    }
}

返回的是index.html的视图

我们如何返回index.html中的数据呢?

我们就需要用到注解@RestController。

@RestController包含了@Controller和@ResponseBody,如果我们想返回视图就加上@Controller,如果我们想返回视图我们需要在@Controller的基础上加上@ResponseBody注解,因为@RestController是包含了@Controller和@ResponseBody注解,只有@RestController才能返回数据信息

单有@ResponseBody返回数据是不行的,我们需要@Controller告诉spring帮我们管理这个,后续我们要访问这段代码的时候,才能访问到。@Controller是类注解,能让spring管理着这个类,需要访问的时候,我们就可以访问。

综上所述:返回数据【@Controller+@ResponseBody】或者【@RestController】

返回视图 @Controller

  • @Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.
  • @ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息

@Target

@Target ({ElementType.TYPE})表示类类型(修饰的是对象)

@Retention(RetentionPolicy.RUNTIME)表示生命周期

@RestController

@Controller+@ResponseBody


🎈返回数据@ResponseBody

@ResponseBody可以修饰类也可以修饰方法。

  • 修饰类的时候,表示这个类下的所有方法,返回的均为数据

如果一个类中的所有方法返回的都是数据,我们就把这个注解加在类上。

  • 修饰方法时,表示该方法返回的是数据

🎈返回html代码片段

复制代码
   @ResponseBody
    @RequestMapping("/returnHtml")
    public String returnHtml(){
        return "<h1>返回HTML代码片段<h1>";
    }

🎈返回JSON

  • 当我们接口返回的是String时,content-Type是text/html

    复制代码
    @ResponseBody
      @RequestMapping("/returnDate")
      public String returnIndex2(){
          return "查看视图需要的数据";
      }

  • 当我们的接口返回的是对象时,content-Type自动设置成application/json

    复制代码
      //返回JSON
      @ResponseBody
      @RequestMapping("/returnJson1")
      public Person returnJson(){
          Person person=new Person();
          person.setAge(20);
          person.setName("张老师");
          person.setId(1);
          return person;
      }

复制代码
   @ResponseBody
    @RequestMapping("/returnJson2")
    public Map<Integer,String> returnJson2(){
        Map<Integer,String>map=new HashMap<>();
        map.put(1,"张三");
        map.put(2,"李四");
        map.put(3,"王五");
        return map;
    }

🎈设置状态码

复制代码
  @ResponseBody
    @RequestMapping("/setStatus")
    public String setStatus(HttpServletResponse response){
        response.setStatus(401);
        return "设置状态码";
    }

🎈设置Header

复制代码
 @ResponseBody
    @RequestMapping(value = "/setHeader",produces = "application/json;charset=utf-8")
    public String setHeader(HttpServletResponse response){
        return "{\"ok\",1}";
    }

不生气,不吃醋,就开开心心的就好了。

相关推荐
小桥风满袖19 小时前
极简三分钟ES6 - Promise
前端·javascript
breeze_whisper19 小时前
当前端收到一个比梦想还大的数字:BigInt处理指南
前端·面试
小喷友19 小时前
阶段四:实战(项目开发能力)
前端·rust
小高00719 小时前
性能优化零成本:只加3行代码,FCP从1.8s砍到1.2s
前端·javascript·面试
子兮曰19 小时前
🌏浏览器硬件API大全:30个颠覆性技术让你重新认识Web开发
前端·javascript·浏览器
ponnylv19 小时前
深入剖析Spring Boot自动配置原理
spring boot·spring
即兴小索奇19 小时前
Google AI Mode 颠覆传统搜索方式,它是有很大可能的
前端·后端·架构
大虾写代码19 小时前
nvm和nrm的详细安装配置,从卸载nodejs到安装NVM管理nodejs版本,以及安装nrm管理npm版本
前端·npm·node.js·nvm·nrm
星哥说事19 小时前
下一代开源 RAG 引擎,让你的 AI 检索与推理能力直接起飞
前端
....49219 小时前
Vue3 与 AntV X6 节点传参、自动布局及边颜色控制教程
前端·javascript·vue.js