Spring MVC中redirect重定向几种方式(重构)

简介

在Web应用开发中,用户在提交表单后刷新页面或点击后退按钮,可能导致表单被重复提交,这会引发多种问题,如重复下订单等。为了避免这种情况,我们可以利用HTTP重定向(redirect)机制,在服务器端进行重定向跳转,从而有效防止表单的重复提交。

什么是Redirect重定向

HTTP重定向是Web开发中一种常用的技术,通过服务器指示客户端浏览器转到另一个URL地址。它的工作流程简单描述如下:

  • 客户端发送请求到服务器。
  • 服务器处理请求后,通过发送特定的HTTP响应头(如Location)来通知客户端需要进行再次请求的新URL。
  • 客户端接收到这个响应后,自动向新的URL发起请求。

这个过程中,初始请求和重定向请求是完全独立的,所以在第一个请求中设置的任何属性(通过setAttribute方法)在后续的请求中都是不可获取的。

Spring MVC中实现Redirect的方法

在Spring MVC框架中,我们有多种方式实现重定向,下面介绍四种常用的方法:

1. 使用HttpServletResponsesendRedirect方法
@RequestMapping(value="/testredirect", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView testRedirect(HttpServletResponse response) {response.sendRedirect("/index");return null;
}

这种方法是最直接的,通过response.sendRedirect调用实现重定向。

2. 通过返回字符串实现重定向
  • 不带参数的重定向
@RequestMapping(value="/testredirect", method = {RequestMethod.POST, RequestMethod.GET})
public String testRedirect() {return "redirect:/index";
}
  • 带参数的重定向
@RequestMapping("/testredirect")
public String testRedirect(Model model, RedirectAttributes attr) {attr.addAttribute("test", "51gjie"); // URL后带上test参数attr.addFlashAttribute("u2", "51gjie"); // 不在URL后,保存在sessionreturn "redirect:/user/users";
}

使用RedirectAttributes可以控制哪些参数需要通过URL传递,哪些通过session传递但不显示在URL上。

3. 使用ModelAndView进行重定向
  • 不带参数
@RequestMapping(value="/restredirect", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView restRedirect() {return new ModelAndView("redirect:/main/index");
}
  • 带参数
@RequestMapping(value="/toredirect", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView toRedirect(String userName) {ModelAndView model = new ModelAndView("redirect:/main/index");model.addObject("userName", userName);return model;
}

ModelAndView方法提供了一种更灵活的方式来处理重定向和参数传递。

4. 直接跳转到某个网页
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
httpServletResponse.sendRedirect("http://srip.cpu.edu.cn/#/admins");

这种方式可以用来实现跨域的重定向跳转。

参数传递

在重定向中传递参数有两种方式:直接在URL中拼接参数,或者使用RedirectAttributes。直接拼接URL的方式简单直观,但所有参数都会暴露在地址栏中。使用RedirectAttributes可以更安全地传递参数,部分参数可以通过session传递而不在URL中显示,但需要注意的是,使用addFlashAttribute添加的参数,一旦被读取即会从session中移除,这有助于防止信息泄露。

总结

重定向是解决Web应用中重复提交问题的有效手段。在Spring MVC中,我们可以选择不同的方法来实现重定向,每种方法都有其适用场景。通过合理使用重定向及参数传递机制,可以提高应用的安全性和用户体验。

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

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

相关文章

《深入理解Maven:构建工具、常用命令与项目包技巧解析》

文章目录 何为构建工具 | ToolsMaven插件的常用命令 | Commondclean总结 | Summary compile总结 | Summary package总结 | Summary install总结 | Summary build和compile的区别 | Knowledge项目包技巧 | Method 在后端领域开发中,我们构建项目常用到了Maven和Gradl…

Science Robotics 封面论文:美国宇航局喷气推进实验室开发了自主蛇形机器人,用于冰雪世界探索

人们对探索冰冷的卫星(如土卫二)的兴趣越来越大,这可能具有天体生物学意义。然而,由于地表或冰口内的环境极端,获取样本具有挑战性。美国宇航局的喷气推进实验室正在开发一种名为Exobiology Extant Life Surveyor&…

ChatGPT:激发学术创新,引领论文写作进程!

ChatGPT无限次数:点击跳转 摘要: 随着人工智能技术的不断发展,ChatGPT成为了学术界的一股清新风潮。本文将探讨ChatGPT在学术论文写作方面的独特性和潜力,并通过多个实例展示其独特的优势。通过ChatGPT,我们可以打破论文写作的瓶…

【论文阅读笔记】Split frequency attention network for single image deraining

1.论文介绍 Split frequency attention network for single image deraining 用于单幅图像去噪的分频注意力网络 Paper Code 2023年 SIVP 2.摘要 雨纹对图像质量的影响极大,基于数据驱动的单图像去噪方法不断发展并取得了巨大的成功。然而,传统的卷积…

C/C++动态链接库的封装和调用

1 引言 静态链接库是在编译时被链接到程序中的库文件,在编译时,链接器将静态链接库的代码和数据复制到最终的可执行文件中。动态链接库是在程序运行时加载的库文件,在编译时,可执行文件只包含对动态链接库的引用,而不…

外贸网站文章批量生成器

随着全球贸易的不断发展,越来越多的企业开始关注外贸市场,而拥有高质量的内容是吸引潜在客户的关键之一。然而,为外贸网站生产大量优质的文章内容可能是一项耗时且繁琐的任务。因此,外贸网站文章批量生成软件成为了解决这一难题的…

remote: GitLab: LFS objects are missing(pre-receive hook declined)

Git push 遇到错误: remote: GitLab: LFS objects are missing. Ensure LFS is properly set up or try a manual "git lfs push --all". To http://192.168.x.x/xxxxxx.git! [remote rejected] dev -> dev (pre-receive hook declined) error: faile…

语音识别:whisper部署服务器(远程访问,语音实时识别文字)

Whisper是OpenAI于2022年发布的一个开源深度学习模型,专门用于语音识别任务。它能够将音频转换成文字,支持多种语言的识别,包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下(如不同的背景噪声水…

做跨境用哪种代理IP比较好?怎么选到干净的IP?

代理IP对于做跨境的小伙伴来说,都是必不可少的工具,目前出海的玩法已经是多种多样,开店、账号注册、短视频运营、直播带货、网站SEO等等都是跨境人需要涉及到的业务。而国外代理IP的获取渠道非常多,那么做跨境到底应该用哪种代理I…

linux开机启动设置方法

开机启动最简单的方法是在/etc/rc.local启动脚本中写入需要执行的命令。另一种方式是在/etc/init.d中编写一个启动脚本。但是这两种方式都不是正规的启动模式。init.d是Linux最早的服务管理方案,命令service start xxx就是去调用init.d中的启动脚本。之后init机制被…

蓝桥杯(3.18 刷真题)

P8697 [蓝桥杯 2019 国 C] 最长子序列 AC import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String s1 sc.nextLine();String s2 sc.nextLine();char[] c1 s1.toCharArray();char[] c2 s2.toCh…

使用 Redisson 实现分布式 CountDownLatch,如何使用RCountDownLatch实现内外网数据互通的超时控制?

闭锁(CountDownLatch)是一种用于同步多个线程的机制,它可以让一个或多个线程等待其他线程完成某个任务后再继续执行。 在Java中,RCountDownLatch 是 Redisson 提供的分布式闭锁实现,它基于 Redis 的分布式系统&#x…

基于Spring Boot的研究生志愿填报辅助系统

摘 要 二十一世纪我们的社会进入了信息时代,信息管理系统的建立,大大提高了人们信息化水平。传统的管理方式对时间、地点的限制太多,而在线管理系统刚好能满足这些需求,在线管理系统突破了传统管理方式的局限性。于是本文针对这一…

掌握请求控制权:Axios 如何取消请求的两种方法

在前端开发中,网络请求是非常常见的操作。而有时候,我们可能需要在发送请求后取消它,比如用户在请求还未完成时离开了当前页面或者执行了其他操作,本文将介绍如何在使用 Axios 发送请求时取消这些请求。 基本概念 在 Axios 中&am…

【NLP03-新闻主题分类任务】

新闻主题分类任务 背景 以一段新闻报道中的文本描述内容为输入,使用模型帮助我们判断它最优可能属于哪一种类型的新闻,这是典型的文本分类问题,这里假定每种类型是互斥的,即文本描述有且只有一种类型 新闻主题分类数据 #通过t…

swagger使用手册

1.导入依赖 <!--引入swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</…

什么是集成学习

集成学习是一种机器学习方法&#xff0c;目的是将多个基本学习算法组合起来&#xff0c;以达到更好的预测性能。通过将多个模型的预测结果进行加权平均或投票&#xff0c;集成学习能够减少单个模型的偏差和方差&#xff0c;从而提高整体的泛化能力。常见的集成学习方法包括Bagg…

AR/MR产品设计(二):如何用一双手完成与虚拟对象的自然交互

AR/MR产品设计&#xff08;二&#xff09;&#xff1a;如何用一双手完成与虚拟对象的自然交互 - 知乎 手是我们与现实世界交互最重要的方式&#xff0c;同样在虚实混合的世界中是最重要的交互方式 在AR/MR/VR的交互中&#xff0c;手势交互会作为XR的重要交互动作&#xff0c;因…

鸿蒙开发 一 (一)、框架了解

一、UI框架 开发范式名称 语言生态 UI更新方式 适用场景 适用人群 声明式开发范式 ArkTS语言 数据驱动更新 复杂度较大、团队合作度较高的程序 移动系统应用开发人员、系统应用开发人员 类Web开发范式 JS语言 数据驱动更新 界面较为简单的程序应用和卡片 Web前端…

视频技术1:使用ABLMediaServer推流rtsp

ABLMediaServer定位是高性能、高稳定、开箱即用、商用级别的流媒体服务器 下边展示了如何把1个mp3作为输入源&#xff0c;转换为rtsp流的过程。 作用&#xff1a;用rtsp模拟摄像头的视频流 1、启动ABLMediaServer ABLMediaServer-2024-03-13\WinX64\ABLMediaServer.exe 配…