【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}";
    }

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

相关推荐
customer082 分钟前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
qq_3901617718 分钟前
防抖函数--应用场景及示例
前端·javascript
小白冲鸭39 分钟前
【报错解决】使用@SpringJunitConfig时报空指针异常
spring·java后端开发
John.liu_Test1 小时前
js下载excel示例demo
前端·javascript·excel
Yaml41 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事1 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶1 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo1 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v1 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
知孤云出岫1 小时前
web 渗透学习指南——初学者防入狱篇
前端·网络安全·渗透·web