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

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

相关推荐
临枫541几秒前
Nuxt3封装网络请求 useFetch & $fetch
前端·javascript·vue.js·typescript
前端每日三省2 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
小刺猬_9852 分钟前
(超详细)数组方法 ——— splice( )
前端·javascript·typescript
渊兮兮3 分钟前
Vue3 + TypeScript +动画,实现动态登陆页面
前端·javascript·css·typescript·动画
鑫宝Code4 分钟前
【TS】TypeScript中的接口(Interface):对象类型的强大工具
前端·javascript·typescript
爱吃青椒不爱吃西红柿‍️11 分钟前
华为ASP与CSP是什么?
服务器·前端·数据库
一棵开花的树,枝芽无限靠近你15 分钟前
【PPTist】添加PPT模版
前端·学习·编辑器·html
陈王卜17 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
java亮小白199723 分钟前
Spring循环依赖如何解决的?
java·后端·spring
景天科技苑25 分钟前
【vue3+vite】新一代vue脚手架工具vite,助力前端开发更快捷更高效
前端·javascript·vue.js·vite·vue项目·脚手架工具