




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于Java中redirect与forward的区别· 五月 14, 2013· 6 条评论今天遇到了一个超级郁闷的问题,在公司的门户上做了二开,理想的效果是用户通过我给定的URI提交数据之后,若数据正确跳转到首页,若错误则跳转到登录页。修改完成之后部署上,发现无论用户给出的凭据是正确还是错误都往错误页上跳转。调试过程中我发现,用户输入正确的凭据以后系统确实往主页跳转了,但是最后的结果却是又返回到了登录页。仔细查看代码后发现,我在往主页跳转的时候,错误的使用了forward,造成不能将用户本地的cookie等凭证带到主页,令系统以为我已经退出了,故又返回了登录页。关于red
2、irect与forwad的区别,找到一篇博文,见下:(转载自:在Servlet中两种实现: forward方式:request.getRequestDispatcher(“/somePage.jsp”).forward(request, response); redirect方式:response.sendRedirect(“/somePage.jsp”); forward是服务器内部重定向,程序收到请求后重新定向到另一个程序,
3、客户机并不知道;redirect则是服务器收到请求后发送一个状态头给客 户,客户将再请求一次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。 forward 会将 request state , bean 等等信息带往下一个 jspredirect 是送到 client 端后再一次 request , 所以资料不被保留.使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等等资料forward是容器中控制权的转向,在客户端浏览器地址栏中
4、不会显示出转向后的地址,他是不会改变Request的值,如果你需要在下一个页面中能从中获取新的信息的话,你可以Request.setAttribute()来放置一些标志,这样从下一个页面中获取。redirect是完全的跳转,浏览器将会得到跳转的地址, 并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,forward更加高效,在forward可以满足需要时,尽量使用Request Dispatcher.forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 HttpServletResponse.sen
5、dRequest()方法。forward与include共亨Request范围内的对象,而redirect则不行,即:如果一个javabean被声明为request范围的话,则被forward到的资源也可以访问这个javabean,而redriect则不行。2、forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如: req.sendRedriect(“”);forward 是服务器内部重定向,程序收到请求后重新定向到另一个程序,而客户机并不知晓;forward会将 request state、b
6、ean、等信息带到下一个jsp页面;使用getAttribute()来取得前一个jsp所放的信息redirect 是服务器收到请求后发送一个状态头给客户,客户将再次请求,就有两次网络通行的来往。redirect 是送到客户端后再次request,因此上一个jsp的信息不被保留forward方式:request.getRequestDispatcher(“/somePage.jsp”).forward(request, response);redirect方式:response.sendRedirect(“/somePage.jsp”);redirect forward的区别1.从地
7、址栏显示来说forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。2.从数据共享来说forward:转发页面和转发到的页面可以共享request里面的数据.假如从a页面 到 b页面 在到c页面 如果用在a页面中:request.setAttribut
8、e(“a”,”aa”);<jsp:forward page=”b.jsp”></jsp:forward>在b页面中:<jsp:forward page=”c.jsp”></jsp:forward>跳转 在c页面用request.getAttribute(“a”)就可以得到a页面的值,或者用request.getParameter(“name”)也可以得到。但是要用response.sendRedirect(“b.jsp”);跳转的话就得不到a 页面的值和内容。redirect:不能共享数据.redirect不仅可以重定向到当前应用程序的其他资源,
9、还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.forward,方法只能在同一个Web应用程序内的资源之间转发请求.forward 是服务器内部的一种操作.redirect 是服务器通知客户端,让客户端重新发起请求.所以,你可以说 redirect 是一种间接的请求, 但是你不能说”一个请求是属于forward还是redirect ”3.从运用地方来说forward:一般用于用户登陆的时候,根据角色转发到相应的模块.redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.4.从效率来说forward:高.redirect:低.5.j
10、sp 语法<jsp:forward page=“relativeurl” | “<%= expression %>” />或者这样写:<jsp:forward page=“relativeurl” | “<%= expression %>” ><jsp:param name=”parametername” value=”parametervalue | <%= expression %>” />+</jsp:forward>6.例子<jsp:forward page=”/servlet/login” /&
11、gt;<jsp:forward page=”/servlet/login”><jsp:param name=”username” value=”jsmith” /></jsp:forward>描述<jsp:forward>标签从一个jsp文件向另一个文件传递一个包含用户请求的request对象.<jsp:forward>标签以下的代码,将不能执行.你能够向目标文件传送参数和值,在这个例子中我们传递的参数名为username,值为scott,如果你使用了<jsp:param>标签的话,目标文件必须是一个动态的文件,能够处理参
12、数.如果你使用了非缓冲输出的话,那么使用<jsp:forward>时就要小心。如果在你使用<jsp:forward>之前,jsp文件已经有了数据,那么文件执行就会出错.属性page=”relativeurl | <%= expression %>”这里是一个表达式或是一个字符串用于说明你将要定向的文件或url.这个文件可以是jsp,程序段,或者其它能够处理request对象的文件(如asp,cgi,php).<jsp:param name=”parametername” value=”parametervalue | <%= expression
13、 %>” />+向一个动态文件发送一个或多个参数,这个文件一定是动态文件.如果你想传递多个参数,你可以在一个jsp文件中使用多个<jsp:param>。name指定参数名,value指定参数值.<jsp:forward>例子<% page contentType=”text/html;charset=gb2312 %><html><head><title>test</title></head><body><jsp:forward page=”forwardTo.jsp”
14、><jsp:param name=”userName” value=”riso”/></jsp:forward></body></html>forwardTo.jsp<% page contentType=”text/html;charset=gb2312 %><!forwardTo.jsp><%String useName=request.getParameter(“userName”);String outStr= “谢谢光临!”;outStr+=useName;out.println(outStr);%>redirect的例子:譬 如:client 通过XXX/index.jsp?name=gauss&pwd=123访问index.jsp,而index.jsp中有< jsp:forward page=”login.jsp”/>,则在login.jsp中可以通过request.getParameter()得到name和pwd, 而<%response.sendRedirect(“login.jsp”);%>得不到。总结:A.Redirect等于客户端
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 波峰焊技术员试题及答案
- ISO 9001(DIS)-2026重大变化之1:“质量文化和道德行为”专题深度专业解读与应用指导材料(雷泽佳编制-2025A0)
- 农业银行2025金融科技岗笔试题及答案安徽地区
- 农业银行2025乐山市秋招笔试英语题专练及答案
- 中国银行2025六盘水市秋招结构化面试经典题及参考答案
- 2025年3D打印技术的骨骼修复技术
- 2025年3D打印技术的材料科学与制造工艺
- 建设银行2025吐鲁番市信息科技岗笔试题及答案
- 辅导员业务知识培训课件
- 农业银行2025黄石市秋招笔试创新题型专练及答案
- 2025年体育组织行业研究报告及未来行业发展趋势预测
- 采购进口生蚝合同协议书
- 2024年永州市工会社会工作者招聘笔试真题
- 推进文旅医养融合发展的策略及实施路径
- 成本分析表-产品成本构成
- 2024年云南航空产业投资集团招聘考试真题
- 2025年山东快递工程专业职称考试(快递设施设备知识·技术员、助理工程师)历年参考题库含答案详解(5卷)
- 蓝莓种植加工一体化发展项目可行性研究报告写作模板-申批备案
- 2025年汽车驾驶员技师资格证书考试及考试题库含答案
- 消防消控室设备管理制度
- 项目现场伙食费管理办法
评论
0/150
提交评论