免费刷金币,请点击这里
TE社区 > 后端开发
客服QQ:1206116161

Servlet中forward(请求转发)和redirect( 重定向)总结

何须伤离别 于 2016-04-24 03:02:11 创建话题
(4136)
(2)
举报

forward:请求转发
redirect: 重定向
1.在给予"/"表示当前的路径是以jsp路径为根路径来进行请求转发,属于绝对路径。 如果没有表示当前路径是以当前客户端发送请求时的路径进行请求转发,属于相对路径。
2.从这里的请求转发可以看出,servlet主要负责的并不是现实html代码,而是为了处理具体的请求转发。大致方法获得RequestDisapatcher对象 然后用其forward方法来进行请求转发:
RequestDisapatcher rd=reqest.getRequestDisapatcher();
rd.forward(req,resp); //用这里的方法来进行转发
 
3.HttpServletResponse 对象的SendRequest(String location)方法称作重定向,如果location地址前面加上“/ ”,则表示相对于servlet容器的根来请求,即http://localhost:8080 ,如果location地址前没有加上“/”,则表示当前请求的URI来寻找地址(就是当前的项目目录中)。
4.RequestDispather的forward(request,response)方法称为请求转发。
5.请求转发和重定向的区别:
a.请求转发:整个过程在同一个请求当中。所以在用getParameter的时候的值可以随时拿到。
b. 重定向:实际上客户端会向服务器发送两个请求。第一个请求是请求serlvet,第二个请求是服务器将结果发送到请求页面。所以getParameter是不可能得到同一个请求参数的。所以最总是是用response对象中的sendRedirect方法来重定向,也即服务器响应对象来进行重定向的.
c.RequestDisapatcher是通过调用HttpServletRequest对象的getRequestDisapatcher方法得到的。是属于请求对象的方法。
d.sendRedirect方法是属于HttpServletResposne对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。


6.重定向在firebug中的会有两个请求 而请求转发只有一个。本源就是请求个数。
 
前后两个页面 有数据传递 用请求转发,没有则用重定向。
比如servlet查询了数据需要在页面显示,就用请求转发。
比如servlet做了update操作跳转到其他页面,就用重定向。

=======================================================

1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.


redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.

redirect:不能共享数据.

3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.


redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.


4.从效率来说
forward:高.


redirect:低.


本质区别


解释一

一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里 location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二

重定向,其实是两次request,

第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

例子:

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个

对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

解释三:

转发是服务器行为,重定向是客户端行为。 

两者的内部机制有很大的区别:   
1 请求转发只能将请求转发给同一个WEB应用中的组件,
而重定向还可以重新定向到同一站点不同应用程序中的资源,甚至可以定向到一绝对的URL。   
2 重定向可以看见目标页面的URL,
转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。  
3 请求响应调用者和被调用者之间共享相同的request对象和response对象,
重定向调用者和被调用者属于两个独立访问请求和响应过程。   
4 重定向跳转后必须加上return,要不然页面虽然跳转了,
但是还会执行跳转后面的语句,
转发是执行了跳转页面,下面的代码就不会在执行了。 


  • Mrchen
    - 03月17日 (0)

    111111

  • 呆到深处自然萌
    - 03月04日 (0)

    啦啦啦啦啦啦,我是卖报的小行家


扫码关注TE官方微博 扫码关注TE官方微博
java IO数据操作流、对象序列化、压缩流代码解析 微信红包随机生成算法php版 Python中的默认参数详解 linux下history命令显示历史指令记录的使用方法 linux定时运行命令 代码获取历史上的今天发生的事 javascript运动效果实例总结(放大缩小、滑动淡入、滚动) Angular通过angular-cli来搭建web前端项目的方法 PHP脚本自动识别验证码查询汽车违章 浅析Python装饰器以及装饰器模式 javaScript知识点总结(必看篇) Window下Oracle安装图文教程 Python实现公历(阳历)转农历(阴历)的方法示例 JS实现颜色梯度与渐变效果完整实例 SQL Server各种日期计算方法(收藏) 将一个绝对定位的div水平垂直居中对齐 ReactNative之FlatList的具体使用方法 jQuery针对input的class属性写了多个值情况下的选择方法 JS实现文档加载完成后执行代码 js写一个弹出层并锁屏效果实现代码 如何对一个文件夹进行创建和删除? 原生js和jQuery写的网页选项卡特效对比 解决SpringMVC同时接收Json和Restful时Request里有Map的问题 js模拟C#中List的简单实例 PHP框架Laravel中实现supervisor执行异步进程的方法 SqlServer触发器详解 php常用字符串String函数实例总结【转换,替换,计算,截取,加密】 Android中Snackbar的使用方法及小技巧 Bootstrap table使用方法详细介绍 Mysql 5.7.18 利用MySQL proxies_priv实现类似用户组管理 iOS中定位当前位置坐标及转换为火星坐标的方法 dedecms 软件下载频道防盗链php代码 JS实现带提示的星级评分效果完整实例 MongoDB的查询方法 JS检测window.open打开的窗口是否关闭 Symfony2开发之控制器用法实例分析 Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 NodeJs中express框架的send()方法简介 二维码图片生成器QRCode.js简单介绍 javascript实现Java中的Map对象功能的实例详解 详解iOS游戏开发中Cocos2D的坐标位置关系 H5 canvas实现贪吃蛇小游戏 linux系统安装Nginx Lua环境 jsp计数器制作 Ajax实现动态显示并操作表信息的方法 asp.net core新特性之TagHelper标签助手 PHP中数组定义的几种方法 javascript实现随机读取数组的方法 js实现搜索框关键字智能匹配代码 JavaScript中实现继承的三种方式和实例 THREE.JS入门教程(4)创建粒子系统 CSS3实现可爱的小黄人动画 像table一样布局div Vue.js 2.0学习教程之从基础到组件详解 JS实现线性表的顺序表示方法示例【经典数据结构】 Bootstrap 树控件使用经验分享(图文解说) c# 操作符__ null coalescing operator JavaScript轮播图简单制作方法 ASP常用源代码的总结(上) ECMAScript 5中的属性描述符详解 SQL Server数据库中批量导入数据的四种方法总结 周末总结正则表达式(完整篇) jQuery 1.9.1源码分析系列(十四)之常用jQuery工具 浅谈sql连接查询的区别 inner,left,right,full JavaScript中的原始值和复杂值 浅谈javascript的分号的使用 BootStrap网页中代码显示(code)(pre)用法详解 Javascript 鼠标移动上去小三角形滑块缓慢跟随效果 jQuery简介_动力节点Java学院整理 Svg.js实例教程及使用手册详解(一) Vue利用路由钩子token过期后跳转到登录页的实例 Python实现一个转存纯真IP数据库的脚本分享 PHP:微信小程序 微信支付服务端集成实例详解及源码下载 JAVA中通过自定义注解进行数据验证的方法 基于PHP技术开发客服工单系统 Flex tree加虚线显示效果并且替代原始图标 基于jQuery实现Div窗口震动特效代码-代码简单 JavaScript数据类型判定的总结笔记 Python3多进程 multiprocessing 模块实例详解 jquery 无限极下拉菜单的简单实例(精简浓缩版) jsp 页面上图片分行输出小技巧 php实现将上传word文件转为html的方法 python 每天如何定时启动爬虫任务(实现方法分享) jquery心形点赞关注效果的简单实现 Joomla使用Apache重写模式的方法 从Table向Css过渡的优缺点比较 js监控IE火狐浏览器关闭、刷新、回退、前进事件 js的Boolean对象初始值示例 Lua判断字符串中包含中文字符的方法和计算字符串宽度函数分享 ASP.NET Session的七点认识小结 实现SQL分页的存储过程代码 python下10个简单实例代码 jquery调用asp.net 页面后台的实现代码 XML文件转化成NSData对象的方法 jQuery中的$是什么意思及 $. 和 $().的区别 从零开始做一个pagination分页组件 学习javascript的闭包,原型,和匿名函数之旅 解决Linux操作系统默认找不到网卡驱动 javascript学习笔记之函数定义 dedecms标签调用大全 Dedecms5.7 使用教程 ES6新特性:使用export和import实现模块化详解 用Python写王者荣耀刷金币脚本 thinkphp3.2.0 setInc方法 源码全面解析 利用python将图片转换成excel文档格式 SqlServer 获取字符串中小写字母的sql语句 微信支付PHP SDK —— 公众号支付代码详解 Nginx 启用 BoringSSL的配置方法 jQuery EasyUI API 中文文档 - Documentation 文档 Angular5中调用第三方库及jQuery的添加的方法 如何去除vue项目中的#及其ie9兼容性 JS函数的定义与调用方法推荐 ajax 技术和原理分析 JS中判断某个字符串是否包含另一个字符串的五种方法 linux下VSFTP 530 Permission denied错误的解决办法 vue源码学习之Object.defineProperty 对数组监听 对numpy 数组和矩阵的乘法的进一步理解 Git完全使用教程 建网站so easy ASP 三层架构 Convert类实现代码 LNMP一键安装包PHP和Niginx 文件上传大小限制问题解决方法 MySQL删除表数据的方法 苹果Mac系统怎么清理垃圾?Mac硬盘清理小技巧 jQuery ready函数滥用分析 php调用shell的方法 ACCESS转化成SQL2000需要注意的几个问题小结 故障的机器修好后重启,狂拉主库binlog,导致网络问题的解决方法 jquery实现很酷的网页顶部图标下拉菜单效果 Serverless 架构如何演进详细介绍 Linux Nginx 配置SSL访问实例详解 JS+HTML5实现图片在线预览功能 jquery分页对象使用示例 CentOS服务器进行初始化设置的方法 CSS设置列表样式和创建导航菜单实现代码 JavaScript DOM学习第一章 W3C DOM简介 html5图片上传预览示例分享 jQuery将所有被选中的checkbox某个属性值连接成字符串的方法 .net MVC 连接数据本地数据库三种方法总结 如何固定表格四周实现表格上下左右滚动 JSP Filter的应用方法 jQuery+css3实现Ajax点击后动态删除功能的方法 MySQL注入绕开过滤的技巧总结 spring boot打jar包发布的方法 数据库基本概念面试必问 ASP.NET Core中实现用户登录验证的最低配置示例代码 Asp.net中阻止页面按钮多次提交的解决办法 jquery text,radio,checkbox,select操作实现代码 使用PHP实现生成HTML静态页面 JS弹出层的显示与隐藏示例代码 jValidate 基于jQuery的表单验证插件 PHP输出日历表代码实例 利用cookie记住背景颜色示例代码 深入理解CSS定位与层叠 JS提交form表单实例分析 jQuery实现分章节锚点“回到顶部”动画特效代码 Python 制作糗事百科爬虫实例 Php图像处理类代码分享 Javascript Function对象扩展之延时执行函数 C#读取中文字符及清空缓冲区的实现代码 Asp.net SignalR支持的平台有哪些 python实现决策树分类 浅谈Python类里的__init__方法函数,Python类的构造函数 26个步骤获得可观的网站流量的方法 CSS clear属性给float带来哪些影响 用python统计代码行的示例(包括空行和注释) 关于SQL的几道小题详解(sql进阶) asp木马代码解密的随机加密webshell JS动态的把左边列表添加到右边的实现代码(可上下移动) vbs 能算出一个字符在一字段里共出现有几次的函数 asp.net操作javascript confirm返回值的两种方式 java通过jni调用opencv处理图像的方法 用js实现输入提示(自动完成)的实例代码 Vue.js与 ASP.NET Core 服务端渲染功能整合 React学习笔记之高阶组件应用 网站基于flash实现的Banner图切换效果代码 总结PHP中数值计算的注意事项 浅谈Node.js:理解stream Linux注销用户、注销意外被断开用户的方法 深入理解Swift中的访问控制关键字 javascript自定义startWith()和endWith()的两种方法 Ajax跨域请求COOKIE无法带上的完美解决办法 bgsound 背景音乐 的一些常用方法及特殊用法小结 Dedecms实现tags云标签随机颜色与字体大小方法详解 后台登入框注入拿shell步骤 浅谈JavaScript数据类型 微信小程序 实现tabs选项卡效果实例代码 JAVASCRIPT函数作用域和提前声明 分享 在sql中不指定Order by排序是按照主键吗 jquery制作select列表双向选择示例代码 js中flexible.js实现淘宝弹性布局方案 利用Python操作消息队列RabbitMQ的方法教程 javascript表格的渲染组件 Lua实现split函数 python如何获取服务器硬件信息 js几秒以后倒计时跳转示例 MySQL Daemon failed to start错误解决办法 axios中cookie跨域及相关配置示例详解 Android版微信跳一跳小游戏利用技术手段达到高分的操作方法 import的本质解析 PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】 深入理解Java线程编程中的阻塞队列容器 Javascript获取窗口(容器)的大小及位置参数列举及简要说明
jQuery全屏响应式图片滑块RSlider.zip jQuery仿淘宝橱窗位广告代码.zip JAVA 获取电脑详细信息 【PHP源码】iCenter! API 查询系统 v1.6.5_iquery.zip jQuery平滑页面滚动切换特效.zip jQuery搜索框过滤筛选代码.zip flash+js幻灯片特效.zip 仿海尔商城ecshop模板.zip 人力资源管理系统(基于ssh的j2ee项目) 水波扩散CSS3动画按钮代码.zip 企业产品展示网站模板.zip 微信小程序 - 急救应急处理.zip 1Dai ASP Cms V1.01 Beta1网站内容管理系统个人版 基于Struts2框架开发的VIP会员管理系统 CSS3鼠标滑过导航出现下划线动画特效.zip jQuery清爽的点名抽奖游戏代码.zip 气泡动画背景插件circleMagic.js.zip 有趣的jquery搜索框插件zySearch.zip jquery多级下拉侧导航amazonmenu.zip 剑桥教育网站模板免费下载.zip 蓝色商业企业html5网站模板.zip 【ASP.NET源码】Maolz个人展示网站源码_maolz.zip 【ASP.NET源码】CCS v2.0 免安装html版_ccs20.zip html5生成图案二维码插件.zip Jave Swing Tab页签窗体,界面漂亮,毕业设计案例 微信小程序源码-微赞论坛 五种切换效果的jQuery幻灯片.zip Python 建立一个模型来识别验证码成功率 域名销售HTML5模板.zip jQuery价格区间滑块拖动代码.zip AJAX滚动新闻展示效果.zip jquery网页侧边栏在线客服代码.zip 紫色风格乐器网站模板.zip 欧美设计行业网站模板.zip jQuery迅雷首页全屏图片切换代码.zip jquery动态弹性多级下拉菜单.zip 纯CSS3实现超酷幻灯片切换.zip jQuery ReSmenu下拉菜单.zip jQuery+CSS3动画弧形弹出菜单.zip Android studio BLE通信助手(工程文件+apk) [Android项目源码] 基于android系统的个人记账软件 CSS3地图热点文字标注提示.zip jquery万年历日期时间代码.zip SSH+pager-taglib-2.0分页例子 【PHP源码】白月工作室文章管理系统 v3.0_byart.zip jQuery全窗口幻灯片.zip 权限管理系统springmvc hibernate spring 完整项目带数据库 应用程序HTML5模板.zip HTML5 Canvas气泡背景特效.zip html5双击选中文字高亮显示.zip 时尚女性博客css相册模板.zip 基于jquery仿QQiPhone首页.zip 微信小程序源码-高的地图实时天气 jQuery左右摇晃焦点图切换.zip 学生选课系统SSH框架实现 jQuery.easyui.1.2.6 Demo 【PHP源码】简单的mini博客程序_mini-public.zip jQuery动态提示消息框效果.zip [Android项目源码] 应用程序安装卸载(安装应用宝后自动弹出卸载应用宝) 建筑行业电子商务模板.zip 绿色有机食品电商模板.zip 【ASP.NET源码】网页层拖动实例(ASP.NET+AJAX)_googlei.zip jQuery可拖动图标导航菜单.zip springboot整合shiro,redis缓存session 多彩淘宝客wordpress主题.zip 学校教育CSS3绿色模板.zip 游戏原画设计HTML5模板.zip jQuery圆环交叉重叠焦点图.zip 智优库存管理软件 免费下载 史上最好的.net三层架构进阶项目(源代码和详细文档) Jarvis后台管理模板.zip HTML5+CSS3网页模板21-29 【PHP源码】pMachine PRO v2.3汉化版_pmachineprov2.3gb.zip 纯CSS3实现UI设计网站导航.zip JS带缩略图平滑滚动相册特效.zip HTML5 Canvas圆形灯笼时钟动画特效.zip APP产品团队开发官网模板.zip jquery医院网站banner切换特效.zip ssm整合开发商城系统,包括后台管理系统 大前端wordpress绿色主题.zip css3安卓3D时钟翻转.zip 【ASP.NET源码】JuSNS聚网社交管理软件 v1.5.0101 Bulid 090416_jusns.zip 2016奥运会小人骑自行车CSS3动画.zip jQuery三屏同时滚动轮播切换.zip jQ场景局部放大效果.zip jQuery桌面快捷菜单.zip Spring MVC+Mybatis+maven+easyUI+Oracle数据库实现增删改查 【ASP.NET源码】最简单三层登陆入门源码_qqxx.zip 科技技术网页模板下载.zip 帝国cms信息港模板.zip 大屏幻灯红色商务网页模板.zip 装修公司网站模板下载.zip 星球大战jQuery水平进度条特效.zip iPad软件设计公司网页模板.zip jquery鼠标悬停缓慢下拉导航.zip 高新科技HTML5模板.zip js瀑布流图片加载提示.zip 牛仔服装企业css模板.zip 电影院票房手机网站模板.zip 微信小程序源码-盛世华安 jQuery加载进度条特效代码.zip pw8.7简洁风尚模板.zip CSS3实现多彩进度条动画.zip JS图片循环放大.zip 圣诞节日CSS网页模板.zip spring+spring mvc+hibernate+bootstrap开发小型物业管理系统 户外运动旅行网站模板.zip jQuery相册专辑插件albumize.zip 微信小程序源码-东航旅行 jQuery招聘网站职位选择代码.zip 响应式驾校官网HTML模板.zip JSP班级管理系统 Bootstrap垂直手风琴动画特效.zip 复古机车主题css模板.zip jQuery鼠标滑过背景视觉差动画特效.zip 红色大气商务办公企业模板.zip spring cloud项目源码 帝国CMS精美网络公司模板.zip jQuery带箭头图片层叠轮播切换代码.zip JQ鼠标经过标题向上弹出特效.zip JSP+SERVLET 音乐网站 当当网系统模板 室内建筑HTML网页模板.zip 适合博客新闻网站模板.zip jdbc连接Oracle数据库实现学生管理系统(数据库连接池实现多用户操作同一数据库) 二手汽车商城网站模板.zip jQuery实现4图切换全屏代码.zip 【ASP.NET源码】ResviewCRM的ExtJS页面程序_ase.zip jQuery自适应焦点图.zip 蓝色简洁学校教育模板.zip jquery tab招聘列表选项卡切换.zip JS+HTML5酷炫星空背景动画特效.zip jQuery分类信息筛选过滤代码.zip CSS3动画暗角按钮.zip 简单的公司微官网展示模板下载html源码.zip ZOL五屏焦点图广告代码.zip tippy.js工具提示插件.zip jquery背景颜色悬停渐变.zip 赛车手衣服公司网站模板.zip 多色拼接单页网站模板.zip 【ASP.NET源码】简单绿色游戏网站(含报名表)_gamebaoming.zip 【PHP源码】kanglog博客 v1.1 bata(PHP版)_kanglog_php.zip 美橙互联jQuery在线客服.zip Html5游戏源代码(5款) 旅游酒店官网网站模板.zip HTML5多款圆形进度条倒计时插件.zip 【PHP源码】美丽心雨CMS v1.13 安装版_xydwcms113.zip 构建MetroNic+Mybatis+ Spring MVC的高性能web应用 关爱互助公益网站模板.zip jQuery横向手风琴效果.zip jQuery对话框美化特效.zip jquery搜索条件滑动条.zip html5手机登录表单验证代码.zip HTML5鼠标滚动树生长过程特效.zip jquery下拉点击改变背景图片代码.zip 潮流设计div+css模板.zip HTML5全屏幻灯片切换特效.zip Agile Lite的源码库 【ASP.NET源码】创想MT系列网店系统正式版 2.2.15_cxecs_mtb2c_gbk_v2.2.15.zip jQuery键盘控制PPT幻灯片特效.zip jquery卷帘门滑动选项卡插件.zip 支持全屏缩放下载功能lightbox插件.zip 谷歌NEXUS网站菜单.zip 电商网站jQuery放大镜代码.zip css3高亮渐变导航按钮.zip 书籍报刊HTML网站模板.zip ssm+shiro+redis 登录控制及重试次数超过5次账号锁定一分钟 jQuery背景墙聚光灯效果.zip css3响应式滑动菜单.zip jQuery左右摇晃焦点图切换.zip 黑色瀑布流风格网站模板.zip 仿辽宁上辽汽车销售服务有限公司3g触屏版手机wap汽车网站模板.zip Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例 java EE MVC架构餐饮管理系统下载,前端+后台管理 animate.css制作酷炫文字特效.zip 城市建筑HTML5模板.zip jQuery购物抢购时间轴倒计时代码.zip 卡通可爱儿童教育网站模板.zip jQuery创意字体特效.zip 手机销售电子商务模板.zip 金碧堂皇酒店住宿官网模板.zip jQuery左右伸缩导航.zip jquery实现多条件筛选特效.zip 蓝天白云404错误页面信息.zip 简洁大气网站模板免费下载.zip CSS3图片向上3D翻转渐隐消失特效.zip 纯CSS3鼠标滑过按钮动画过滤特效.zip 酒店客房预订模板下载.zip iTunes横幅旋转幻灯片.zip 微信小程序源码-家居小商城 【PHP源码】WapEQ WAP建站系统 v1.3_wapeq1.3.zip CSS3 transform图标加载代码.zip js+css3散落红包雨动画特效.zip 【PHP源码】vBulletin v3.5.0 正式版_vbulletin350.zip 9个大气简洁的bootstrap后台模板,放出来 jquery上下左右图片轮播特效.zip jquery右上角帷幕下拉特效.zip 简单的SSH框架与DWR的整合 旅行社旅游公司网站模板.zip 纯CSS3实现动画开关按钮特效.zip
举报X