请求转发和重定向的区别以及他们的实现方式?

1.请求转发是什么?

答:请求转发是RequestDispatcher.forword方法;作用是:在服务器端内部将请求转发给另一个资源,浏览器只知道发出请求并得到响应结果,但不知道在服务器程序内部发生了转发行为。

举例:别名为“浏览器”的人写信找张三100块,张三只有50块,于是张三找李四借了50块,然后将钱转给“浏览器”。可知,“浏览器”只发出一封信和收到一次回复,他只知道钱是张三借给他的,并不知道有一部分是李四的。

2.重定向是什么?

答:重定向是HttpServletResponse.sendRedirect方法;作用:是对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求。

举例:别名为“浏览器”写信给张三借钱,张三回信说没钱,让“浏览器”找李四借钱,并将李四的通讯地址告诉“浏览器”;于是“浏览器”按张三提供的信息给李四写信借钱,李四收到信后转钱给“浏览器”。可知,“浏览器”一共发了两封信和受到两次回复,“浏览器”也知道借钱给他的是李四。

3.请求转发和重定向的区别?

答:可分为五大区别:

3.1 目标应用和目录

请求转发方法只能将请求转发给同一个WEB应用中的组件;而重定向方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

如果传递给重定向方法的相对URL以“/”开头,它是相对整个WEB站点的根目录;如果创建请求转发对象是指定的相对URL以“/”开头,它是相对当前WEB应用程序的根目录。

3.2 浏览器地址

调用请求转发方法进行请求转发的访问过程结束后,浏览器地址栏保持初始的URL地址不变;而调用重定向方法进行重定向的访问过程结束后,浏览器地址栏的URL会发生改变,由初始的URL变成重定向的目标URL。

3.3 请求响应过程

请求转发方法的调用者和被调用者之间共享相同的request对象和response对象,它们属于同一个请求和响应的过程。而重定向方法的调用者和被调用者使用的是各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

3.4 使用场景

对于同一个WEN应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期的预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,则用请求转发方法;对于不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的时候,都应该用重定向方法。

3.5 客户端

无论是请求转发还是重定向,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓存区中已经有了一些内容,则这些内容将被从缓存区中清除。

3.6 实现方式

3.6.1 在servlet中调用请求转发,重定向的语句如下:

request.getRequestDispatcher("new.jsp").forword(request,response);//请求转发到new.jsp

response.sendRedirect("new.jsp");//重定向到new.jsp

3.6.2 在jsp页面中调用请求转发,重定向的语句如下;

<jsp:forword page="new.jsp"/>//请求转发到new.jsp

<%response.sendRedirect("new.jsp");%>//重定向到new.jsp

猜你喜欢

转载自www.cnblogs.com/su-chu-zhi-151/p/11875641.html