You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC中直接返回视图名与redirect:/跳转的差异及代码疑问

Spring MVC两种返回方式的核心区别

你代码里的两种返回逻辑,本质是Spring MVC的请求转发(Forward)和重定向(Redirect),核心区别体现在这几个方面:

1. 请求流程与地址栏表现

  • return "test3"是请求转发:
    服务器内部直接把当前请求(/test2)的处理权转交给test3对应的视图,全程浏览器只发1次请求,地址栏始终显示/test2,不会变化。
  • return "redirect:/test2"是重定向:
    服务器会返回一个302状态码,告诉浏览器“去请求新的地址/test2”,浏览器会发起第2次请求,地址栏会从/test3变成/test2。

2. 方法触发与日志输出

结合你的代码实际运行:

  • 访问/test2时,只会执行test2()方法,打印redirected 1,不会触发test3()方法(因为转发是服务器内部跳转,不是浏览器主动请求/test3)。
  • 访问/test3时,先执行test3()方法打印redirected 2,然后浏览器收到重定向指令,再请求/test2,触发test2()方法打印redirected 1,相当于两次方法调用。

3. 数据传递的差异

  • 转发:同一个请求上下文,Model里的参数可以直接传递到目标视图,不需要额外处理。
  • 重定向:原请求的Model数据会丢失,因为是两个独立的请求。如果要传数据,得用RedirectAttributes.addFlashAttribute()(临时存到会话,取一次就失效),或者把数据拼在URL参数里。

4. 视图解析逻辑

  • 转发:会走你配置的View Resolver,把返回的字符串test3拼接成实际的JSP路径(比如前缀/WEB-INF/jsp/+test3+后缀.jsp),直接返回视图内容。
  • 重定向:Spring会识别redirect:前缀,不会走View Resolver,而是生成重定向响应头,让浏览器重新发起请求,后续的视图解析是新请求触发的。

内容的提问来源于stack exchange,提问作者KUNAL HIRANI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:31