




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于Java中redirect与forward的区别 五月 14, 2013 6 条评论今天遇到了一个超级郁闷的问题,在公司的门户上做了二开,理想的效果是用户通过我给定的URI提交数据之后,若数据正确跳转到首页,若错误则跳转到登录页。修改完成之后部署上,发现无论用户给出的凭据是正确还是错误都往错误页上跳转。调试过程中我发现,用户输入正确的凭据以后系统确实往主页跳转了,但是最后的结果却是又返回到了登录页。仔细查看代码后发现,我在往主页跳转的时候,错误的使用了forward,造成不能将用户本地的cookie等凭证带到主页,令系统以为我已经退出了,故又返回了登录页。关于redirect与forwad的区别,找到一篇博文,见下:(转载自:/tenor/article/details/4077079)在Servlet中两种实现: forward方式:request.getRequestDispatcher(“/somePage.jsp”).forward(request, response); redirect方式:response.sendRedirect(“/somePage.jsp”); forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客 户,客户将再请求一次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。 forward 会将 request state , bean 等等信息带往下一个 jspredirect 是送到 client 端后再一次 request , 所以资料不被保留.使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料forward是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个页面中能从中获取新的信息的话,你可以Request.setAttribute()来放置一些标志,这样从下一个页面中获取。redirect是完全的跳转,浏览器将会得到跳转的地址, 并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,forward更加高效,在forward可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 HttpServletResponse.sendRequest()方法。forward与include共亨Request范围内的对象,而redirect则不行,即:如果一个javabean被声明为request范围的话,则被forward到的资源也可以访问这个javabean,而redriect则不行。2、forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如: req.sendRedriect(“”);forward 是服务器内部重定向,程序收到请求后重新定向到另一个程序,而客户机并不知晓;forward会将 request state、bean、等信息带到下一个jsp页面;使用getAttribute()来取得前一个jsp所放的信息redirect 是服务器收到请求后发送一个状态头给客户,客户将再次请求,就有两次网络通行的来往。redirect 是送到客户端后再次request,因此上一个jsp的信息不被保留forward方式:request.getRequestDispatcher(“/somePage.jsp”).forward(request, response);redirect方式:response.sendRedirect(“/somePage.jsp”);redirect forward的区别1.从地址栏显示来说forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。2.从数据共享来说forward:转发页面和转发到的页面可以共享request里面的数据.假如从a页面 到 b页面 在到c页面 如果用在a页面中:request.setAttribute(“a”,”aa”);在b页面中:跳转 在c页面用request.getAttribute(“a”)就可以得到a页面的值,或者用request.getParameter(“name”)也可以得到。但是要用response.sendRedirect(“b.jsp”);跳转的话就得不到a 页面的值和内容。redirect:不能共享数据.redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.forward,方法只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.redirect 是服务器通知客户端,让客户端重新发起请求.所以,你可以说 redirect 是一种间接的请求, 但是你不能说”一个请求是属于forward还是redirect ”3.从运用地方来说forward:一般用于用户登陆的时候,根据角色转发到相应的模块.redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.4.从效率来说forward:高.redirect:低.5.jsp 语法jsp:forward page=“relativeurl” | “” /或者这样写:jsp:forward page=“relativeurl” | “” jsp:param name=”parametername” value=”parametervalue | ” /+6.例子描述标签从一个jsp文件向另一个文件传递一个包含用户请求的request对象.标签以下的代码,将不能执行.你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为scott,如果你使用了标签的话,目标文件必须是一个动态的文件,能够处理参数.如果你使用了非缓冲输出的话,那么使用时就要小心。如果在你使用之前,jsp文件已经有了数据,那么文件执行就会出错.属性page=”relativeurl | ”这里是一个表达式或是一个字符串用于说明你将要定向的文件或url.这个文件可以是jsp,程序段,或者其它能够处理request对象的文件(如asp,cgi,php).jsp:param name=”parametername” value=”parametervalue | ” /+向一个动态文件发送一个或多个参数,这个文件一定是动态文件.如果你想传递多个参数,你可以在一个jsp文件中使用多个。name指定参数名,value指定参数值.例子testforwardTo.jspredirect的例子:譬 如:client 通过XXX/index.jsp?name=gauss&pwd=123访问index.jsp,而index.jsp中有,则在login.jsp中可以通过request.getParameter()得到name和pwd, 而得不到。总结:A.Redirect等于客户端向服务器发出两次request,同时也接受到两次responseForward却只是一次request一次respo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《钓鱼的启示》读后感15篇
- 蓝莲花设计工作室创业计划
- 新疆乌鲁木齐市实验学校2023-2024学年高三上学期1月月考历史含解析
- 重庆市黔江中学2021-2022学年高三上学期10月月考政治题 含解析
- 武汉城市职业学院《体育政策与法规》2023-2024学年第二学期期末试卷
- 开展2025年《安全生产月》活动方案 (3份)
- 辽宁理工职业大学《环境科学实验Ⅳ(环境生物学)》2023-2024学年第二学期期末试卷
- 成都农业科技职业学院《资源与环境(环境工程)领域论文写作指导》2023-2024学年第二学期期末试卷
- 新疆第二医学院《高级人工智能》2023-2024学年第二学期期末试卷
- 广州软件学院《模拟系统集成一》2023-2024学年第二学期期末试卷
- 【 课件】上海普通中小学课程方案
- 弱电项目安全施工应急预案(3篇)
- 【MOOC】信号与系统-南京邮电大学 中国大学慕课MOOC答案
- 院感防控应急演练方案
- 第四讲大力推进现代化产业体系建设-形势与政策
- 有限空间安全技术交底
- 打混凝土劳务清包工合同
- 社区卫生服务中心十四五发展规划
- 20世纪外国文学史课件:意识流文学
- 中国上市发电公司2023年回顾及未来展望-安永-2024
- 用人单位调档函范文10篇
评论
0/150
提交评论