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

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

相关推荐
一位搞嵌入式的 genius41 分钟前
从 ES6 到 ESNext:JavaScript 现代语法全解析(含编译工具与实战)
前端·javascript·ecmascript·es6
linweidong3 小时前
C++ 模块化编程(Modules)在大规模系统中的实践难点?
linux·前端·c++
leobertlan6 小时前
2025年终总结
前端·后端·程序员
子兮曰7 小时前
OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道
前端·javascript·github
百锦再7 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
莲华君7 小时前
React快速上手:从零到项目实战
前端·reactjs教程
百锦再7 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
易安说AI7 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
JH30738 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
失忆爆表症9 小时前
05_UI 组件库集成指南:Shadcn/ui + Tailwind CSS v4
前端·css·ui