SpringMVC(四)响应
目录
数据处理及跳转
1. 结果跳转方式
①.ModelAndView
②.ServletAPI
1、通过HttpServletResponse进行输出
2、通过HttpServletResponse实现请求转发
3、通过HttpServletResponse实现重定向
③.SpringMVC
1.直接输出
2.请求转发
3.重定向
2.ResponseBody响应json数据(后续系统演示)
前面已经讲解了SpringMVC的请求(SpringMVC(三)请求-CSDN博客),现在来讲一讲SpringMVC的响应。
数据处理及跳转
1. 结果跳转方式
①.ModelAndView
【model就是数据,view就是视图;ModelAndView这种响应方式已经过时,但是依旧需要了解】
设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面
首先依旧是在SpringMVC(三)请求-CSDN博客里Test的基础上:
//响应//1.ModelAndView@RequestMapping(path="/test1",method={RequestMethod.GET}) //二级请求路径public ModelAndView test01(){System.out.println("执行了...");// 创建mv对象ModelAndView mv = new ModelAndView();// 把一些数据,存储到mv对象中mv.addObject("msg","我想返回给test前端的数据");//这里就是返回的数据// 设置逻辑视图的名称mv.setViewName("test");//返回给test界面return mv;}
对test.html界面做出更改,使得其能够接收后端相应的数据:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h1>Hi!</h1>
<h1>Hello <b th:text="${msg}"></b></h1> <!--加上这里-->
</body>
</html>
实现这个后就可以去重启测试test/test1请求了:
②.ServletAPI
通过设置ServletAPI , 不需要视图解析器 .
1、通过HttpServletResponse进行输出(这个响应方式也是servlet中最常见的Request和Response请求)
2、通过HttpServletResponse实现重定向
3、通过HttpServletResponse实现转发
1、通过HttpServletResponse进行输出
Test中编写:
//2.ServletAPI//①@RequestMapping(path="/test2",method={RequestMethod.GET}) //二级请求路径public void test02(HttpServletRequest request, HttpServletResponse response) throws IOException {//熟悉的配方,获取数据String name=request.getParameter("name");String password=request.getParameter("password");response.getWriter().append("name:"+name+" "+",password:"+password);}
重启服务器:
下面这两种方法需要有请求转发和重定向的基础,详情参见:请求转发和重定向_请求转发和重定向的代码-CSDN博客
2、通过HttpServletResponse实现请求转发
Test中编写:(将当前的test3请求请求转发到同路径的test2中去即:test/test2)
//②请求转发-->到/test/test2请求中@RequestMapping(path="/test3") //二级请求路径public void test03(HttpServletRequest request, HttpServletResponse response) throws Exception {//熟悉的配方,获取数据String name=request.getParameter("name");String password=request.getParameter("password");request.getRequestDispatcher("/test/test2").forward(request,response);}
重启服务器(test3中并没有做response.getWriter().append("name:"+name+" "+",password:"+password);输出操作,但是却能得到和test2相同的结果,可见请求转发成功):
3、通过HttpServletResponse实现重定向
重定向不再拘泥于本网址内容,可以重定向到任意网址,这里以重定向到学习通为例:
Test中编写:
//③重定向-->到学习通网址中@RequestMapping(path="/test4") //二级请求路径public void test04(HttpServletRequest request, HttpServletResponse response) throws Exception {response.sendRedirect("https://www.chaoxing.com/");}
重启服务器(成功):
③.SpringMVC
通过SpringMVC来实现转发和重定向 - 无需视图解析器;
测试前,需要将视图解析器注释掉
同样这里支持三种方式:
1.直接输出
之前一直在做直接输出,不再赘述。
2.请求转发
Test中编写:
//SpringMVC//请求转发@RequestMapping(path="/test5") //二级请求路径public String test05(){return "forward:/html/test.html";}
重启项目测验:
3.重定向
Test中编写:
//重定向@RequestMapping(path="/test6") //二级请求路径public String test06(){return "redirect:https://www.chaoxing.com/";}
不做过多演示,和上述测验方式相同。
2.ResponseBody响应json数据(后续系统演示)
json和JavaBean对象互相转换的过程中,需要使用jackson的jar包
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version> </dependency> <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.0</version> </dependency> <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version> </dependency>
DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置
标签配置不过滤
1. location元素表示webapp目录下的包下的所有文件
2. mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b
<!--设置静态资源不过滤--> <mvc:resources mapping="/css/**" location="/css/"/> <!--样式--> <mvc:resources mapping="/images/**" location="/images/"/> <!--图片--> <mvc:resources mapping="/js/**" location="/js/"/> <!--javascript-->
html代码
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script><script>// 页面加载$(function(){// 单击事件$("#btn").click(function(){// 发送ajax的请求$.ajax({type: "post",url: "/SpringMVCDemo/user/save6",data:{username:"haha",age:"20"},success:function(d){// 编写很多代码alert(d.username+" ‐ "+d.age);}});});});</script> </head> <body> <h3>异步的数据交互</h3> <input type="button" value="ajax交互" id="btn"> </body> </html>
controller(Test)
/*** 异步的数据交互* 重定向* @return*/ @RequestMapping("/save6") public @ResponseBody User save6(User user){System.out.println(user);// 模拟,调用业务层代码user.setUsername("hello");user.setAge(100);// 把user对象转换成json,字符串,再响应。使用@ResposeBody注解 response.getWriter().print()return user; }
在springMVC当中如果要实现页面跳转就不要使用ajax,如果要json数据的返回就用ajax
相关文章:

SpringMVC(四)响应
目录 数据处理及跳转 1. 结果跳转方式 ①.ModelAndView ②.ServletAPI 1、通过HttpServletResponse进行输出 2、通过HttpServletResponse实现请求转发 3、通过HttpServletResponse实现重定向 ③.SpringMVC 1.直接输出 2.请求转发 3.重定向 2.ResponseBody响应json数…...

vim 的基础使用
目录 一:vim 介绍二:vim 特点三:vim 配置四:vim 使用1、vim 语法格式2、vim 普通模式(1)保存退出(2)光标跳转(3)文本删除(4)文本查找&…...

关于flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型问题
flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型 问题解决1.自定义转换器类2.代码引用 结果 问题 flink版本:1.18.1,mysql版本:8.0.40 使用FlinkCDC的MySqlSource 连接mysql,对于datetime 类型字段&…...

基于Springboot校园失物招领系统【附源码】
基于Springboot校园失物招领系统 效果如下: 系统登陆页面 物品页面 系统首页面 失物招领管理页面 失物认领页面 宣传视频页面 物品挂失留言管理页面 宣传视频类型管理页面 研究背景 在校园环境中,失物招领是一个常见的问题。传统的失物招领方式主要依…...
单片机端口操作和独立引脚操作
单片机端口操作和独立引脚操作 在单片机编程中,控制I/O端口是最基础的操作之一。通过控制端口,我们可以实现对外设(如LED、按键、继电器等)的控制。在51单片机中,有两种常见的端口操作方式:整体控制&#…...

【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)
文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L10 Vim 核心浏览命令同步练习点评课S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养1 删除单个字符2 删除一个单词2.1 推广1:D HJK…...

ARM200~500部署
前提:数据库已经安装好,并且正常运行 1.修改hostname,将里面的AR-A 改为hzx vi /etc/hostname 2.重启网络服务 sudo systemctl restart NetworkManager 3.修改community-admin.service 文件,更改小区名称和IP,并将文件上传到/…...

word中插入zotero引用
1、参考文献末尾没有文献? 在文献条目要显示的地方点击“refresh” 2、参考文献条目没有悬挂缩进? 把“书目”添加到样式库中,修改样式为悬挂缩进1.5字符 3、交叉引用? 宏 新建一个宏 粘贴下面代码 Public Sub ZoteroLinkCita…...
需求上线,为什么要刷缓存?
在需求上线的过程中,刷缓存主要有以下几个重要原因: 一、保证数据的准确性 旧数据残留问题 缓存是为了加快数据访问速度而存储的数据副本。在需求更新后,之前缓存中的数据可能已经不符合新的业务逻辑。例如,一个电商网站修改了商…...

TVS二极管选型【EMC】
TVS器件并联在电路中,当电路正常工作时,他处于截止状态(高阻态),不影响线路正常工作,当线路处于异常过压并达到其击穿电压时,他迅速由高阻态变为低阻态,给瞬间电流提供一个低阻抗导通…...

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举
本篇博客将聚焦于通过递归来实现两种经典的枚举方法:指数型枚举和排列型枚举。这两种枚举方式在计算机科学和算法竞赛中都有广泛应用,无论是在解题中,还是在实际工作中都极具价值。 目录 前言 斐波那契数列递归 递归实现指数型枚举 算法思…...
C#对线程同步的应用
什么是线程同步?线程同步的应用场景有哪些?在C#中有哪些线程同步方式?下面对这些问题做一个总结,让大家在面试的时候遇到这些问题能够游刃有余。 线程同步是指在多线程环境下,多个线程同时访问共享资源时,确…...
基于微信小程序的面部动作检测系统
引言 本技术文档旨在详细阐述一个基于微信小程序的面部动作检测系统的技术路线、实现方法及关键技术框架。系统的核心功能包括检测用户的左右转头、眨眼和张嘴动作,并根据检测结果逐步引导用户完成任务。为确保系统的安全性和准确性,特别是防止用户通过…...

Activation Functions
Chapter4:Activation Functions 声明:本篇博客笔记来源于《Neural Networks from scratch in Python》,作者的youtube 其实关于神经网络的入门博主已经写过几篇了,这里就不再赘述,附上链接。 1.一文窥见神经网络 2.神经…...

《Vue3实战教程》37:Vue3生产部署
如果您有疑问,请观看视频教程《Vue3实战教程》 生产部署 开发环境 vs. 生产环境 在开发过程中,Vue 提供了许多功能来提升开发体验: 对常见错误和隐患的警告对组件 props / 自定义事件的校验响应性调试钩子开发工具集成 然而ÿ…...

Linux:各发行版及其包管理工具
相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Debian 包管理工具:dpkg(低级包管理器)、apt(高级包管理器,建立在dpkg基础上)包格式:…...

【计算机网络】课程 作业一 搭建连续覆盖的办公网络
作业一 搭建连续覆盖的办公网络 题目:论述题(共1题,100分) 充分利用所学习的数据链路层局域网知识,加上物理层的基础知识,请给一个办公场所(三层,每层约100平方)…...
C++ 设计模式:单例模式(Singleton Pattern)
链接:C 设计模式 链接:C 设计模式 - 享元模式 单例模式(Singleton Pattern)是创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式在需要全局共享资源或控制实例数量的…...
OpenCV调整图像亮度和对比度
【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、基本方法---线性变换 // 亮度和对比度调整 cv::Mat adjustBrightnessContrast(const cv::Mat& src, double alpha, int beta) {cv::Mat dst;src.convertTo(dst, -1, alpha, beta);return dst; }// 使用…...

Kafka Offset explorer使用
Kafka集群配置好以后以后运维这边先用工具测试一下,便于rd展开后续的工作,本地调试时一般使用Offset explorer工具进行连接 使用SASL(Simple Authentication and Security Layer)验证方式 使用SCRAM-SHA-256(Salted Challenge Response Authentication…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...