JavaEE >> Spring MVC(2)

news2024/11/26 12:16:32

接上文 本文介绍如何使用 Spring Boot/MVC 项目将程序执行业务逻辑之后的结果返回给用户,以及一些相关内容进行分析解释。

返回静态页面

要返回一个静态页面,首先需要在 resource 中的 static 目录下面创建一个静态页面,下面将创建一个静态页面:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
    <h1>我是一个静态页面</h1>
</body>
</html>

然后在项目中实现对静态的返回,代码如下:

@Repository
@ResponseBody
@RequestMapping("/s")
public class StaticRepository {
    @RequestMapping("/static")
    public String t1(){
        return "/test.html";
    }
}

在浏览器中运行:

在这里插入图片描述
此时,会发现返回的不是一个 html 页面,而是一个 String 类型的数据。这显然不是我们想要的结果。
原因:@ResponseBody 注解的锅。在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过 response 对象输出指定格式的数据。

修改代码,将 @ResponseBody 注解注释掉,可得到一个 html 页面:
在这里插入图片描述
这也就验证了上述原因。

注意:
若使用的 @RestController 注解,可以将该注解注释掉,直接使用 @Controller 注解,因为观察 @RestController 注解的源码就会发现它里面就包含了 @ResponseBody 注解。
在这里插入图片描述

  • 补充:
  • 在Spring Boot/MVC 项目里面不管使用那几个五大类注解效果都是相同的,不必纠结使用 @Controller 还是 @Repository 等注解,它们只是为了区分业务逻辑而使用不同名字。就是为了让程序员看到注解之后,就能直接了解当前类的⽤途。
  • 在这里插入图片描述

返回数据(@ResponseBody)

前面也经常使用这个注解,@ResponseBody 注解就是为了让数据直接输出,而不会走视图处理。
该注解可以注解类,也可以注解方法。

  • 修饰类:表示该类的所有方法返回的都是数据
  • 修饰方法:表示该方法返回的都是数据

首先来看不使用该注解的效果:

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {

    @RequestMapping("/rp")
    public String t2(){
        return "hello,zhangSan";
    }

}

输出结果如下:

在这里插入图片描述
当没有使用 @ResponseBody 注解时,程序就会将 “hello,zhangsan” 认为是一个页面进行寻找,此时肯定是找不到的,要想让这句话直接输出,就需要加上 @ResponseBody 注解(此处在类或方法上加都是可以的,根据需求):
在这里插入图片描述
输出结果:

在这里插入图片描述

对于五大类注解来说,它们默认返回的都是一个页面,若想返回数据,就需要使用 @ResponseBody 注解

返回 HTML 片段

还是使用 @ResponseBody 注解,代码实现如下:

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {

    @ResponseBody
    @RequestMapping("/t")
    public String h(){  // html 片段返回
        return "<h1>终是江边鸟不可望,心上人不可及</h1>";
    }

}

在这里插入图片描述

返回对象、集合

创建对象和集合:

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {

	@ResponseBody
    @RequestMapping("/t1")
    public Student getStudent(){  // 当为对象时,Spring MVC 项目的返回结果
        Student student = new Student();
        student.setName("花有重开日");
        student.setAge(999);
        return student;
    }

    @ResponseBody
    @RequestMapping("/t2")
    public Map<String,String> map(){ // 当为集合时,Spring MVC 项目的返回结果
        HashMap map = new HashMap<>();
        map.put("终是江边鸟不可望","心上人不可及");
        map.put("花有重开日","人无再少年");
        return map;
    }
}

在这里插入图片描述
在这里插入图片描述
当我们使用 Fiddler 进行抓包时,就会发现 @ResponseBody 注解会将它们转换成 application/json 格式(将 @ResponseBody 注解注释掉就会报错 ):

在这里插入图片描述

在这里插入图片描述

返回 JS、css

当要返回一个页面时,就不需要用 @ResponseBody 注解了。

@Repository
//@ResponseBody
@RequestMapping("/s")
public class StaticRepository {

    @RequestMapping("/t3")
    public String js(){   // 返回 js
        return "/t1.js";
    }

    @RequestMapping("/t4")
    public String css(){  // 返回 css
        return "/t2.css";
    }
}

在这里插入图片描述
在这里插入图片描述
Spring 会将它们自动转为相应的格式对用户显示出来。

小结:

  1. @ResponseBody 返回的值如果是字符会转换成 text/html,如果返回的是对象会转换成 application/json 返回给前端。
  2. @ResponseBody 可以⽤来修饰⽅法或者是修饰类,修饰类表示类中的所有⽅法都会返回 html 或者 json,⽽不是视图。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[1673]jsp在线考试管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 在线考试管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

[MRCTF2020]你传你呢 1

上传一个文件 图片木马 新建一个图片木马&#xff0c;这里我命名为a.php&#xff0c;名字需和待会上传的.htaccess一致 GIF89a <script languagephp>eval($_REQUEST["cmd"])</script>抓包上传的a.php文件&#xff0c;修改两个地方 新建一个.htacces…

Neo4j v5 中 Cypher 的变化

How Cypher changed in Neo4j v5 Neo4j v5 中 Cypher 的变化 几周前&#xff0c;Neo4j 5 发布了。如果你像我一样&#xff0c;在 Neo4j 4 的后期版本中忽略了所有的弃用警告&#xff0c;你可能需要更新你的 Cypher 查询以适应最新版本的 Neo4j。幸运的是&#xff0c;新的 Cyp…

confluence 设置https代理

使用nginx反待confluence并开启https后&#xff0c;登录confluence会一直提示&#xff1a;scheme、proxyName、proxyPort设置错误。 解决办法&#xff1a; find / -name server.xmlvi /opt/atlassian/confluence/conf/server.xml HTTP反代配置 HTTPS反代配置

小程序地理位置接口权限直接抄作业

小程序地理位置接口有什么功能&#xff1f; 随着小程序生态的发展&#xff0c;越来越多的小程序开发者会通过官方提供的自带接口来给用户提供便捷的服务。但是当涉及到地理位置接口时&#xff0c;却经常遇到申请驳回的问题&#xff0c;反复修改也无法通过&#xff0c;给的理由也…

【大模型应用】使用 Windows 窗体作为 Copilot 应用程序的 Ollama AI 前端(测试llava视觉问答)...

项目 “WinForm_Ollama_Copilot” 是一个使用Windows Forms作为前端的Ollama AI Copilot应用程序。这个项目的目的是提供一个用户界面(UI)&#xff0c;通过它&#xff0c;用户可以与Ollama AI进行交互。以下是该项目的一些关键特点和功能&#xff1a; Ollama Copilot: 这是一个…

[方法] Unity 实现仿《原神》第三人称跟随相机 v1.0

参考网址&#xff1a;【Unity中文课堂】RPG战斗系统Plus 在Unity游戏引擎中&#xff0c;实现类似《原神》的第三人称跟随相机并非易事&#xff0c;但幸运的是&#xff0c;Unity为我们提供了强大的工具集&#xff0c;其中Cinemachine插件便是实现这一目标的重要工具。Cinemachi…

Rust Turbofish 的由来

0x01 什么是 Turbofish 我们运行如下 Rust Snippet&#xff1a; fn main() {let numbers: Vec<i32> vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];let even_numbers numbers.into_iter().filter(|n| n % 2 0).collect();println!("{:?}", even_numbers); }不出意…

什么是UDP反射放大攻击,有什么安全措施可以防护UDP攻击

随着互联网的飞速发展和业务复杂性的提升&#xff0c;网络安全问题日益凸显&#xff0c;其中分布式拒绝服务&#xff08;DDoS&#xff09;攻击成为危害最为严重的一类网络威胁之一。 近些年&#xff0c;网络攻击越来越频繁&#xff0c;常见的网络攻击类型包括&#xff1a;蠕虫…

TS学习-泛型基础

目录 1&#xff0c;介绍1&#xff0c;在函数中使用2&#xff0c;在类型别名&#xff0c;接口中使用3&#xff0c;在类中使用 2&#xff0c;泛型约束3&#xff0c;多泛型4&#xff0c;举例实现 Map 1&#xff0c;介绍 泛型相当于是一个类型变量&#xff0c;有时无法预先知道具体…

【每日刷题】Day30

【每日刷题】Day30 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 牛牛的链表添加节点_牛客题霸_牛客网 (nowcoder.com) 2. 牛牛的链表删除_牛客题霸_牛客网 (nowcoder…

Django整合多种认证方式

承接上一篇&#xff1a;Django知识点总结-CSDN博客 目录 25.使用 Django REST framework实现用户认证和授权 26.通过djangorestframework-simplejwt使用JWT(JSON Web Token) 27.使用django-auth-ldap进行用户认证 28. 使用django-cas-ng实现集中认证及实现单点登录 29. …

c# winform快速建websocket服务器源码 wpf快速搭建websocket服务 c#简单建立websocket服务 websocket快速搭建

完整源码下载----->点击 随着互联网技术的飞速发展&#xff0c;实时交互和数据推送已成为众多应用的核心需求。传统的HTTP协议&#xff0c;基于请求-响应模型&#xff0c;无法满足现代Web应用对低延迟、双向通信的高标准要求。在此背景下&#xff0c;WebSocket协议应运而生…

C++函数重载之类型引用和类型本身

在C中&#xff0c;当我们讨论类型引用&#xff08;也称为引用类型&#xff09;与类型本身被视为“同一个特征标”&#xff08;signature&#xff09;时&#xff0c;我们实际上是在讨论引用类型在函数重载解析&#xff08;function overload resolution&#xff09;和模板参数推…

Github 2024-05-02 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2024-05-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10PureBasic项目1Kubernetes: 容器化应用程序管理系统 创建周期:3618 天开发语言:Go协议类型:Apache License 2.0Star数量:106913 个…

C#知识|Dictionary泛型集合的使用总结

哈喽,你好,我是雷工! 以下是C#Dictionary泛型集合的学习笔记。 01 Dictionary泛型集合 1.1、Dictionary<K,V>通常称为字典, 1.2、其中<K,V>是自定义的,用来约束集合中元素类型。 1.3、在编译时检查类型约束, 1.4、无需装箱拆箱操作, 1.5、操作与哈希表(Ha…

美国零售媒体(广告业)指南:快速增长、不断扩展的业态和新兴机遇

Guide to retail media: Rapid growth, expanding formats, and emerging opportunities --- 零售媒体如何通过CTV和其他合作伙伴关系向上发展 原文作者&#xff1a;Sara Lebow | 2024年2月16日 整理编辑&#xff1a;数字化营销工兵 I 2024年5月2日 ​​​​​​​ &#…

基于HAL库的stm32中定时器的使用--定时器中断每隔一秒进行led灯的闪烁以及定时器生成PWM

一&#xff1a;什么是定时器 &#xff08;1&#xff09;stm32定时器&#xff0c;是存在于stm32单片机中的一个外设。stm32共有八个定时器&#xff0c;两个高级定时器&#xff08;TIM1、TIM8&#xff09;&#xff0c;四个通用定时器&#xff08;TIM2、TIM3、TIM4、TIM5&#xff…

B树:原理、操作及应用

B树&#xff1a;原理、操作及应用 一、引言二、B树概述1. 定义与性质2. B树与磁盘I/O 三、B树的基本操作1. 搜索&#xff08;B-TREE-SEARCH&#xff09;2. 插入&#xff08;B-TREE-INSERT&#xff09;3. 删除&#xff08;B-TREE-DELETE&#xff09; 四、B树的C代码实现示例五、…

selenium 4.x 之验证码处理(python)

验证码处理 一般情况公司如果涉及web自动化测试需要对验证码进行处理的方式一般有一下几种&#xff1a; 关闭验证码功能&#xff08;开发处理&#xff09;设置万能验证码&#xff08;开发处理&#xff09;使用智能识别库进行验证 通过第三方打码平台识别验证码 1. 跳过验证功…