转发和重定向区别

最近直接被安排前后端,前端jsp。。。必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。

1.重定向访问过程结束后,浏览器地址栏中显示的URL会发生变化;

转发过程结束后,浏览器地址栏保持初始的URL地址不变。

这个栗子简直不要太形象:

HttpServletResponse.sendRedirect重定向过程,就好比“浏览器”写信找张三借钱,张三回信说没钱,让他找李四借,并告诉了李四的地址,浏览器又写信找李四借钱,李四收到信后把钱汇给了“浏览器”。

由此可见,重定向的时候,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

request.getRequestDispatcher().forward()转发过程,就好比“浏览器”写信向张三借钱,张三没钱,找李四借了钱,甚至可以自己加上一些钱(转发信息不会丢失,重定向会丢失),然后汇给“浏览器”。

由此可见,转发的时候,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

2.response.sendRedirect()方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程;request.getRequestDispatcher().forward()方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;

不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用response.sendRedirect()方法。

对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用request.getRequestDispatcher().forward()方法。

3.转发是服务器行为,重定向是客户端行为;转发是要比重定向快,因为重定向需要经过客户端,而转发没有。

 

 

你可能感兴趣的:(转发和重定向区别)