servlet内部转发与重定向
学了俩三天的servlet的内部转发和重定向,今天利用一点时间将servlet的内部转发和重新向进行一个大概总结,由于本人也是初学阶段,如有不对,望谅解!并希望私信我及早改正,希望能帮到大家。
首先,先将二者的语法背一下,不管会不会用,先记下语法是没错滴!!!
转发:
httpServletRequest.getRequestDispatcher("资源路径").forward(httpServletRequest, httpServletResponse);
重定向:
httpServletResponse.sendRedirect("/资源路径");
目的:
二者都是用来实现页面跳转,给客户端一个响应。
区别:
虽然二者都是用来实现页面跳转,给客户端一个响应。但是其中还是有很大的差别的,这里就和大家一起探讨下二者原理及不同。
一:原理
servlet的转发
1.请求原理图如下所示:
2.可以简单理解重定向就好比一个人去向A这个人借钱,但是A没有钱,这时候A告诉你B有钱,然后你自己去跑B家去找B借钱
2.可以简单理解转发就好比一个人去向A这个人借钱,但是A没有钱,所以A又跑去找B这个人借钱,然后把借来的钱再借给你了。
二:特点
内部转发 | 重定向 |
转发是服务器行为(这是不经过浏览器的) | 重定向是客户端行为。(浏览器重新请求)。 |
转发是浏览器只做了一次访问请求 | 重定向是浏览器做了至少两次的访问请求的(当然也可以重定向多次)。 |
转发浏览器地址不变 | 定向浏览器地址改变。 |
转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递 | 重定向两次跳转之间传输的信息会丢失(request范围) |
转发只能将请求转发给同一个WEB应用中的组件 | 重定向可以指向任何的资源,包括当前应用程序中的其他资源,同一个站点上的其他应用程序中的资源,其他站点的资源 |