一次重定向的过程

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

1、以指定方式(表单看method,直接URL发起就是GET)发一次请求到后台,后台处理重定向,返回一个302的HTTP状态码给客户端,并在response里面带一个Location用于标识重定向的地址

2、以Location的地址为目标地址,客户端再发起一次请求

一次请求转发的过程

以指定方式(表单看method,直接URL发起就是GET)发一次请求到后台,后台直接跳转到将要重定向的地址,如果成功则返回状态码200给客户端:

重定向和请求转发的区别

1、从上面的一次重定向和一次转发的过程来看,我们可以得出第一个差别点,就是重定向是两次请求,转发是一次请求,因此转发的速度要快于重定向

2、第二个差别点也很明显,重定向之后地址栏上的地址会发生变化,变化成第二次请求的地址,转发之后地址栏上的地址不会变化,还是第一次请求的地址

网上关于重定向和请求转发的区别的文章有很多,里面的区别点也有很多,但是总结起来无非就是这两点,再多的区别点也都是这两点的扩充,所以,重定向和请求转发的区别理解了这两点的差别就可以了。另外还有一点,不是重定向和请求转发之间的区别,但是值得注意,那就是重定向和请求转发之后的代码都会运行,直到方法结束或者遇到了return语句

重定向和请求转发URL参数的解读

我们知道在Java Web中,一个Servlet分别是这么写重定向和转发的代码的:

1、response.sendRedirect("XXX");

2、request.getRequestDispatcher("XXX").forward(request, response);

这个括号里面的参数也是有一定的规则的,我自己的总结如下:

1、重定向的时候,如果参数为"http://xxxxxxxxxx",那么重定向到的是指定的重定向地址,无论该重定向地址是内部的还是外部的

2、如果参数不是"http://xxxxxxxxxx"的样子,而是一般的写法,那么都是Tomcat内部跳转(注意是Tomcat内部跳转而不是项目内部跳转),重定向和请求转发的时候有些区别:

(1)重定向,如果XXX以"/"开头,则表示目标地址为http://ip:port/XXX;如果不以"/"开头,则表示目标地值为http://ip:port/项目名/XXX

(2)请求转发,无论XXX是否以"/"开头,都跳转到http://ip:port/项目名/XXX

重定向和请求转发选择的个人建议

页面跳转建议使用重定向,有内部Servlet跳转建议使用转发。

选择重定向作为页面跳转的理由

1、转发请求地址不会变化,这就导致了开发者并不知道实际转发的目标页面是哪个,对于开发者来说这真的是一件糟糕的事,不知道转发的目标页面会在出错的时候给定位问题带来很大的麻烦

2、假如开发者在Servlet中做了耗时间的查询数据库操作,然后放到session里面去,让目标页面拿session显示给用户。此时如果使用转发,那么在刷新这个页面的时候,该Servlet会被再请求一遍,也就是说把查询数据库->设置session这个步骤再做一遍,而实际上这是毫无意义的。重定向则不会有问题,由于重定向之后的是一个.jsp页面,刷新页面无非是让页面重新加载一次罢了。

3、转发只能在站内跳转,重定向可以跳转到任意想要的地址----只要这个地址存在,所以请求页面的时候转发相比重定向也有局限性

因此,虽然转发的速度比重定向快,但是从规避问题的角度而言,页面跳转使用重定向绝对是比转发更好的选择。

选择转发作为内部Servlet跳转的理由

如果代码逻辑是ServletA->ServletB->*.jsp,使用转发,那么这三次操作都在一次请求中,而如果使用重定向,那么客户端将发起三次请求,这真的毫无必要。因此,如果代码逻辑中含有内部的Servlet跳转,使用转发会使一个好的选择。

请求转发和重定向的区别_WEB之重定向和请求转发的区别相关推荐

  1. 重定向地址_JavaWeb - Servlet:重定向和转发,状态管理

    Servlet + JDBC 应用 在 Servlet 中可以使用 JDBC 技术访问数据库,常见功能如下: 查询 DB 数据,然后生成显示页面,例如:列表显示功能. 接收请求参数,然后对 DB 操作 ...

  2. [jquery]AJAX 重定向的困境,如何重定向 URL 或如何设置重定向请求的属性

    我将通过 jQuery xhr 请求发送到远程站点 (这是扩展,铬和设置的所有跨站点设置 - -): $.ajax({type: "POST",contentType : &quo ...

  3. get请求可以传body吗_面试必备:GET和POST的区别详细解说

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 最近一些小伙伴面试都会被问到 get 和 post 的区别,很多都只能简单的说几点,今天我们就来把弄的明明白白,彻彻底底. ...

  4. nginx请求转发被拒绝_解决nginx反向代理proxy不能转发header报头

    做了一个德国高防plesk卖虚拟主机,奈何地理位置太过于遥远,控制台使用上速度难以接受.用户站点可以使用cloudflare等等的加速手段,控制台能否也这么干呢?理论是完全可以的,那么时间上手看吧.安 ...

  5. java重定向跨域问题_重定向 CORS 跨域请求

    TL;DR 非简单请求不可重定向,包括第一个preflight请求和第二个真正的请求都不行. 简单请求可以重定向任意多次,但如需兼容多数浏览器,只可进行一次重定向. 中间服务器应当同样配置相关 COR ...

  6. cookie session token区别_cookie、session与token的真正区别

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记 ...

  7. 提交请求最基础的3种方式以及可以发送请求的7个位置

    提交请求最基础的4种方式以及可以发送请求的7个位置 提交请求最基础的4种方式 一.可以使用jquery发送ajax请求 1.使用全ajax方式发送 请求实例var url = "/test/ ...

  8. get 与 post的区别?application json 与form表单的区别?

    这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [get 与 p ...

  9. 301永久重定向实现方式及302重定向(侧重.htaccess)

    在我们的网站建设中,时常会遇到需要网页重定向的情况:象网站调整,如改变网页目录结构,网页被移到一个新地址,再或者,网页扩展名改变,如因应用需要把.php改成.Html或.shtml,在这种情况下,如果 ...

最新文章

  1. Java项目:校园招聘平台系统(java+MySQL+Jdbc+Servlet+SpringMvc+Jsp)
  2. Chrome 科研神器!论文代码快速复现
  3. 【星球知识卡片】深度学习图像降噪有哪些关键技术点,如何学习
  4. 支付宝不止怀有“社交梦”,社区金融才是它的野心所在
  5. 报告解读|远程银行:从扎根网络到加速上云
  6. Spring和SpringMVC的区别
  7. C++网络编程快速入门(三):阻塞与非阻塞式调用网络通信函数
  8. 前端学习(3194):虚拟dom的创建方式1的jsx
  9. oracle数据库安装跳坑
  10. 延边大学计算机金小峰,第九届中国信息安全博士论坛在我校开幕
  11. 日本研发投篮机器人Cue,投球命中率接近100%
  12. 利用 MATLAB 和 DCRAW 处理数码相机 RAW 文件的完整流程
  13. 计算机无法进入pe系统,u盘启动盘无法进入pe解决方法
  14. 十大管理之项目干系人管理知识点
  15. 创业者防坑手册:面对强大的资本力量,你该如何正当防卫?
  16. Winedit7.0自定义一键编译
  17. CMAH招投标项目复盘
  18. UOJ #138. 【UER #3】开学前的涂鸦
  19. win7系统做网站服务器,win7系统做网站服务器
  20. 夫琅禾费单缝衍射matlab分析,夫琅禾费单缝衍射光强分析与探讨

热门文章

  1. python进入高考-Python已进入小学教材将加入高考
  2. nginx限流方案的实现(三种方式)
  3. java将一个整数反转输出,输入一个整数,实现反转输出,如输入123,输出321。...
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店食品仓库管理系统
  5. 车站广播系统采用计算机,公共广播系统
  6. linux系统修改用户名密码忘记,Linux下修改/找回root密码
  7. Codeforces 301A. Yaroslav
  8. Docker 限制容器资源
  9. Python 文件操作三
  10. 测试用例编写(功能测试框架)