学了俩三天的servlet的内部转发和重定向,今天利用一点时间将servlet的内部转发和重新向进行一个大概总结,由于本人也是初学阶段,如有不对,望谅解!并希望私信我及早改正,希望能帮到大家。


首先,先将二者的语法背一下,不管会不会用,先记下语法是没错滴!!!
转发:

httpServletRequest.getRequestDispatcher("资源路径").forward(httpServletRequest, httpServletResponse);

重定向:

httpServletResponse.sendRedirect("req.getContextPath()+/资源路径");

目的:
二者都是用来实现页面跳转,给客户端一个响应。


区别:
虽然二者都是用来实现页面跳转,给客户端一个响应。但是其中还是有很大的差别的,这里就和大家一起探讨下二者原理及不同。

一:原理

servlet的转发

1.请求原理图如下所示:
servlet内部转发与重定向
2.可以简单理解转发就好比一个人去向A这个人借钱,但是A没有钱,所以A又跑去找B这个人借钱,然后把借来的钱再借给你了。

servlet的重定向

1.请求原理图如下所示:
servlet内部转发与重定向
2.可以简单理解重定向就好比一个人去向A这个人借钱,但是A没有钱,这时候A告诉你B有钱,然后你自己去跑B家去找B借钱

二:特点

转发 重定向
转发是服务器行为(这是不经过浏览器的) 重定向是客户端行为。(浏览器重新请求)。
转发是浏览器只做了一次访问请求 )重定向是浏览器做了至少两次的访问请求的(当然也可以重定向多次)。
转发浏览器地址不变 定向浏览器地址改变。
转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递 重定向两次跳转之间传输的信息会丢失(request范围)
转发只能将请求转发给同一个WEB应用中的组件 重定向可以指向任何的资源,包括当前应用程序中的其他资源,同一个站点上的其他应用程序中的资源,其他站点的资源