当前位置: 首页 > news >正文

Spring MVC入门5

你能学到什么

  • 获取header的两种方式
  • 学习Spring MVC的第三部分 “ 响应 ”
    • 返回静态页面
    • 返回HTML代码
    • 返回JSON
    • 设置状态码

正文

获取header

获取Header也是从 HttpServletRequest 中获取
在这里插入图片描述

  • 再举个例子
    在这里插入图片描述
获取header的简洁方法(@RequestHeader)

@RequestHeader注解的参数值为HTTP请求报头中的?Key?
在这里插入图片描述

响应
返回静态页面

Http响应结果可以是数据, 也可以是静态⻚⾯,也可以针对响应设置状态码, Header信息等

我们以响应静态页面为例:

  • 创建前端⻚⾯ index.html(注意路径)
  • 将以下代码粘过去
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Index⻚⾯</title>
</head>
<body>
Hello,Spring MVC,我是Index⻚⾯.
</body>
</html>

然后右键点击index.html,找到Explorer

在这里插入图片描述

点开之后就找到了一个HTML文件,打开,验证你的网页是否能正常显示

在这里插入图片描述

如果是这样,那就是正常的

在这里插入图片描述

此时我们就已经将 要显示的前端页面搞好了。
之后就是后端代码的书写了
在这里插入图片描述
但是,真实的原因却是@RestController的问题

我们需要把 @RestController 改为 @Controller

  • 原因:前⾯使⽤的 @RestController 其实是返回的数据.
    @RestController = @Controller + @ResponseBody
    @Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.
    @ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息
    所以,假如我们使用了@RestController 此时返回就是数据,不能返回视图或者html信息
    正确的做法是:
    在这里插入图片描述
    我们能先看一下@RestController 的源码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}

所以只要把@ResponseBody 去掉就行
我们上⾯讲到, @ResponseBody 表⽰返回数据.那么如果在@Controller下面加上@ResponseBody那么是不是也是返回数据呢?我们试验一下:

在这里插入图片描述

可以看到我们的猜想是正确的,只返回了数据,没有返回页面

@ResponseBody的用法

@ResponseBody 既是类注解, ⼜是⽅法注解
如果作⽤在类上, 表⽰该类的所有⽅法, 返回的都是数据, 如果作⽤在⽅法上, 表⽰该⽅法返回的是数据.
也就是说: 在类上添加 @ResponseBody 就相当于在所有的⽅法上添加了 @ResponseBody 注解.
同样, 如果类上有 @RestController 注解时:表⽰所有的⽅法上添加了 @ResponseBody 注解, 也就是当前类下所有的⽅法返回值做为响应数据
如果⼀个类的⽅法⾥, 既有返回数据的, ⼜有返回⻚⾯的, 就把 @ResponseBody 注解添加到对应的⽅法上即可.

返回HTML代码片段

后端返回数据时, 如果数据中有HTML代码, 也会被浏览器解析
在这里插入图片描述

返回JSON

在这里插入图片描述

设置状态码

通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置
在这里插入图片描述
讲到这,我们的Spring MVC的概念部分就讲完了,后面我们就要上一些简单的案例来加深理解了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Gitee简易使用流程(后期优化)
  • 《算法笔记》总结No.7——二分(多例题详解版)
  • uniapp字符串转base64,无需导入依赖(多端支持)
  • Chrome调试工具
  • uniapp-vue3-vite 搭建小程序、H5 项目模板
  • HTTP——POST请求详情
  • uniapp 微信小程序根据后端返回的文件链接打开并保存到手机文件夹中【支持doc、docx、txt、xlsx等类型的文件】
  • 【数据结构与算法】希尔排序:基于插入排序的高效排序算法
  • SpringBatch文件读写ItemWriter,ItemReader使用详解
  • ffmpeg和imagemagick制作gif动图
  • 论文阅读:Explainability for Large Language Models: A Survey
  • C++ 类和对象(A)
  • springboot 适配ARM 架构
  • linux centos limits.conf 修改错误,无法登陆问题修复 centos7.9
  • Git无法验证服务器证书
  • SegmentFault for Android 3.0 发布
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • eclipse的离线汉化
  • Gradle 5.0 正式版发布
  • Nodejs和JavaWeb协助开发
  • scala基础语法(二)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • SQLServer之创建显式事务
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 关于Flux,Vuex,Redux的思考
  • 排序算法之--选择排序
  • 前端js -- this指向总结。
  • 前端知识点整理(待续)
  • 前端自动化解决方案
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 首页查询功能的一次实现过程
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)fread与fwrite详解
  • (二)PySpark3:SparkSQL编程
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (回溯) LeetCode 78. 子集
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)Linux下编译安装log4cxx
  • .NET/C# 的字符串暂存池
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @EnableWebSecurity 注解的用途及适用场景
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @取消转义
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [\u4e00-\u9fa5] //匹配中文字符