当前位置: 首页 > news >正文

再谈Redirect(客户端重定向)和Dispatch(服务器端重定向)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

这是两个常常被放在一起进行比较的概念,今天对这两个概念再重新回顾一下,前者发生在客户端(浏览器),后者发生在服务器端,因此也有人把前者称为客户端重定向,把后者称为服务器端重定向,虽然对于后者这种称谓并不算贴切。本文原文链接: http://blog.csdn.net/bluishglc/article/details/7953614 转载请注明出处!

Redirect(客户端重定向)

标准意义上的“重定向”指的是HTTP重定向,它是HTTP协议规定的一种机制。这种机制是这样工作的:当client向server发送一个请求,要求获取一个资源时,在server接收到这个请求后发现请求的这个资源实际存放在另一个位置,于是server在返回的response中写入那个请求资源的正确的URL,并设置reponse的状态码为301(表示这是一个要求浏览器重定向的response),当client接受到这个response后就会根据新的URL重新发起请求。重定向有一个典型的特症,即,当一个请求被重定向以后,最终浏览器上显示的URL往往不再是开始时请求的那个URL了。这就是重定向的由来。



http重定向的一种典型应用是防止表单重复提交,其原理是:假如当前是一个用户信息编辑页面,表单通过Post提交给saveUser.action, 当该请求提交后,可返回一个重定向的response,地址可以是viewUser.action,即定向到用户详情页面(不能修改和提交)。当然这种防止页面重复提交的方法作用是有限的, 如果用户返回表单页面,重新提交表单,或是用户在服务器端响应到达之前,多次点击提交按钮(可通过JavaScript控制提交按钮点击次数)等等。

在Servlet里,实现客户端重定向的方法是:response.sendRedirect()

Dispatch(服务器端重定向)

Dispatch(Forward)指的是服务器在处理request的过程中将request先后委托多个servlet或jsp接替进行处理的过程。最为常见的是先由一个Servlet处理(比如实现业务逻辑的计算),然后forward给一个JSP进行视图的渲染。在Servlet里,实现dispatch是通过RequestDispatchers来实现的,而这个类有两个方法,一个是forward,另一个是include,相应的在JSP里实现dispatch的标签也有两个:<jsp:forward/>和<jsp:include/>.    不管是forward还是include,我们可以清楚的看到,从一个servlet或jsp向别一个servlet或jsp跳转,request和reponse始终在期间传递,这是服务器端能实现dispatch模式的关键。换句话说,我们可以把request和reponse看作是一种资源,一系列的servlet和jsp都是在基于同一份资源完成它们职责范围之内的计算。



注:此图原图引自《Head First Servlets and JSP》


转载于:https://my.oschina.net/pangzhuzhu/blog/327175

相关文章:

  • 男神的补习
  • 360浏览器兼容模式 不能$.post (不是a 连接 onclick的问题!!)
  • Fluent NHibernate系列文章
  • 第八次作业
  • 计算思维导论
  • maven项目搭建
  • 图像识别技术
  • RTP协议
  • Java中Vector和ArrayList的区别
  • 如何培养数据分析的能力?
  • zabbix根据主机和端口列表自动发现监控远程MongoDB实例
  • [转载]浅析海量用户的分布式系统设计
  • heroku 部署nodejs+mongodb
  • 仿QQ大战—服务器的搭建(ServerSocket)
  • Android : com.mobeta.android.dslv.DragSortListView-引用自定义控件包名错误
  • [数据结构]链表的实现在PHP中
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CentOS7简单部署NFS
  • ESLint简单操作
  • Fundebug计费标准解释:事件数是如何定义的?
  • Js基础知识(四) - js运行原理与机制
  • linux安装openssl、swoole等扩展的具体步骤
  • node.js
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 分享几个不错的工具
  • 缓存与缓冲
  • 计算机在识别图像时“看到”了什么?
  • 前端面试之闭包
  • 区块链分支循环
  • 算法系列——算法入门之递归分而治之思想的实现
  • 想写好前端,先练好内功
  • 正则与JS中的正则
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 通过调用文摘列表API获取文摘
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #14vue3生成表单并跳转到外部地址的方式
  • #Java第九次作业--输入输出流和文件操作
  • (14)Hive调优——合并小文件
  • (安卓)跳转应用市场APP详情页的方式
  • (待修改)PyG安装步骤
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (强烈推荐)移动端音视频从零到上手(上)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net 调用php,php 调用.net com组件 --
  • .NET 反射的使用
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .Net多线程总结
  • .NET开发人员必知的八个网站
  • .NET开发者必备的11款免费工具
  • .NET企业级应用架构设计系列之结尾篇
  • /*在DataTable中更新、删除数据*/