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

04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源

1. handler方法分析

/*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用@RequestMapping/@GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:*       1.接收请求参数(param,json,pathVariable,共享域等) *       2.调用业务逻辑 *       3.响应前端数据(页面(不讲解模版页面跳转),json,转发和重定向等)* TODO: handler如何处理呢*       1.接收参数: handler(形参列表: 主要的作用就是用来接收参数)*       2.调用业务: { 方法体  可以向后调用业务方法 service.xx() }*       3.响应数据: return 返回结果,可以快速响应前端数据*/
@GetMapping
public Object handler(简化请求参数接收){调用业务方法返回的结果 (页面跳转,返回数据(json))return 简化响应前端数据;
}

总结:

请求数据接收,我们都是通过handler的形参列表

前端数据响应,我们都是通过handler的return关键字快速处理!


2. 页面跳转控制

https://blog.csdn.net/m0_59735420/article/details/128126514

2.1 返回模板视图页面

什么是返回模板视图页面?

当http请求被controller中的handler处理时,有时需要指定响应的页面(返回本地的)

为什么要返回模板视图页面?
项目采用了前后端分离模式 ,前后端通信通过 API 接口完成,数据格式一般使用 JSON 或 XML。

目标 : 用户访问localhost:8080/jsp/index时,返回给用户本地webapp-WEB-INF-view下的home.jsp页面.

  1. pom文件添加jsp依赖
<!-- jsp需要依赖! jstl-->
<dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId><version>3.0.0</version>
</dependency>
  1. 创建等会要返回的home.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>Title</title></head><body><!-- 可以获取共享域的数据,动态展示! jsp== 后台vue -->${msg}</body>
</html>
  1. 新建一个MvcConfig类
//本类中要重写handlerMapping,handlerAdapter两个方法,配置一个json转化器, 通过一个注解@EnableWebMvc实现@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.atguigu.controller") //TODO: 进行controller扫描//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 前期可以实现
public class SpringMvcConfig implements WebMvcConfigurer {//配置一个jsp对应的视图解析器public void configureViewResolvers(ViewResolverRegistry registry) {//Resigter可以帮忙添加前后缀//稍后的handler中如果想给前端返回 /WEB-INF/views/index .jspregistry.jsp("/WEB-INF/views/",".jsp");}
}
  1. 编写jspController类
/***  跳转到提交文件页面  *  *  如果要返回jsp页面!*     1.方法返回值改成字符串类型*     2.返回逻辑视图名即可    *         <property name="prefix" value="/WEB-INF/views/"/>*            + 逻辑视图名 +*         <property name="suffix" value=".jsp"/>*///访问localhost:8080/jsp/index时,返回给用户本地webapp-WEB-INF-view下的home.jsp页面.
@GetMapping("index")
public String jumpJsp(Model model){System.out.println("FileController.jumpJsp");return "home";
}

2.2 跳转和重定向

重定向与跳转的区别:

1.请求的次数的不同 : 重定向总共请求了两次服务器;转发则是用户请求一次可能经过N个JSP页面由返回到用户浏览器中,是一次请求多次处理的过程;

2.跳转过程中链接的变化不同 : ,重定向在跳转中请求了两次服务器并且是两次不同的链接地址,在浏览器的地址栏可以看到两次是有变化的;转发在跳转过程中浏览器请求了一次服务器,服务器经过了n个JSP页面并没有改变请求的链接地址,因为用户只请求了一次,所以在整个跳转过程中链接地址是没有改变的,在浏览器的地址栏就可以看到

3.目的不同 : 重定向只是简单的让用户访问一个新的链接,而转发是服务器要得到用户的请求内容并需要进行一部分处理的,所以两者目的之不同的

  • 不管是重定向(redirect)还是转发(forward),其handler都要设置String类型
  • 语法为 return 关键字: /路径,不需要额外注解
  • @ResponseBody注解和转发/重定向是互斥的。@ResponseBody注解的类会快速返回,不走视图解析器,也不会再转发/重定向。
  • 注意:如果是项目下的资源,转发和重定向都一样都是项目下路径!都不需要添加项目根路径!
@RequestMapping("/redirect-demo")
public String redirectDemo() {// 重定向到 /demo 路径 return "redirect:/demo";
}@RequestMapping("/forward-demo")
public String forwardDemo() {// 转发到 /demo 路径return "forward:/demo";
}

3.返回JSON数据

  1. 如上章接收JSON数据一样,涉及JSON必须要添加依赖以及在config类中配置JSON转换器(@EnableWebMvc)。
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
</dependency>
  1. 如上章接收JSON数据一样(@RequestBody),使用@ResponseBody注解返回JSON数据,该注解的作用在于将返回的对象序列化为 JSON 或 XML 格式的数据,并发送给客户端。
  2. 需注意的是ResponseBody不经过视图解析器,且与转发/重定向互斥。
@GetMapping("/accounts/{id}")
@ResponseBody
public Object handle() {// ...return obj;
}

测试方法:

@Controller
@RequestMapping(value = "/user/detail", method = RequestMethod.POST)
@ResponseBody
public User getUser(@RequestBody User userParam) {System.out.println("userParam = " + userParam);User user = new User();user.setAge(18);user.setName("John");//返回的对象,会使用jackson的序列化工具,转成json返回给前端!return user;
}

合并两条注解:
@Controller+@ResponseBody = @RestController

3.返回静态资源

什么是静态资源?
资源本身已经是可以直接拿到浏览器上使用的程度了,不需要在服务器端做任何运算、处理。典型的静态资源包括:
- 纯HTML文件/图片
- CSS文件
- JavaScript文件

如何让外部能够访问静态资源?

  • DispatcherServlet 的 url-pattern 配置的是“/”,表示整个 Web 应用范围内所有请求都由 SpringMVC 来处理
  • 而对 SpringMVC 来说,若想某个url被后台处理,必须将这个urll用 @RequestMapping 绑定到某个handler上,才能找到处理请求的方法,否则handlermapping(秘书)无法知道找哪个handler(打工人)处理这个链接。
  • 因此,思路是显然的,那就是想办法让系统知道,如果请求的是url是xxx/xxx/car.jpg , 那就从静态资源中直接提取而不是找handler(静态资源不可能存进handler里)。
  1. 准备好静态资源并编译:
    在这里插入图片描述
    在这里插入图片描述2. 在config类中开启静态资源处理:
@EnableWebMvc  //json数据处理,必须使用此注解,因为他会加入json处理器
@Configuration
@ComponentScan(basePackages = "com.sunsplanter.controller") //
//WebMvcConfigurer springMvc进行组件配置的规范,配置组件,提供各种方法! 
public class SpringMvcConfig implements WebMvcConfigurer {//开启静态资源处理//处理的顺序是DispatcherServlet --> handlerMapping -->没找到就去找静态资源//平时第二步走完就结束,该方法多走一步为了找到静态资源@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
}

访问localhost:8080/images/car.jpg , 可以正常显示.

相关文章:

04 SpringMVC响应数据之页面跳转控制+返回JSON数据+返回静态资源

1. handler方法分析 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用RequestMapping/GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: handler作用总结:* 1.接收请求参数(param,json,pathVariable,共享…...

Python圣诞主题绘图:用turtle库打造冬日奇妙画面【第31篇—python:圣诞节】

文章目录 Python圣诞主题绘图导言代码结构概览详细解析drawlight函数tree函数xzs函数drawsnow函数五角星的绘制 完整代码代码解析总结 Python圣诞主题绘图 导言 圣诞季节是个充满欢乐和创意的时刻。在这个技术博客中&#xff0c;我们将深入探讨如何使用Python的turtle库创建一…...

[开发语言][c++]:Static关键字和全局变量

Static关键字和全局变量 1. 生命周期、作用域和初始化时机2. 全局变量3. Static 关键字3.1 面向过程3.1.1 静态全局变量3.1.2 静态局部变量&#xff08;单例中会使用&#xff09;3.1.3 静态函数 3.2 面向对象3.2.1 类内静态成员变量3.2.2 类内静态成员函数 Reference 写在前面&…...

计算机组成原理 第一弹

ps&#xff1a;本文章的图片来源都是来自于湖科大教书匠高老师的视频&#xff0c;声明&#xff1a;仅供自己复习&#xff0c;里面加上了自己的理解 这里附上视频链接地址&#xff1a;1-2 计算机的发展_哔哩哔哩_bilibili ​​ 目录 &#x1f680;计算机系统 &#x1f680;计…...

Hadoop基础知识

Hadoop基础知识 1、Hadoop简介 广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念——Hadoop生态圈。狭义上说&#xff0c;Hadoop指Apache这款开源框架&#xff0c;它的核心组件有&#xff1a; HDFS&#xff08;分布式文件系统&#xff09;&#xff1a;解决海量数据存储Y…...

Java进阶之旅第五天

Java进阶之旅第五天 不可变集合 应用场景 1.如果某个数据不能被修改,把它拷贝到不可变集合中是个很好的实践2.当集合对象被不可信的库调用时,不可变形式是安全的3.不可变集合不能修改,只能进行查询 获取方式 在List,Set,Map接口中,都存在静态的of方法,可以获取一个不可变的…...

拓展边界:前端世界的跨域挑战

目录 什么是跨域 概念 同源策略及限制内容 常见跨域场景 如何解决跨域 CORS Nginx代理跨域 Node中间件代理跨域 WebSocket postMessage JSONP 其他 什么是跨域 概念 在此之前&#xff0c;我们了解一下一个域名地址的组成&#xff1a; 跨域指的是在网络安全中&…...

旅游项目day03

1. 前端整合后端发短信接口 2. 注册功能 后端提供注册接口&#xff0c;接受前端传入的参数&#xff0c;创建新的用户对象&#xff0c;保存到数据库。 接口设计&#xff1a; 实现步骤&#xff1a; 手机号码唯一性校验&#xff08;后端一定要再次校验手机号唯一性&#xff09…...

单片机学习记录(一)

简答题 第1章 1.微处理器、微计算机、CPU、单片机、嵌入式处理器他们之间有何区别&#xff1f; 答&#xff1a;微处理器、CPU都是中央处理器的不同称谓&#xff0c;微处理器芯片本身不是计算机&#xff1b; 单片机、微计算机都是一个完整的计算机系统&#xff0c;单片机是集…...

MacBookPro怎么数据恢复? mac电脑数据恢复?

使用电脑的用户都知道&#xff0c;被删除的文件一般都会经过回收站&#xff0c;想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样&#xff0c;但是“回收站”在mac电脑显示为“废纸篓”。 如果电脑回收站&#xff0c;或者是废纸篓里面的数据被清空了&…...

Python多线程—threading模块

参考&#xff1a;《Python核心编程》 threading 模块的Thread 类是主要的执行对象&#xff0c;而且&#xff0c;使用Thread类可以有很多方法来创建线程&#xff0c;这里介绍以下两种方法&#xff1a; 创建 Thread 实例&#xff0c;传给它一个函数。派生 Thread 的子类&#xf…...

mysql limit

语法 SELECT * FROM TABLE_NAME LIMIT 起始位置&#xff0c;偏移量注&#xff1a; 起始位置从0开始 示例 查询的第1条数据到第100条数据 limit 0,100查询的第101条数据到第200条数据 limit 100,100注意不要用 limit 101,100示例2 limit 语句应放在order by语句后面执行 …...

解决国内Linux服务器无法使用Github的方法

解决思路&#xff1a;修改Host https://www.ipaddress.com/ 利用上面的网站查询github.com和raw.githubusercontent.com的DNS解析的IP地址 最后&#xff0c;修改服务器的/etc/hosts 添加如下两行&#xff1a; 140.82.112.3 github.com 185.199.108.133 raw.githubuserconte…...

动态规划基础(二)最长公共子序列 LCS

讲解求两个串中最长的公共的子序列长度或输出子序列等 poj1458 题目大意 给定两个字符串&#xff0c;要求输出两个字符串中最长公共子序列长度 思路 我们定义 a [ i ] [ j ] a[i][j] a[i][j]为&#xff0c;当字串 s t r 1 str1 str1到 i i i位置&#xff0c;字串 s t r 2 s…...

React配置src根目录@

文章目录 1.打开webpack配置文件2.配置webpack 1.打开webpack配置文件 yarn eject or npm run eject 如果报错了记得提前 git commit一下 2.配置webpack 找到 webpack.config.js 文件在 webpack.config.js 文件中找到 alias 配置在alias里添加: path.resolve(src) , 或者 : pa…...

SQL Povit函数使用及实例

PIVOT函数常用于数据的行转列&#xff0c;同时也可以用此函数实现类似于Excel中的数据透视表的效果。 PIVOT函数 PIVOT 函数的基本语法如下&#xff1a; -- PIVOT 语法 SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,.…...

Lite AD的安装

1、Lite AD的安装及配置 Lite AD流程&#xff1a; &#xff08;1&#xff09;创建一个新的Windows 10&#xff0c;安装tools&#xff0c;再安装ITA组件&#xff08;安装Lite AD会自动安装VAG/VLB&#xff09; &#xff08;2&#xff09;创建一个新的Windows 10&#xff0c;安…...

限流算法之流量控制的平滑之道:滑动时间窗算法

文章目录 引言简介优点缺点样例样例图样例代码 应用场景结论 引言 在互联网应用中&#xff0c;流量控制是一个重要的组件&#xff0c;用于防止系统过载和保护核心资源。常见的限流算法包括固定窗口算法和滑动时间窗算法。本文将重点介绍滑动时间窗算法&#xff0c;并分析其优缺…...

C语言数据结构——顺序表

&#xff08;图片由AI生成&#xff09; 0.前言 在程序设计的世界里&#xff0c;数据结构是非常重要的基础概念。本文将专注于C语言中的一种基本数据结构——顺序表。我们将从数据结构的基本概念讲起&#xff0c;逐步深入到顺序表的内部结构、分类&#xff0c;最后通过一个实…...

网络安全:守护数字世界的盾牌

在当今数字化的时代&#xff0c;网络已经渗透到我们生活的方方面面。从社交媒体到在线银行&#xff0c;从在线购物到工作文件传输&#xff0c;网络几乎无处不在。然而&#xff0c;随着网络的普及&#xff0c;网络安全问题也日益凸显。那么&#xff0c;如何确保我们的数字资产安…...

R16增强型Type II码本:空频域联合压缩与量化反馈机制解析

1. R16增强型Type II码本的技术背景 在5G Massive MIMO系统中&#xff0c;信道状态信息&#xff08;CSI&#xff09;反馈的精度和效率直接影响着系统性能。R15 Type II码本虽然已经实现了空域压缩&#xff0c;但随着频段向毫米波延伸和天线规模扩大&#xff0c;传统方案面临反馈…...

让ai当你的git导师:用快马开发智能github问答与代码生成助手

最近在尝试学习GitHub的使用时&#xff0c;发现很多操作命令记不住&#xff0c;尤其是遇到合并冲突或者需要回退版本的时候&#xff0c;总是要反复查文档。于是我想&#xff0c;能不能做一个AI助手来帮忙&#xff1f;经过在InsCode(快马)平台上的一番折腾&#xff0c;还真做出了…...

基于YOLO的安全帽佩戴检测系统~Python+模型训练+2026原创+YOLO算法

项目简介 基于 YOLO 的智能安全帽佩戴检测平台&#xff0c;面向施工现场图片识别、检测记录管理与安全宣传信息展示等业务场景。系统后端采用 Flask 搭建 RESTful API 服务&#xff0c;结合数据库进行业务数据持久化存储&#xff0c;并通过 JWT 实现用户身份认证与接口访问控制…...

MusePublic实战教程:多语言Prompt支持(日/韩/法/西)本地化适配

MusePublic实战教程&#xff1a;多语言Prompt支持&#xff08;日/韩/法/西&#xff09;本地化适配 你是不是也遇到过这样的烦恼&#xff1f;看到一张惊艳的艺术人像&#xff0c;想用MusePublic复刻出来&#xff0c;但脑子里蹦出的描述词全是中文、日文或者韩文&#xff0c;对着…...

【昇腾实战】MindIE框架下DeepSeek-R1模型部署与性能调优指南

1. 昇腾环境准备与驱动安装 拿到昇腾服务器后&#xff0c;第一件事就是搭建基础运行环境。我遇到过不少开发者卡在驱动安装环节&#xff0c;其实只要注意几个关键点就能避坑。首先到华为昇腾官网下载对应版本的驱动和固件包&#xff0c;这里有个细节&#xff1a;一定要核对服务…...

MusePublic插件开发指南:Photoshop艺术生成插件实战

MusePublic插件开发指南&#xff1a;Photoshop艺术生成插件实战 1. 前言 作为设计师&#xff0c;你是否曾经遇到过这样的困境&#xff1a;客户急着要一套海报设计方案&#xff0c;你却在创意构思上卡壳了好几个小时&#xff1f;或者想要尝试新的艺术风格&#xff0c;却苦于手…...

Maxwell Fields Calculator双模式切换指南:堆栈与代数表达式输入实战解析

Maxwell Fields Calculator双模式切换指南&#xff1a;堆栈与代数表达式输入实战解析 在电磁仿真领域&#xff0c;Maxwell Fields Calculator一直是工程师进行后处理分析的利器。随着2025 R1版本的推出&#xff0c;一项革命性的功能——双模式表达式输入&#xff0c;彻底改变了…...

储能电站EMS系统实战指南:从硬件选型到软件配置的完整避坑手册

储能电站EMS系统实战指南&#xff1a;从硬件选型到软件配置的完整避坑手册 在新能源行业快速发展的今天&#xff0c;储能电站作为电力系统中的关键调节单元&#xff0c;其能量管理系统&#xff08;EMS&#xff09;的稳定性和智能化水平直接决定了电站的经济效益和运行安全。然而…...

[ linux添加应用图标到桌面 ] : 中将应用程序添加图标(快捷方式 ),并放置任务栏中,.desktop文件使用

.desktop文件格式在你的主目录中打开终端(ctrlaltt)&#xff0c;接着输入以下代码&#xff1a;touch test.desktop vim test.desktop这里我选择的是vim的编辑方式&#xff0c;当然如果你没有vim或者说不太熟练的话&#xff0c;你可以直接双击打开该文件。代码解释&#xff1a;t…...

4步完整指南:如何用OpenCore Legacy Patcher让旧Mac重获新生

4步完整指南&#xff1a;如何用OpenCore Legacy Patcher让旧Mac重获新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 想让被苹果抛弃的旧Mac电脑重新运行最…...