Spring MVC 转发和重定向

Spring MVC:请求转发与请求重定向 Spring MVC请求转发与请求重定向介绍 阅读详情
本文介绍Spring MVC中转发和重定向的区别。

转发和重定向

 开始Java EE时,可能会对转发(forward)和重定向(redirect)这个两个概念不清楚。本文先通过代码实例和运行结果图片感性 认识二者的区别,然后给出二者的定义。

1、常规用法,返回一个View

@RequestMapping(value="/testa", method=RequestMethod.GET)
public String inputData(){
    return "testa"; //Spring框架找到对应的View并渲染
}

@RequestMapping(value="/testa", method=RequestMethod.POST)
public String outputData(HttpServletRequest request){
    String userName = request.getParameter("name");
    String password = request.getParameter("pwd");
    request.setAttribute("name", userName);
    request.setAttribute("pwd", password);
    return "testb"; //Spring框架找到对应的View并渲染
 }

打开testa网页:

输入用户名:spring,密码:spring:

这里写图片描述

点击登陆按钮,页面变为如下:

这里写图片描述

再次刷新,谷歌浏览器提示重新提交表单。

这里写图片描述

对比图片,发现浏览器的输入框中URL不变,但是不同情况下显示不同的View。跳转时Model共享(表单会被重复提交)。

2、转发(forward)

@RequestMapping(value="/testa", method=RequestMethod.GET)
public String inputData(){
    return "testa"; //Spring框架找到对应的View并渲染
}

@RequestMapping(value="/testa", method=RequestMethod.POST)
public String outputData(HttpServletRequest request){
    String userName = request.getParameter("name");
    String password = request.getParameter("pwd");
    request.setAttribute("name", userName);
    request.setAttribute("pwd", password);
    //转发到 /testb 的Controller方法(即outputDataX)上
    return "forward:/testb"; 
}

@RequestMapping(value="/testb", method=RequestMethod.POST)
public String outputDataX(HttpServletRequest request){
    return "testb";
}

打开testa网页:

输入用户名:spring,密码:spring:

这里写图片描述

点击登陆按钮,页面变为如下:

这里写图片描述

调试分析:forward后面跟一个资源。当程序运行到return “forward:/testb”时,会执行会执行该资源对应的方法outputDataX。
另外转发时,浏览器的URL不变。

再次刷新,谷歌浏览器提示重新提交表单。

这里写图片描述

3、重定向(redirect)

@RequestMapping(value="/testa", method=RequestMethod.GET)
public String inputData(){
    return "testa"; //Spring框架找到对应的View并渲染
}

@RequestMapping(value="/testa", method=RequestMethod.POST)
public String outputData(HttpServletRequest request){
    String userName = request.getParameter("name");
    String password = request.getParameter("pwd");
    request.setAttribute("name", userName);
    request.setAttribute("pwd", password);
    //重定向到 /testb 的Controller方法(即outputDataY)上
    return "redirect:/testb"; 
}

@RequestMapping(value="/testb", method=RequestMethod.POST)
public String outputDataX(HttpServletRequest request){
    return "testb";
}

@RequestMapping(value="/testb", method=RequestMethod.GET)
public String outputDataY(HttpServletRequest request){
    return "testb";
}

打开testa网页:

输入用户名:spring,密码:spring:

这里写图片描述

点击登陆按钮,页面变为如下:

这里写图片描述

调试分析:redirect后面跟一个资源。当执行到return “redirect:/testb”时,会执行该资源对应个方法outputDataY。由于重定向Model不共享,所以页面无数据显示。
另外重定向后浏览器的输入框中URL也发生变化。

刷新后,谷歌浏览器没有提示重新提交表单

这里写图片描述

总结:
常说的可以通过redirect: URL防止重复提交表单,就是上面过程的意思。
原理是对于redirect而言,Request的attribute不会被传递,放到session中,session在跳到页面后马上移除对象。所以你刷新一下后这个值就会丢掉。

如果你希望Request的attribute被传递,可以使用RedirectAttributes类。

@RequestMapping(value="/testa", method=RequestMethod.GET)
 public String inputData(){
  return "testa"; //Spring框架找到对应的View并渲染
 }

 @RequestMapping(value="/testa", method=RequestMethod.POST)
 public String outputData(HttpServletRequest request, RedirectAttributes redirectAttributes){
  String userName = request.getParameter("name");
  String password = request.getParameter("pwd");
  request.setAttribute("name", userName);
  request.setAttribute("pwd", password);
  //重定向到 /testb 的Controller方法(即outputDataY)上
  //重定向传递参数的两种方法
  redirectAttributes.addAttribute("name", userName);
  redirectAttributes.addFlashAttribute("pwd", password);

  return "redirect:/testb"; 
 }

 @RequestMapping(value="/testb", method=RequestMethod.POST)
 public String outputDataX(HttpServletRequest request){
  return "testb";
 }

 @RequestMapping(value="/testb", method=RequestMethod.GET)
 public String outputDataY(HttpServletRequest request){
  String userName = request.getParameter("name");
  request.setAttribute("name", userName);
  return "testb";
 }

运行如下:

这里写图片描述

上面示例了使用RedirectAttributes传递参数的两种方法:
1. 使用RedirectAttributes类的addAttribute方法传递参数会跟随在URL后面,如上图谷歌浏览器所示,URL为http://localhost:8080/testb?name=spring
2. 使用RedirectAttributes类的addFlashAttribute方法传递参数不会跟随在URL后面,会把该参数值暂时保存于session,待重定向URL获取该参数后从session中移除,这里的redirect必须是方法映射路径,jsp无效。你会发现redirect后的jsp页面中pwd只会出现一次,刷新后pwd再也不会出现了。下图为刷新后的结果,密码pwd显示为空。这验证了上面说的,pwd在被访问后就会从session中移除。对于防止重复提交可以使用此方法。

定义

作为一个经验丰富的servlet/JSP程序员,必须知道转发和重定向的区别。 转发比重定向快,因为重定向经过客服端,而转发没有。但是,又是采用重定向更好,若需要重定向到一个外部网站,则无法使用转发。

个人理解:好比服务器窗口A点餐,窗口B取餐。转发就是浏览器到服务器窗口A点餐,点完餐后,服务器内部从窗口B取餐,把饭菜直接给浏览器。重定向就是浏览器到服务器窗口A点餐,服务器不帮助浏览器从窗口B取餐,而是告知浏览器到B取餐。浏览器得到信息后再向窗口B发出取餐要求。

返回 Java EE Web开发系列导航。

Spring MVC中的请求转发与重定向 请求转发(forward)是一种高效的内部请求处理方式,它可以在不改变浏览器地址的情况下,将请求从一个控制器转发到另一个控制器。通过手动拼接URL或使用传递属性,我们可以灵活地实现请求转发的功能。在实际开发中,根据具体需求选择合适的请求处理方式是非常重要的。 阅读详情

相关推荐

从Level 1到Level 22:手把手带你用Burp Suite通关burp-labs靶场全关卡(附难点解析)

本文详细解析了如何使用Burp Suite通关burp-labs靶场的22个关卡,从基础爆破到复杂编码绕过,涵盖Intruder配置、响应过滤、POST请求处理、MD5爆破等关键技术。特别针对Level 16的三重编码和Level 20的中文响应处理等难点提供实战技巧,帮助渗透测试工程师提升Web安全实战能力。

weixin_28831461的博客 435

Spring MVC的转发和重定向

Springmvc

weixin_43722111的博客 4554

ANSYS Fluent 2023R2实战:用欧拉多相流模型搞定流化床模拟(附详细参数避坑)

本文详细解析了ANSYS Fluent 2023R2中欧拉多相流模型在流化床模拟中的应用,包括模型选择、材料属性设置、相间作用力配置及初始化技巧。特别针对高颗粒浓度工况提供参数优化方案,帮助工程师提升模拟精度与效率,适用于化工、能源等领域的流化床反应器设计。

weixin_30938149的博客 268

浅谈SpringMVC之转发与重定向

浅谈SpringMVC之转发与重定向

weixin_47268883的博客 362

SPH vs Lagrange网格混合建模实战:用LS-DYNA模拟弹丸穿孔效应

本文深入探讨了在LS-DYNA中运用SPH与Lagrange网格混合建模技术,高效模拟超高速碰撞下弹丸穿孔效应的实战方法。通过分析模型分区策略、耦合界面处理及关键参数设置,解决了传统方法在模拟大变形、材料断裂时的网格畸变或计算成本高昂问题,为相关工程仿真提供了兼顾精度与效率的解决方案。

weixin_29211309的博客 108

AXI_IIC读写操作

其实在之前调试过一次AXI_IIC,没调试通,碍于赶进度,就直接使用了zynq-PS侧的IIC,就一直搁置着了,这次抽空将这部分内容继续调试下去,这一次没花多少时间就调通了,现在将我的调试过程,经历,以及参考文档如下: 参考文档:pg090-axi-iic.pdf 参考链接:https://forums.xilinx.com/t5/Design-and-Debug-Techniques-Blog/IIC-Protocol-and-Programming-Sequence/ba-p/1072248 上面的这个

qq_32134427的博客 1万+

Spring MVC 重定向(Redirect)与转发(Forward)全解析

转发是服务器内部的资源跳转,整个过程只发起1 次 HTTP 请求,客户端(浏览器)完全感知不到跳转。另外,在默认情况下,单使用字符串来返回视图就是转发也就是说,下面这两种情况是一样的唯一不一样的地方在于直接使用字符串的话是会有一个拼接prefix+视图+suffix以这样的形式组成完整的访问路径但是转发的话就需要写全路径客户端发送登录请求(如)到服务器;服务器接收请求,验证用户信息通过后,决定 “转发到主页资源”;

2302_80115835的博客 1052

基于STM32设计的水质检测系统_333

水质安全对生态环境、农业生产、工业制造以及人类健康至关重要。针对传统水质检测方式检测周期长、成本高、实时性差的问题,本项目设计并实现了一种基于STM32的水质检测系统。系统采用STM32F103RCT6作为主控芯片,集成水温、pH值、电导率和浊度等传感器,能够实时采集水质数据,并通过OLED显示屏进行本地显示。同时,利用Air724UG 4G模块通过MQTT协议将数据上传至华为云IoT平台,实现远程监测。用户可通过Qt5开发的Android手机APP和Windows上位机查看水质数据,并接收超限报警提示。此

713

Spring MVC怎么样设定重定向和转发的?思维导图 代码示例(java 架构)

正确理解和运用Spring MVC中的重定向和转发机制可以帮助开发者更好地管理请求流,确保应用程序具有良好的用户体验和性能表现。选择重定向还是转发取决于具体的应用场景需求。例如,当你需要更新浏览器地址栏或者防止用户重复提交表单时,应该选择重定向;而如果你希望保持当前URL并且只需要在服务器端内部切换视图,则可以使用转发。

qq_33240556的博客 671

Spine骨骼动画查看器 - Skeleton Viewer

骨骼动画是现代游戏和动画制作中常用的技术之一。Spine骨骼动画查看器(Skeleton Viewer)是一个官方提供的工具,用于查看和调试Spine骨骼动画。本文将介绍Skeleton Viewer的功能和使用方法,并提供相应的源代码示例。通过Skeleton Viewer,开发者可以直观地查看和调试Spine骨骼动画,包括骨骼结构、动画播放和事件触发等。这有助于提高骨骼动画的质量和效果,并加速开发过程。以上代码演示了如何使用Skeleton Viewer查看和播放Spine骨骼动画。

HsvvDatabase的博客 3460

OpenHarmony AI系列:神经网络处理单元(NPU)驱动架构与实现详解

NPU(Neural Processing Unit,神经网络处理单元)是专门为神经网络计算设计的硬件加速器。在OpenHarmony系统中,NPU驱动是通过NNRT(Neural Network Runtime,神经网络运行时)框架实现的,它作为中间桥梁连接上层AI推理框架和底层NPU硬件,实现AI模型的跨芯片推理计算。

m0_67505153的博客 665

SpringMVC中的转发和重定向

请求转发概念:一种在服务器内容资源跳转的方式【内部】【同一个请求链】原理图:得到转发器 request.getRequestDispatcher(“/要跳转到地址”)调用转发器的方法: forward(request, response) //将请求和响应对象转发给下一个页面写成一句话: request.getRequestDispatcher(“/url”).forward(request, response);转发地址栏路径不变转发只能访问当前服务器下的资源。

fj123321666的博客 2247

全新DEIM有效涨点改进目录 | 本专栏持续更新500+篇内容 | 包含各种顶会顶刊卷积、注意力、特征融合模块、有效特征聚合提取模块,上采样模块、下采样模块,二次创新模块、独家创新等几百种创新点改进

🚀【CVPR2025DEIM改进专栏速览】🔥 专栏提供500+篇目标检测创新改进方案,涵盖卷积/注意力/特征融合等创新改进点,均源自顶会论文及实战经验。支持多领域应用(工业/医疗/遥感等),配套完整教程和答疑服务。亮点包括: 1️⃣ 持续更新SOTA模型改进方案 2️⃣ 小白友好型实验操作指南 3️⃣ 跨学科科研支持(已助非计算机专业发表论文) 4️⃣ 提供虚拟环境配置方案。 订阅可获完整项目代码及交流群服务,适合研究生科研论文改进需求。价格呈上涨趋势,早订更优惠!

Ai缝合怪、助力小伙伴高效发论文 2043

Spring MVC重定向和转发

Spring MVC 请求方式分为转发、重定向 2 种,分别使用 forward 和 redirect 关键字在 controller 层进行处理。 重定向是将用户从当前处理请求定向到另一个视图(例如 JSP)或处理请求,以前的请求(request)中存放的信息全部失效,并进入一个新的 request 作用域;转发是将用户对当前处理的请求转发给另一个视图或处理请求,以前的 request 中存放的信息不会失效。 转发是服务器行为,重定向是客户端行为。 1)转发过程 客户浏览器发送 http 请求,Web 服

洛卡JAVA架构师每日分享Java架构师知识 2127

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【Spring-MVC】转发和重定向

转发和重定向10.1 转发10.2 重定向 10.1 转发 在SpringMVC中默认的就是转发,在我们使用ModelAndView或者是直接return字符串时,其实就是默认走的转发 我们也可以显式的访问路径的前面加上forward:,这样的方式也是会去走一个转发的 注意: 我们如果使用默认的方式进行转发的话,我们的路径是会去拼接视图解析器的前缀和后缀。 如果我们选择显式的完整的去进行使用转发,那么这时候视图解析器就不起作用

MY9_19的博客 709

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring MVC之转发与重定向

Spring MVC之转发与重定向 1.转发:forWard 涵义:所谓转发“forward”就是控制器“collection”向服务器发出请求,例如发生资源无法查询时,将会自动将请求转到服务器中的其他资源中,将资源获取到。这就是所谓的转发!转发就是一次控制器与服务器的一次交互动作。 转发过程: 客户端浏览器发送http请求 → web服务器接受此请求 → 调用内部的一个方法在容器内部完成请求处理和转发动作 → 将目标资源发送给客户。 部分代码如下: 注解:/** * 返回String类型转发写法

Tomeditation的博客 460

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

spring代码示例:Spring MVC设定重定向和转发

在重定向或转发之前,可以在处理方法中执行一些业务逻辑或设置一些参数,然后返回重定向或转发的目标URL。重定向(Redirect)是指将请求重定向到另一个URL,这是一个完全新的请求。转发(Forward)是指将请求转发到另一个URL,而不是创建一个新的请求。在Spring MVC中,可以通过不同的方式来设置重定向(Redirect)和转发(Forward)。使用重定向和转发可以实现不同的页面跳转和请求处理方式,具体选择哪种方式取决于业务需求和设计考虑。

学亮编程手记 623

Spring MVC页面的转发和重定向、数据绑定

JSP 页面的转发和重定向 Spring MVC 默认以转发的形式响应 JSP,可以手动进行修改。 重定向 @RequestMapping("/restful/{id}/{name}") public String restful(@PathVariable("id") Integer id,@PathVariable("name") String name){ System.out.println(id+"-"+name); return "redirect:/index.jsp"; } 设置重定向

weixin_44152682的博客 509

springmvc java中转发_Spring MVC 转发和重定向

本文介绍Spring MVC中转发和重定向的区别。转发和重定向开始Java EE时,可能会对转发(forward)和重定向(redirect)这个两个概念不清楚。本文先通过代码实例和运行结果图片感性 认识二者的区别,然后给出二者的定义。1、常规用法,返回一个View@RequestMapping(value="/testa", method=RequestMethod.GET)public Str...

weixin_35900818的博客 180

Spring MVC学习总结(五):请求转发与重定向

Web开发中,资源跳转分为两种方式:请求转发和重定向,SpringMVC用forward和redirect关键字在controller层进行处理。 1、请求转发和重定向 (1)请求转发 当客户端发送http请求,Web服务器接收此请求并调用内部的一个方法在容器内部完成请求处理和转发动作,然后将目标资源发送给客户。需要注意的是,这里转发的路径必须是在同一个Web容器下的URL,它不能转向到其他的Web路径上。此时客户端浏览器的地址栏中显示的是第一次访问的路径,也就是说客户端察觉不到服务器的转发操作。..

weixin_47382783的博客 2079

Spring MVC 中视图的实现原理,在Spring MVC 中实现重定向和转发,以及访问静态资源

ViewResolver 接口,视图解析接口(ThymeleafViewResolver 实现了 ViewResolver 接口,InternalResourceViewResolver 也是实现了ViewResolver接口...),这个接口作用是将逻辑视图名称 转换为 物理视图名称,并且最终返回一个 view 接口对象,核心方法是:View resolveViewName(String viewName,Locale locale) throws Exception;

2501_92608043的博客 631

Spring MVC学习笔记(二)——控制器Controller、转发与重定向

控制器Controller: 控制器提供复杂访问应用程序的行为,通常通过实现接口定义或注解定义两种方式实现 解析处理用户的请求并将结果返回给DispatcherServlet 定义控制器Controller的两种常用方式: ① 实现Controller接口: 实现org.springframework.web.servlet.mvc.Controller接口,并重写handleRequest方法: 首先创建一个项目,编写web.xml文件: <?xml version="1.0" encoding

weixin_43912697的博客 1691

Spring MVC请求转发与重定向:深度解析与应用实战

在现代Web应用开发中,页面跳转和请求流转是每个开发者必须掌握的核心技能。Spring MVC作为Java领域最流行的Web框架,提供了优雅且强大的转发(Forward)和重定向(Redirect)机制。正确理解并应用这两种机制,不仅能优化用户体验,还能提升应用的安全性和可维护性。本文将深入探讨Spring MVC中转发与重定向的实现原理、使用场景、最佳实践以及常见陷阱,帮助你在实际项目中做出正确的技术选择。请求转发是服务器内部的行为,客户端浏览器对此完全无感知。

用文字记录技术,用分享回馈社区,用坚持见证成长 1665
上一篇: Spring Boot配置方式
下一篇: Spring Boot WebGL小程序
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值