前言:关于转发和重定向的问题是JavaWeb后端开发面试中比较容易被问到的问题,有时候容易弄混淆,今天翻了翻之前的教课书,打算写一篇博客来对这两者的区别做一个比较详细的讲解,希望能够帮助到阅读的人!
转发:request.getRequestDispatcher (“demo.jsp"). forward(request, response);
(jsp中可以使用jsp动作指令来实现)<jsp:forward page="demo.jsp"></jsp:forward>
重定向:response.sendRedirect(“demo.jsp");
两者的区别:
I.从浏览器的地址显示上
forward方法属于服务器端去请求资源,服务器直接访问目标地址,并对该目标地址的相应内容进行读取,再把读取的内容发给浏览器,因此客户端浏览器的地址不变;而redirect是告诉客户端,使浏览器知道去请求哪一个地址,相当于客户端重新请求一遍,所以地址显示栏会变。
II.从数据共享来看
forward转发的页,以及转发到的目标7页面能够共享request里面的数据;而redirect转发的页及转发到的目标页面不能共享request里面的数据。
III.从功能来看
redirect能够重定向到当前应用程序的其他资源,还能重定向到同站点的其他应用程序的资源,甚至使用绝对url地址重定向到其他站点的资源;而forward只能在同一个Web应用程序内的资源之间转发请求,可理解为服务器内部的一种操作。
IV.从效率来看
forward效率较高,因为跳转仅发生在服务器端;redirect相对较低,因为类似于再进行一次请求