转发(forward)和重定向(sendRedirect)

摘要:
有两个方法,include()/forward()1.include()voidinclude用来记录保留request和response,以后不能再修改response里表示状态的信息。

一. RequestDispatche

是一个Web资源的包装器,可以用来把当前的Request传递给该资源,或者把新的资源包括到当前的相应中。详细来说:RequestDispatch对象从客户端获取请求request,并把他们传递到服务器上的servlet、html、jsp。

有两个方法,include()/forward()

1. include()

  • void include(ServletRequest request,ServletResponse response)
  • 用来记录保留request和response,以后不能再修改response里表示状态的信息。

2. forward() 转向

void forward(ServletRequest request,ServletResponse response)

//1. 跳转到指定的页面“dealWith.jsp”;
String url = "dealWith.jsp";

//2. 获取请求转发器对象,该转发器的指向通过getRequestDisPatcher()的参数设置
RequestDispatcher requestDispatcher =request.getRequestDispatcher(url); 

//3. 执行跳转,将参数request和response传递给这个页面 
requestDispatcher.forward(request, response);

二.重定向的两种方法比较:forward & sendRedirect

1.HttpServletResponse.sendRedirect(location)

1)作用:该方法将相应定向到参数location指定的新的URL。

2)location:可以是绝对地址,也可以是相对URL。

注意:Redirect能够防止某些情况下客户端Refresh造成的一些未知后果(例如连续删除)

2.forward & sendRedirect 比较

本质 地址栏显示数据共享运用地方效率工作流程
forward服务器请求资源,服务器直接访问目标地址的URL,读取该URL的相应内容,然后把这些内容再发给服务器不变(转发路径必须是同一个web容器下的URL转发页面和转发到的页面可以共享request里面的数据.一般用于用户登陆的时候,根据角色转发到相应的模块.

一次请求

sendRedirect客户端行为,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址新的URL(Location可以是任意地址不能共享一般用于用户注销登陆时返回主页面和跳转到其它的网站等.至少两次请求

其中两个动作的工作流程:

1. 转发过程(forward)

客户浏览器发送Http请求——>web服务器接受该请求——>调用内部的一个方法在容器内完成请求处理和转发动作——>将目标资源发送给客户

转发(forward)和重定向(sendRedirect)第1张

上面直接转发请求的过程:

1)浏览器向Servlet1发出请求

2)Servlet1调用forward()方法,在服务器端将请求转发给Servlet2

3)最终由Servlet2做出相应

举例:A向B借钱,B没有钱,向C借钱,借没有借到钱都会将消息回复给A

  • 在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,
  • 中间传递的是自己的容器内的request。
  • 在客 户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求

2. 重定向过程(sendRedirect)

客户浏览器发送Http请求——>web服务器接受此请求后,发送302响应码以及新的location给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的Http请求,请求url是新的location地址——>服务器根据此请求寻找资源发送给客户。

转发(forward)和重定向(sendRedirect)第2张

具体而言:

1)浏览器向Servlet1发出访问请求

2)Servlet1调用sendRedirect()方法,将浏览器重定向到Servlet2

3)浏览器向Servlet2发出请求

4)最终由Servlet2做出相应

举例:它一般用于避免用户的非正常访问。例如:用户在没有登录的情况下访问后台资源,Servlet可以将该HTTP请求重定向到登录页面,让用户登录以后再访问。

A向B借钱,B没有钱让A向C借钱。

  • 在这里location可以重定向到任意URL
  • 既然是浏览器重新发出了请求,则就没有什么request传递的概念了。
  • 在客户浏览器路径栏显示的是其重定向的 路径,客户可以观察到地址的变化的。
  • 重定向行为是浏览器做了至少两次的访问请求的

免责声明:文章转载自《转发(forward)和重定向(sendRedirect)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PowerPoint2010实现折线图动态展示ELK之filebeat收集多类型日志下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于Boost库的HTTP Post函数

两个函数的区别: 提交表单数据和提交文本数据 表单数据: request_stream << "Content-Type: application/x-www-form-urlencoded "; 文本数据: request_stream << "Content-Type: text/html "; #include <i...

使用springcloud gateway搭建网关(分流,限流,熔断)

Spring Cloud Gateway Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。 Spring Cloud Gatewa...

fetch 基本使用(使用fetch、axios来替代ajax)

一、fetch fetch是一种XMLHttpRequest的一种替代方案,在工作当中除了用ajax获取后台数据外我们还可以使用fetch、axios来替代ajax 二、安装 执行npm install whatwg-fetch --save即可安装。 为了兼容老版本浏览器,还需要安装npm install es6-promise --save 三、fet...

php 面试题

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名  例如: http://www.phpddt.com/abc/de/fg.php?id=1 需要取出 php 或 .php $url = 'http://www.baidu.com/wang/liu/4.php?i=90'; $urlArr = parse_url($url); $ex...

HTTP,URL,FS 模块搭建一个静态WEB服务器

WEB服务器: 一般指网站服务器,是指驻留在因特网上某种类型计算机的程序,可以向浏览器等Web 客户端提供文档,也可以放置网站文件让全世界浏览,还可以放置数据文件,让全世界下载,目前最主流的Web服务器有 Apache,Nginx,IIS等。 NodeJS 创建一个WEB服务器, 可以让我们访问Web服务器上面的网站 可以让我们下载Web服务器上面的文件...

axios 封装及取消请求

axios通用function封装 start http.js 引入了移动端 vant 框架 注:接口地址,加密秘钥,签名方式 根据实际情况而定适当修改 import axios from 'axios'; import md5 from 'md5'; import Vue from 'vue'; import { Toast,Dialog } fro...