重定向与请求转发的区别


一、重定向、请求转发的定义

1. 重定向(Redirect)

① 客户端浏览器向Web应用服务器端发送一个请求;

② Web服务器端使用HttpServletResponse的sendRedirect()方法将结果(结果中头信息内HTTP状态码为302,Location响应报头域中保存响应回来的地址)返回客户端浏览器;

③客户端浏览器收到服务器端结果后解析其头部信息,然后自动按照头部指定地址以GET方式再次向Web应用服务器端发请求,此时地址栏URL发生变化;

④服务器端接收到新的请求再将结果返回至客户端浏览器,客户端浏览器解释执行返回结果并将执行结果显示给用户,至此该过程结束。


2. 请求转发(Forward)
①这里的“请求”是名词;
②请求转发指客户端浏览器向Web服务器端发送请求,服务器端收到请求后进行相应处理后再将该请求转发到另外的资源(即这一“转发”操作是在Web服务器端执行的),服务器端对该资源进行处理后反馈给客户端。


注:JSP执行过程,如图


二、重定向与请求转发的区别

①重定向的方式客户端和服务器端共执行了两次请求和两次响应;
    请求转发的方式,客户端和服务器端只执行了一次请求和一次响应;
②重定向浏览器地址栏显示的是第二次访问的新地址;
    请求转发浏览器地址栏显示的是第一次访问的原地址
③请求转发不可以访问外网;,而重定向没有这个限制。
④重定向无法再新的页面获取request.setAttribute中保存的数据,请求转发可以。
⑤Web项目中WEB-INF文件夹是最安全的目录,该目录内的资源只能通过请求转发获取,重定向的方式无法获取。


三、举例说明

JSP页面代码
<!-- index.jsp -->
<%@ page language="java" contentType="text/html; charset=Utf-8" pageEncoding="Utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title></title></head><body><a href="./TestServlet">链接</a></body>
</html>
<!-- target.jsp -->
<%@ page language="java" contentType="text/html; charset=Utf-8" pageEncoding="Utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title></title></head><body>目标页面${name }</body>
</html>
TestServlet代码
package com.jd.test;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/* * 1.请求转发能够获取到request.setAttribute中保存的数据,在页面显示应该是目标页面 Lucy* 2重定向因为有两次请求,request.setAttribute的数据是保存到第一次请求里面* 3.返回页面给浏览器的是第二次请求返回的结果,该请求里面并没有name的值,* 4.因此重定向不能获取到request.setAttribute中保存的数据,在页面显示应该是目标页面*/request.setAttribute("name", "Lucy");//request.getRequestDispatcher("target.jsp").forward(request, response);//1.请求转发只有一次请求,且浏览器地址栏地址不会发生变化// 2.重定向两次请求,且浏览器地址栏地址会发生变化,状态码由302(浏览器自动解析该状态码,无需人工解析)变为200response.sendRedirect("target.jsp");  }
}
请求转发(Forward)方式请求结果说明

重定向(Redirect)方式请求结果说明

重定向、请求转发访问外网的区别,假设访问百度
TestServlet代码
package com.jd.test;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//请求不转发可以访问外网request.getRequestDispatcher("http://www.baidu.com").forward(request, response);//重定向可以访问外网//response.sendRedirect("http://www.baidu.com");  }
}
请求转发代码运行结果,可以成功访问

请求转发代码运行结果,404错误,找不到页面,也就是不能访问外网


请求转发能获取请求转发获取WEB-INF里面的资源,重定向的方式无法获取验证
TestServlet代码

package com.jd.test;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//能获取到target.jsp  //request.getRequestDispatcher("WEB-INF/target.jsp").forward(request, response);response.sendRedirect("WEB-INF/target.jsp");//不能获取到target.jsp   }
}
请求转发代码运行结果,可以成功获取WEB-INF里面的资源

重定向代码运行结果,不可以获取WEB-INF里面的资源

重定向与请求转发的区别相关推荐

  1. 请求转发和重定向的区别_WEB之重定向和请求转发的区别

    一次重定向的过程 我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为: 1 ...

  2. 重定向与请求转发的区别及什么时候使用

    重定向与请求转发的区别 一 转发是服务器行为,重定向是客户端行为.为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求-->web服务器接受此请求-->调用内 ...

  3. 相对地址与绝对地址的区别?请求重定向与请求转发的区别?jsp有哪九大内置对象?servlet如何获取session和application对象?

    目录 1.说说相对地址与绝对地址的区别? 2.说说请求重定向与请求转发的区别? 3.jsp有哪九大内置对象?servlet如何获取session和application对象? 1.说说相对地址与绝对地 ...

  4. java通过不同请求转发不同端口_java重定向与请求转发的区别

    请求转发: request.getRequestDispatcher().forward(); 重定向: response.sendRedirect(); 例如: 请求转发: request.getR ...

  5. HTTP中的重定向和请求转发的区别

    一.调用方式 我们知道,在servlet中调用转发.重定向的语句如下: request.getRequestDispatcher("new.jsp").forward(reques ...

  6. 请求重定向与请求转发的区别

    请求重定向:客户端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变. 请求转发:服务器行为,request.getRe ...

  7. 重定向和请求转发的区别

    1.重定向是两次请求,转发是一次请求,因此转发的速度要快于重定向 2.重定向之后地址栏上的地址会发生变化,变化成第二次请求的地址,转发之后地址栏上的地址不会变化,还是第一次请求的地址 3.转发是服务器 ...

  8. JSP中的重定向和请求转发以及它们的区别

    我们先硬着头皮看一下重定向的定义: 重定向(Redirect): 客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponse的sendRedirect()方 ...

  9. 分析:重定向和请求转发

    分析:重定向和请求转发 重定向 HttpServletResponse对象的sendRedirect(java.lang.String location)方法称作重定向. 如果location地址前面 ...

  10. 页面的跳转——请求重定向和请求转发

    目录 一.重定向(Redirect) 二.转发(Forward) 三.重定向和请求转发的区别 相同点 不同点 一.重定向(Redirect) 请求重定向是客户端行为.是指当浏览器请求一个URL时,服务 ...

最新文章

  1. 微信小程序 跳转界面
  2. jQuery实现文字向上滚动
  3. 浅入深出之Java集合框架(中)
  4. PyPyODBC 0.9.2发布 - 纯Python实现的pyodbc替代库
  5. 执行cmd命令时:因为在此系统上禁止运行脚本的解决方法
  6. 计算机网络po3代表的意思,计算机系统与网络技术中常用的单词缩写的意思.pdf...
  7. 计算机考研 外部排序,2021考研408数据结构基础知识点:外部排序
  8. 关于DNS污染问题的通用解决方案
  9. 【论文阅读】Pyramidal Convolution:Rethinking Convolutional Neural Networks for Visual Recognition
  10. 手机麻将java开发_2019手机麻将游戏是怎么开发出来的
  11. C语言只用int这一种数据类型实现用拼音念数字
  12. python协程怎么做数据同步_Python 中的进程、线程、协程、同步、异步、回调
  13. 学计算机的高数学什么,儿子大一,学的计算机科学与技术,感觉高数特别难,都学不会怎么办呢?有什么好办法?...
  14. pycharm设置显示返回工具箭头菜单和显示哪个文件左侧目录树显示到哪个文件
  15. JavaWeb(4)JavaScript高级
  16. 开局签到满级剑术天赋(三)
  17. 第三方推送服务:个推服务推送流程
  18. 【性能】perf + 火焰图分析软件性能瓶颈
  19. win8系统U盘安装办法
  20. 2022年宜昌中级职称评审必须要有助理工程师吗?甘建二

热门文章

  1. (转)自定义listView及其adapter动态刷新
  2. spring 使用 groovy 的 utf-8 问题
  3. 微软MED-V虚拟化实战教程之二映像准备和测试
  4. WinXP中自带的netsh命令自动切换IP(zz)
  5. 数学建模python matlab 编程(指派问题)
  6. 接口测试基础——第6篇unittest模块(三)
  7. 10.5~10.6复习与预习的进行
  8. react中创建组件的三种方法
  9. 经典算法题随机从连续的100个不重复数中取出100个不重复随机数
  10. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板...