重定向和内部转发(请求转发):
重定向: response.sendRedirect(地址)
内部转发:request.getRequestDispatcher(地址).forward(request, response);
重定向和内部转发对比:
1.重定向是多次请求,而内部转发是一次请求
2.重定向是客户端重新发起URL请求,所以URL地址会发生改变,但是内部转发是由服务器将请求信息和响应信息内部的传给其他类进行处理,URL不会发生变化.
3.由于,重定向是由客户端发起请求,所以是客户端通过新的URL地址,获取资源,若要进行参数传递,只能在URL地址栏上进行参数拼接.而内部转发,是将整个request 传递给下一个地址,则可以将需要传递的数据放在request作用域,然后在下一个地址,从request作用域中获取数据.
所以,内部转发数据传递优于重定向.
重定向和内部转发:共性: 都可以页面跳转,还可以传递数据
什么时候使用重定向什么时候使用内部转发:
- 能使用重定向的地方一定可以使用内部转发.但是,能使用重定向就不要使用内部转发,优先使用重定向.
- 内部转发容易造成服务器压力过大.程序无法正常运行.
- 由于重定向是由客户端发起请求获取资源,URL地址会发生改变,每次刷新页面时,只会请求当前URL地址资源.而
内部转发,是服务器内部将请求信息进行转发,每次刷新时,会从当前URL地址发起请求,期间所有相关的程序都会重新
加载执行一遍.这样无形增加服务器压力,且容易出现运算异常。
总结:
1、转发是在服务器端完成的,重定向是在客户端发生的;
2、转发的速度快,重定向速度慢;
3、转发是同一次请求,重定向是两次请求;
4、转发地址栏没有变化,重定向地址栏有变化;
5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。