java web开发中的转发和重定向问题的理解,要的是理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web开发中的转发和重定向问题的理解,要的是理解相关的知识,希望对你有一定的参考价值。

if("zhangsan".equals(name)&&"123".equals(pass))

request.getRequestDispatcher("../ok.html").forward(request, response);
//转发:地址不变;表单的数据在ok.html还可以取得;服务器跳转,相当于POST方式

else

response.sendRedirect("../error.html");
//重定向:地址改变;表单的数据在error.html不可以取得;客户端跳转,GET方式

为啥是request.getRequestDispatcher("../ok.html").forward(request, response);
为啥是response.sendRedirect("../error.html");
谁能解释解释。谢谢

一、使用方法
转发:request.getRequestDispatcher("success.jsp").forward(request,response);
重定向:response.sendRedirect("success.jsp");

二、区别
1.转发在服务器端完成的;重定向是在客户端完成的
2.转发的速度快;重定向速度慢
3.转发的是同一次请求;重定向是两次不同请求
4.转发不会执行转发后的代码;重定向会执行重定向之后的代码
5.转发地址栏没有变化;重定向地址栏有变化
6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成
参考技术A 转发是向服务器请求了一次,在这个过程中request都有效,而重定向就不一样了,重定向其实是向服务器请求了两次,第一次向服务器请求,服务器给客户端一个响应码,客户端带着这个响应码再向服务器请求一次,request在第一次请求时有效,在第二次请求时request已被销毁,所以无效。本回答被提问者采纳 参考技术B 为啥是request.getRequestDispatcher("../ok.html").forward(request, response);
是同一个request请求,可以把request里面的东西带过去新页面,url地址栏不会改变。
为啥是response.sendRedirect("../error.html");直接跳转,不能将request里面的东西带过去,url地址栏会改变。追问

能再详细点吗···,本人菜鸟哦
为啥不是 response.getRequestDispatcher("../ok.html").forward(request, response);

追答

两种方式都可以,只是看你需不需要用到request,需要用到request就用response.getRequestDispatcher,不需要用的话两种都可以

参考技术C 转发的页面上的返回按钮可以返回上一页,而重定向的不可以返回上个页面,原先的页面不存在了 参考技术D session
的生命周期默认是半个小时,如果你不清空缓冲,不重启服务器,会在浏览器端存放30分钟。所以你第二次访问也可以查看到用户信息。

servlet转发和重定向

转发

RequestDispatcher getRequestDispatcher(java.lang.String path)

1)地址栏不会改变

2)转发只能转发到当前web应用内的资源

3)可以在转发过程中,可以把数据保存到request域对象中

重定向

1)地址栏会改变,变成重定向到地址。

2)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。

3)不能再重定向的过程,把数据保存到request中。 

转发和重定向区别示意图,黑色线代表转发,绿色线代表重定向:

结论: 如果要使用request域对象进行数据共享,只能用转发技术

以上是关于java web开发中的转发和重定向问题的理解,要的是理解的主要内容,如果未能解决你的问题,请参考以下文章

[Java][Web] Servlet中转发和重定向比较

请求转发和重定向的区别

servlet转发和重定向

转发以及重定向解析

一文吃透 SpringMVC 中的转发和重定向

java中转发和重定向的区别