Java每日一题_关于redirect和forward

题目 ID:javaxxf

(不定项选择题) 下面有关forward和redirect的描述,正确的是() ?

A forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求

B 执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址

C 执行redirect时,服务器端告诉浏览器重新去请求地址

D forward是内部重定向,redirect是外部重定向

E redirect默认将产生301 Permanently moved的HTTP响应

答案解析 ID:javaxxf

正确答案是BCD

1.从地址栏显示来说

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说

forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

3.从运用地方来说

forward:一般用于用户登陆的时候,根据角色转发到相应的模块.

redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说

forward:高.

redirect:低.

本质区别:

解释一 

一句话,转发是服务器行为重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程:客户浏览器发送http请求----》web服务器接受此请求----》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源 发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客 户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器----》客户浏览器发现 是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的 路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二

重定向,其实是两次request, 第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

解释三

请求转发:forword 一次请求,地址栏不变。比如你要问小李借钱,小李说没钱,但是小李帮你从小王那借了钱。这样你还在原地,只开了一次口,就借到了钱。 请求重定向:redirect 两次请求,地址栏变。 同样是问小李借钱,小李说没钱,但是小李告诉你小王有钱,但是小李不帮你借,只告诉你小王在哪,这时你就得去小王家借钱,最终借到了钱。这样你换了一个地方,并且开了两次口才借到了钱。


巩固练习

(单选题) 看以下代码:

文件名称:forward.jsp

<html>  
     <head><title> 跳转  </title> </head> 
     <body>  
         <jsp:forward page="index.htm"/>     
     </body>
 </html>

如果运行以上jsp文件,地址栏的内容为

A http://127.0.0.1:8080/myjsp/forward.jsp

B http://127.0.0.1:8080/myjsp/index.jsp

C http://127.0.0.1:8080/myjsp/index.htm

D http://127.0.0.1:8080/myjsp/forward.htm

看了上面的解释这道题目不难吧?请把你的答案在留言板大声的说出来!!

提示:不懂的朋友可以把上面解析背一下!不但可以增强自己对知识点的掌握!而且对以后工作面试也有帮助!给自己定一个任务!每天就背一个知识点!日积月累!希望大家跟着本公众号一起进步!

推荐阅读目录

Java学习求职路线(资料、视频、源码、项目实战)

程序员用这5种方式学习编程最无效,停止这些可以少走弯路!

大学毕业刚培训完Java,没有经验怎么找工作呢?

⊙请问你知道什么是栈吗?

⊙看看你对队列的了解有多少?

⊙面试题68(加深你对栈的理解_让你知道什么是栈)

⊙来测试一下你对数据结构中的栈和队列的了解有多少?

⊙面试题63(链表,哈希表)

⊙ 请你对Java中树的了解有多少?

这个培训机构怎么?

JavaEE就业学习路线(给初学者以及自学者一个学习方向)?

Servlet实现一个简单的登录【验证码】功能

二维码生成源码

java学习微信讨论群

Spring学习笔记

Mybatis学习笔记

原文发布于微信公众号 - java学习(javaxxf)

原文发表时间:2018-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

缓存在高并发场景下的常见问题

丁浪,阿里影业架构师,社区活跃人士。有分布式事务,分布式缓存方面的总结文章获得好评。 本文获作者授权发布。 缓存一致性问题 当数据时效性要求很高时,需要保证缓存...

2018
来自专栏杨建荣的学习笔记

通过shell脚本添加备库日志 (r9笔记第94天)

今天下午的时候,准备顺手写一个简单的脚本,但是发现很多事情较真起来真是寸步难行。在写脚本的过程中碰到了太多的问题,很多时候感觉像要实现的功能更通用,就得做更多的...

3786
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第18章 BSD Sockets基础知识

本章节为大家讲解BSD Sockets,需要大家对BSD Sockets有个基础的认识,方便后面章节Socket实战操作。

1163
来自专栏后端技术探索

后端线上服务监控与报警方案

一个功能上线后,其实研发心里根本没底儿,不知道这个功能上线以后是不是真的没问题;有经验一些老同学还知道直接登录线上机器去tail -f php.error.lo...

2342
来自专栏何俊林

美团猫眼电影Android模块化实战总结

首先一句话概括:我想把这几个月做的事情记录下来,并且希望尽量详细,希望读者读了这篇文章能够知道项目进行模块化,项目改业务框架可能会遇到哪些问题,具体每个步骤都做...

3002
来自专栏架构师之路

90行代码,搞定日志监控框架

上一篇《100行代码,搞定http监控框架》介绍了通用+可扩展的http监控平台的架构: 监控平台层:调度监控项,通过后台管理监控项 信息管理层:通过服务和后台...

8777
来自专栏依乐祝

.NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练

上篇文章我带着大家通过分析了一遍ASP.NET Core的源码了解了它的启动过程,然后又带着大家熟悉了一遍配置文件的加载方式,最后引出了依赖注入以及控制反转的概...

741
来自专栏北京马哥教育

Linux 软中断机制分析

软中断分析最近工作繁忙,没有时间总结内核相关的一些东西。上次更新博客到了linux内核中断子系统。这次总结一下软中断,也就是softirq。之后还会总结一些ta...

4818
来自专栏七夜安全博客

go go go - beego

在上一篇文章What!!! so fast中,我介绍了golang这种语言,并使用golang开发了一个端口扫描工具。现在我的主要工作是做网络安全方面的开发与策...

3052
来自专栏玩转JavaEE

SpringBoot中使用Freemarker构建邮件模板

本文是vhr系列的第十三篇,项目地址:https://github.com/lenve/vhr 当邮件内容比较简单的时候,我们可能一行字符串就能表达所有意思...

3586

扫码关注云+社区

领取腾讯云代金券