一件Java笔试题引发的蠢绝人寰的故事——转发和重定向

开端——小老弟着急了

  • 按正常作息,平时本人早晨八点起床。可今天不知怎么的,生物钟早了俩小时,揉揉惺忪的双眼,一大早就去微信学习群打卡去了,谁知道发了关键词“冲刺”后群机器人半天没反应。
  • 要说平时我是不会在意这些细节,可是今天我不一样,早起的人呐,正开心自己又向周公争取了一点学习时间,就耐不住寂寞弱弱问了句:今天机器人没开吗?
  • 很快我就收到群友及官方回应:“上午10:00-12:00打卡哦”、“小老弟着急了”…看到某个笑哭脸,瞬间感觉有点脸红,出了个小糗,就用表情包掩饰自己的尴尬,表情包上端庄、优雅、含蓄、斯文、乖巧、懂事的小人仿佛就是我。就是那个为了学习比谁打卡早的我。

在这里插入图片描述

发展——考点有点懵

过了一会终于到了10:00打卡时间,成功打卡后官方发布了今天的笔面试题——一道有关转发和重定向的考点选择题。

今日考点【java语言-java特性-传值&引用】的题目来啦,赶紧来和喵喵一起来讨论吧~

下面有关forward和redirect的描述,正确的是( )?
A.forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
B.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
C.执行redirect时,服务器端告诉浏览器重新去请求地址
D.forward是内部重定向,redirect是外部重定向
E.redirect默认将产生301 Permanently moved的HTTP响应

看到这么多字,先是头晕,然后纠结纠结,仔细看过后蹦出了一句话:

  • forward是转发,redirect是重定向。

在群里说了这句话后就火速前往IEDA,试一下一个Demo:点击index.jsp上的一个链接后跳转至show.jsp,其中用到了转发。

req.getRequestDispatcher("show.jsp").forward(req, resp);

结果是:
在这里插入图片描述
在这里插入图片描述

我就下了一个结论(错误示范):转发的地址栏根目录不变,拼接请求名,重定向是内部2次请求,会丢失作用域中的值,地址栏改变。

  • 完了我想,转发地址栏不变,应该就是前面localhost:8080/部分吧,请求名可能不算。还自我感觉特别良好,觉得自己是操作过的人,谁知道现在我觉得自己当时这个想法十分愚蠢

  • 当时完事儿了我就去看群里的讨论,发现大家在聊jsp,有小伙伴说jsp是前端,我就回复他jsp是简易版servlet。后来有小伙伴坚持说jsp是前端页面,于是我为了巧妙避开话题,就说:话说每日一题我不会哎,有人指点一下吗?

    其实我心里是想:我都会,你们不会的来问我吧。(事后才知道自己的弱小无知与愚蠢)

  • 这个话题顺利开启后大家都在说转发地址栏不会改变,还有一位小伙伴列举了转发和重定向的区别:

    转发和重定向的区别:
    1.从地址栏显示来说
    forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
    redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
    2.从数据共享来说
    forward:转发页面和转发到的页面可以共享request里面的数据
    redirect:不能共享数据.
    3.从运用地方来说
    forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
    redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

高潮——一个诡异的问题

正沉浸在学习的激情中,我突然想到,转发地址栏显示不变啊,我那个为什么会从index.jsp变成getallstudents呢?就又弱弱的问了一句:有个疑问,转发跳转之后为什么地址栏中会显示请求名?

  • 这个问题都把群里一个小伙伴问懵了,问我是不是用了get请求……我看到这个回复也一脸懵,所以又去看了看自己的代码,确定确实是用的req.getRequestDispatcher("show.jsp").forward(req, resp);
  • 盯了好久自己的代码都没个结果,不想浪费时间了,打开了万能的百度,查了半天“为什么转发地址栏会显示请求名?”我当时觉得一定有人遇到过这个问题,可是查了半天,能查到才怪!这个问题真的很诡异,也是被自己气笑了。
  • 于是我到一个大佬刚成立不到一天的“Java初学解惑群”向大佬提问:
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值