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

重定向

什么是重定向?

  1. 请求转发(Forward)—— 服务器内部的 “秘密跳转”
    你可以把它理解成:你去餐厅(客户端)点了一份炒饭,服务员 A(Servlet1)接单后发现厨房做炒饭需要先找配菜,于是他没告诉你,直接把单子转给了负责配菜的服务员 B(Servlet2),最后服务员 B 做好炒饭端给你。
    特点:全程你只跟服务员 A 打了一次交道(1 次请求),你不知道中间转给了 B;浏览器地址栏显示的还是最初找 A 的地址,不会变。
    关键用法:需要共享数据时用它!比如 Servlet1 查到了用户信息,想传给 Servlet2 显示,就用 request.setAttribute() 存数据,转发后 Servlet2 能直接拿到。
  2. 响应重定向(Redirect)—— 服务器让你 “重新跑腿”
    这个就像:你去政务大厅(客户端)办业务,窗口 A(Servlet1)看了你的材料说 “这个业务不归我管,你去隔壁窗口 B 办”,然后你自己拿着材料去窗口 B(Servlet2)重新排队(发起第 2 次请求)。
    特点:你跑了两趟(2 次请求),第一次找 A,第二次找 B;浏览器地址栏会从 A 的地址变成 B 的地址,能明显看到跳转。
    关键用法:不需要共享数据、或者怕用户重复提交数据时用!比如登录成功后跳转到首页,用重定向的话,用户刷新页面不会重复提交登录信息。
    两者最核心的区别(一句话记牢)
    转发是 “一次请求,内部跳转,地址不变,能传数据”
    重定向是 “两次请求,外部跳转,地址改变,不传数据”
    举个生活例子帮你区分
    转发 = 你叫外卖,商家接单后转给同城配送,你只跟商家沟通,不知道配送员是谁。
    重定向 = 你叫外卖,商家说 “我家没货,你去隔壁店下单”,你得自己去隔壁店重新下单

先搞懂:实操前的准备
假设你已经有了一个基础的 Java Web 项目(比如叫demo),项目结构大概是这样:

demo/
└── src/main/java/
└── com/
└── test/
├── Servlet1.java // 转发的发起者
└── Servlet2.java // 转发的接收者

第一步:写「请求转发」的代码(手把手抄)

  1. 写 Servlet1(发起转发的那个)
    复制下面的代码,创建Servlet1.java:

image

  1. 写 Servlet2(接收转发的那个)
    复制下面的代码,创建Servlet2.java:

image

  1. 运行测试(关键步骤)
    启动你的 Web 项目(比如 Tomcat);
    打开浏览器,输入地址:http://localhost:8080/demo/servlet1;
    你会看到浏览器显示:Servlet2收到的消息:我是从Servlet1传过来的消息;
    重点看地址栏:还是/servlet1,没有变成/servlet2(这就是转发的特点!)

第二步:写「响应重定向」的代码(同样手把手抄)
我们改一下 Servlet1,把转发改成重定向:

  1. 修改后的 Servlet1(发起重定向)

image

  1. 运行测试(看区别)
    重启项目,浏览器输入:http://localhost:8080/demo/servlet1;
    浏览器会立刻跳转到http://localhost:8080/demo/servlet2(地址栏变了!);
    因为重定向不能传req里的数,所以 Servlet2 会显示:Servlet2收到的消息:null(这是重定向的特点)。

image

总结
请求转发:核心代码是getRequestDispatcher().forward(),地址栏不变,能传req里的数据;
重定向:核心代码是sendRedirect(),地址栏会变,不能传req里的数据;
实操只需要两步:写发起跳转的 Servlet,写接收跳转的 Servlet,运行后看地址栏和显示结果就能区分。

http://www.jsqmd.com/news/518474/

相关文章:

  • 不用向量数据库的_RAG,居然跑得更准了?
  • 键盘输入和鼠标输入事件
  • claude code 安装使用
  • 2026年5G物联网创业风口:格行随身WiFi招商加盟 | 全流程操作实战+市场前景分析 - 格行招商部总监张总
  • 美国码农,正被AI「大屠杀」!Karpathy惊呼,面临的就业危机与应对策略
  • python-django-flask的食物节约盲盒系统
  • 三相交错并联LLC的Matlab/Simulink仿真:变频控制与软开关ZVS、ZCS技术
  • 什么是预测性分析(Predictive Analysis)
  • 京东面试官冷笑:让你从0设计一个RAG系统,你连四大核心模块都不懂?
  • django基于机器学习的就业岗位推荐系统 96o5u917
  • 2026无人机外墙清洗公司TOP10排行榜!安全与效率双硬核定座次
  • SQL 笔记
  • 海业
  • 高效批量重命名.txt文件的两种实用方法
  • python协同过滤算法django餐厅推荐系统
  • Amphenol RJ12线束解析与替代方案指南(MP-5FRJ12STWS-002)
  • openEuler 22.03 离线部署Docker全攻略:从二进制包到服务自启
  • 通达信数据导出避坑指南:为什么你的backtrader回测结果总是不准?
  • 意法半导体扩展 800 VDC 电源转换产品组合
  • U盘频繁提示“驱动器存在问题”?三步教你彻底修复并预防
  • 避坑指南:H3C防火墙配置‘Trust域’时,90%的人会忽略的这个接口划分细节
  • SpringBoot+Vue开源MES系统二次开发指南:从接口对接到看板定制
  • python-django-flask个性化服装搭配推荐系统 穿搭推荐系统 小程序
  • 探索HFI脉振方波高频注入与增强滑膜ESMO代码的奇妙世界
  • Hensoldt 与 UMS 签署 GaN 供应协议
  • PROFINET通信新玩法:S7-1200与S7-200 SMART的S7通信配置详解(TIA V16版)
  • Flux.1-Dev深海幻境环境配置详解:Anaconda虚拟环境管理最佳实践
  • 鼎捷T100二次开发避坑指南:开窗多选插入数据的常见问题与解决方案
  • 大数据 基于Python的各省公务员招录职位表数据分析与可视化
  • 从零构建:基于Waterfall的MC多服网络架构实战