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

目录

🚩学习Spring MVC

🎈返回静态网页

🎈返回数据@ResponseBody

🎈返回html代码片段

🎈返回JSON

🎈设置状态码

 🎈设置Header


🚩学习Spring MVC

既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.
咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互
主要分以下三个⽅⾯:
  • 1. 建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
  • 2. 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.
  • 3. 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.

⽐如⽤⼾去银⾏存款
  • 1. 建⽴连接: 去柜台
  • 2. 请求: 带着银⾏卡, ⾝份证去存款
  • 3. 响应: 银⾏返回⼀张存折.
对于 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}";
    }

 


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/637818.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ORA-01012: not logged on

问题描述 明明已经shutdown immediate一致性关库&#xff0c;但是查进程时发现oracle进程依然存在。sqlplus / as sysdba登录提示ORA-01012: not logged on报错&#xff0c;着重强调&#xff0c;服务器上就一个实例。 分析过程 查看进程 我通常会在shutdown immediate之后查…

黄石首家Pearson VUE国际认证考试中心落户湖北理工学院

Pearson VUE 作为 Pearson 集团的专门从事计算机化考试服务的公司&#xff0c;到目前为止&#xff0c;已在全世界165 个国家授权了 4400 多个考试中心以及超过 230 家 PVUE 自有考试中心&#xff0c;其中在中国的有三百多个授权考点和 4 个自有考试中心。Pearson VUE 以其技术和…

Python模块、包和异常处理

大家好&#xff0c;在当今软件开发领域&#xff0c;Python作为一种简洁、易读且功能强大的编程语言&#xff0c;被广泛应用于各种领域。作为一名测试开发工程师&#xff0c;熟练掌握Python的模块、包和异常处理是提高代码可维护性和错误处理能力的关键。本文将和大家一起探讨Py…

QT--将编译程序打包成可安装执行文件方法记录

QT–将编译程序打包成可安装执行文件 文章目录 QT--将编译程序打包成可安装执行文件前言一、下载inno setup compiler工具并安装&#xff0c;然后&#xff0c;打开打包工具执行流程二、设置中文语言三、流程结束后需要修改脚本&#xff0c;否则&#xff0c;创建的快捷方式不是编…

web前端项目已有阿里巴巴图标基础上,再次导入阿里巴巴图标的方法

如果是第一次导入阿里巴巴图标请参考: vue项目引入阿里云图标_vue引用阿里云图标fontclass-CSDN博客 本文主要想讲在项目原有阿里巴巴图标基础上,再次导入阿里巴巴图标的解决办法: 1.iconfont.json对应修改就行,这个简单一看就明白; 2.iconfont.js主要改动<symbol><…

SpringBoot基础详解

文章目录 SpringBoot简介入门案例入门案例搭建基于SpringBoot官网创建项目SpringBoot项目快速启动 SpringBoot概述起步依赖默认配置 基础配置配置文件格式修改服务器端口SpringBoot配置文件加载顺序 yamlyaml语法规则yaml数组数据yaml数据读取 多环境开发配置多环境启动配置多环…

Python01:初入Python(Mac)

Python环境准备 下载Python&#xff1a;官网https://www.python.org/ 下载PyCharm&#xff1a;官网https://www.jetbrains.com/pycharm/download Python与PyCharm的关系 Python&#xff08;解释器&#xff09;&#xff1a;机器语言—>翻译人员–>翻译成电脑能读懂的 PyC…

//TODO 注释的作用

// TODO 用来标记某处&#xff0c;表示该处含有待办事项&#xff08;尚未解决&#xff09;。其设计本意只是提醒开发者注意&#xff0c;除了代码高亮之外&#xff0c;还可以借助编辑器实现快速定位。 如何使用&#xff1f; 直接在双斜杠后面加 TODO 或者 todo 即可&#xff0c…

opencv cuda win10

首先需要安装CUDA和cuDNN&#xff0c;不再赘述 下载对应的opencv和opencv_contrib 打开CMakeGUI&#xff0c;填入下载的路径和生成的路径 再点config configure完后会出现 在search栏修改以下&#xff1a; 1.modules路径 2.cuda 3. opencv_world 4.nonfree 5.取消勾选tes…

石油化工巡检机器人:应对挑战的创新力量

在石油化工领域&#xff0c;安全始终是高悬的达摩克利斯之剑。人工巡检面临诸多痛点&#xff0c;如高危环境对人身安全的巨大威胁&#xff0c;复杂工况下难以做到全面细致监测&#xff0c;对有害气体检测存在滞后性&#xff0c;还有恶劣天气对巡检工作的严重干扰。而这些痛点&a…

探索生态农业,守护绿色家园

在繁忙的都市生活中&#xff0c;我们往往忽略了与自然和谐相处的重要性。而生态农业&#xff0c;正是让我们重拾与大自然亲密关系的桥梁。通过采用生态友好的耕作方式&#xff0c;生态农业不仅能够提供健康、营养的农产品&#xff0c;还能够保护生态环境&#xff0c;实现人与自…

Cesium 开发大屏数据可视化模板 开箱即用 无偿贡献

下载地址&#xff1a;李鑫/cesium大屏数据可视化https://gitee.com/bujieqingfeng/cesium_data_visual 项目预览&#xff1a; 对您有用的话受累点个 ‘Star’

安卓数据存储(键值对、数据库、存储卡、应用组件Application、共享数据)

键值对 此小节介绍Android的键值对存储方式的使用方法&#xff0c;其中包括&#xff1a;如何将数据保存到共享参数&#xff0c;如何从共享参数读取数据&#xff0c;如何使用共享参数实现登陆页面的记住密码功能&#xff0c;如何使用Jetpack集成的数据仓库。 共享参数的用法 …

ESP-IDF使用Button组件实现按键检测的功能

ESP32使用Button组件实现按键检测的功能 ESP-IDF 组件管理LED 组件简介测试button组件写在最后 ESP-IDF 组件管理 IDF 组件管理器工具用于下载 ESP-IDF CMake 项目的依赖项&#xff0c;该下载在 CMake 运行期间自动完成。IDF 组件管理器可以从自动从组件注册表 或 Git 仓库获取…

【数据结构与算法】之堆及其实现!

目录 1、堆的概念及结构 2、堆的实现 2.1 堆向下和向上调整算法 2.2 堆的创建 2.3 建堆时间复杂度 2.4 堆的插入 2.5 堆的删除 2.6 完整代码 3、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#…

ACM实训第十七天

Is It A Tree? 问题 考试时应该做不出来&#xff0c;果断放弃 树是一种众所周知的数据结构&#xff0c;它要么是空的(null, void, nothing)&#xff0c;要么是一个或的集合满足以下属性的节点之间有向边连接的节点较多。 •只有一个节点&#xff0c;称为根节点&#xff0c;它…

【设计模式深度剖析】【2】【创建型】【工厂方法模式】

&#x1f448;️上一篇:单例模式 | 下一篇:抽象工厂模式&#x1f449;️ 目录 工厂方法模式概览工厂方法模式的定义英文原话直译 工厂方法模式的4个角色抽象工厂&#xff08;Creator&#xff09;角色具体工厂&#xff08;Concrete Creator&#xff09;角色抽象产品&#x…

Celery教程

一、什么是Celery 1.1、celery是什么 Celery是一个简单、灵活且可靠的&#xff0c;处理大量消息的分布式系统&#xff0c;专注于实时处理的异步任务队列&#xff0c;同时也支持任务调度。 Celery的架构由三部分组成&#xff0c;消息中间件&#xff08;message broker&#x…

从零开始学Vue3--环境搭建

1.搭建环境 下载nodejs nodejs下载地址 更新npm npm install -g npm 设置npm源&#xff0c;加快下载速度 npm config set registry https://registry.npmmirror.com 使用脚手架创建项目 npm create vuelatest 根据你的需要选择对应选项 进入新建的项目下载依赖 npm in…

大模型时代,掌握Event Stream技术提升Web响应速度

大模型时代,每天搜索都可能会用到一种或多种大模型,在大文本输出的时候,页面是一字一字,一段一段的慢慢输出出来的,这背后是如何实现的呢?我们以KIMI为例 先抓个请求 我们发现界面展示是一句话,但是接口返回的时候是一个字一个字的。 普通请求 多了Event Stream的处理 …