前言

当用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉不到请求转发的。根据转发方式的不同,可以区分为直接请求转发(Forward)和间接请求转发(Redirect),那么这两种转发方式有何区别呢?本篇在回答该问题的同时全面的讲解两种请求转发方式的原理和区别。
【关键考点】
•请求转发的含义;
•Forward转发请求的原理;
•Redirect转发请求的原理。
【考题分析】
Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。
直接转发方式(Forward),客户端和浏览器只发出一次请求,Servlet、HTML、JSP或其它信息资源,由第二个信息资源响应该请求,在请求对象request中,保存的对象对于每个信息资源是共享的。
间接转发方式(Redirect)实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。
举个通俗的例子:
直接转发就相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A”;
间接转发就相当于:"A找B借钱,B说没有,让A去找C借"。
下面详细阐述一下两者的原理:
一:间接请求转发(Redirect)
间接转发方式,有时也叫重定向,它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。在Servlet中,通过调用response对象的SendRedirect()方法,告诉浏览器重定向访问指定的URL,示例代码如下:
......
//Servlet中处理get请求的方法
public void doGet(HttpServletRequest request,HttpServletResponse response){
//请求重定向到另外的资源
response.sendRedirect("资源的URL");
}
........
上图所示的间接转发请求的过程如下:
1.浏览器向Servlet1发出访问请求;
2.Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2;
3.浏览器向servlet2发出请求;
4.最终由Servlet2做出响应。
二:直接请求转发(Forward)
直接转发方式用的更多一些,一般说的请求转发指的就是直接转发方式。Web应用程序大多会有一个控制器。由控制器来控制请求应该转发给那个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资源来返回给用户,这个过程就是经典的MVC模式。
javax.serlvet.RequestDispatcher接口是请求转发器必须实现的接口,由Web容器为Servlet提供实现该接口的对象,通过调用该接口的forward()方法到达请求转发的目的,示例代码如下:
......
//Servlet里处理get请求的方法
public void doGet(HttpServletRequest request , HttpServletResponse response){
//获取请求转发器对象,该转发器的指向通过getRequestDisPatcher()的参数设置
RequestDispatcher requestDispatcher =request.getRequestDispatcher("资源的URL");
//调用forward()方法,转发请求
requestDispatcher.forward(request,response);
}
......
上图所示的直接转发请求的过程如下:
1.浏览器向Servlet1发出访问请求;
2.Servlet1调用forward()方法,在服务器端将请求转发给Servlet2;
3.最终由Servlet2做出响应。
技巧:其实,通过浏览器就可以观察到服务器端使用了那种请求转发方式,当单击某一个超链接时,浏览器的地址栏会出现当前请求的地址,如果服务器端响应完成以后,发现地址栏的地址变了,则证明是间接的请求转发。相反,如果地址没有发生变化,则代表的是直接请求转发或者没有转发。
问:直接转发和间接转发的原理及区别是什么?
答:Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。对应到代码里,分别是RequestDispatcher类的forward()方法和HttpServletRequest类的sendRedirect()方法。
对于间接方式,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。它本质上是两次HTTP请求,对应两个request对象。
对于直接方式,客户端浏览器只发出一次请求,Servlet把请求转发给Servlet、HTML、JSP或其它信息资源,由第2个信息资源响应该请求,两个信息资源共享同一个request对象。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。最后,祝大家都能找到一个称心满意的工作!
# redirect
# forward区别
# java
# forward
# Java中forward转发与redirect重定向的区别
# java 中sendredirect()和forward()方法的区别
# java中forward转发的使用
# 信息资源
# 重定向
# 两种
# 转发给
# 两次
# 去找
# 所示
# 另外一个
# 或其它
# 再向
# 上图
# 的是
# 客户端
# 称心满意
# 会有
# 多个
# 都能
# 第二个
# 会把
# 这篇文章
相关文章:
建站168自助建站系统:快速模板定制与SEO优化指南
黑客如何利用漏洞与弱口令入侵网站服务器?
家庭服务器如何搭建个人网站?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
广州美橙建站如何快速搭建多端合一网站?
如何快速查询网站的真实建站时间?
建站之星安装路径如何正确选择及配置?
c# 在高并发场景下,委托和接口调用的性能对比
潮流网站制作头像软件下载,适合母子的网名有哪些?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
如何有效防御Web建站篡改攻击?
如何在IIS管理器中快速创建并配置网站?
如何在香港服务器上快速搭建免备案网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
公司网站设计制作厂家,怎么创建自己的一个网站?
如何在云主机快速搭建网站站点?
c++怎么用jemalloc c++替换默认内存分配器【性能】
三星网站视频制作教程下载,三星w23网页如何全屏?
建站之星安装步骤有哪些常见问题?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
济南网站制作的价格,历城一职专官方网站?
电商网站制作价格怎么算,网上拍卖流程以及规则?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
山东云建站价格为何差异显著?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
如何用5美元大硬盘VPS安全高效搭建个人网站?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何做静态网页,sublimetext3.0制作静态网页?
如何在万网自助建站中设置域名及备案?
如何在云指建站中生成FTP站点?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
Android滚轮选择时间控件使用详解
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
营销式网站制作方案,销售哪个网站招聘效果最好?
如何通过云梦建站系统实现SEO快速优化?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
网站制作软件有哪些,制图软件有哪些?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何挑选最适合建站的高性能VPS主机?
建站之星价格显示格式升级,你的预算足够吗?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何正确选择百度移动适配建站域名?
c# 在ASP.NET Core中管理和取消后台任务
如何选择适配移动端的WAP自助建站平台?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
如何通过宝塔面板实现本地网站访问?
如何快速搭建自助建站会员专属系统?
C++如何编写函数模板?(泛型编程入门)
*请认真填写需求信息,我们会在24小时内与您取得联系。