先上代码再讲区别
//response.sendRedirect("hiweb");
//response.sendRedirect("/hiweb");
//response.sendRedirect("demo/hiweb");
//request.getRequestDispatcher("/hiweb").forward(request, response);
request.getRequestDispatcher("hiweb").forward(request, response);
请求转发:请求转发的本质是 web容器对请求,重新转发到容器的某个servlet(jsp本质也是servlet)进行处理 然后返回 响应;
交互过程:B->S S->B
请求重定向:请求重定向的本质是web容器对所请求的第一次请求 直接响应303报文携带正确地址, 然后由浏览器重新发起新的请求到web容器
交互过程 :B->S S->B B->S S->B
以上是本质区别,再来记录下源码级区别,
1.
请求转发由HttpServletRequest对象发起
而请求重定向由HttpServletResponse对象发起
2.
请求转发 填写的/代表着应用程序所在地之后的url
而请求重定向 填写的/代表着域名之后的url
设域名为 www.test.com
设java应用程序为名demo
请求转发 /hiweb 实际被导向www.test.com/demo/hiweb
请求转发 hiweb 实际被导向www.test.com/demo/hiweb
请求重定向 /hiweb 实际被导向www.test.com/hiweb
请求重定向 hiweb 实际被导向www.test.com/demo/hiweb