天天看点

sendRedirect()重定向与forward()转发的区别

今天主要来说说重定向和转发的区别,转发和从定向的区别主要有以下四点:c

①叫法不一样response.sendRedirect()叫做重定向,request.getDispatcher("/请求资源地址").forward(request,response);

②实际发生的位置不一样response.sendRedirect()重定向是发生在客户端的,而request.getDispatcher("/请求资源地址").forward(request,response)是发生在服务器端的,一次重定向客户端需要发出两次请求,而一次转发客户端只需要发出一次请求

③用法不一样response.sendRedirect(“/web应用/资源名称”),request.getDispatcher("/请求资源地址").forward(request,response)

④请求的url范围不一样重定向可以请求任何url地址,而转发只能请求当前web应用下的资源

1.那么转发和重定向的客户端和服务器是如何交流的呢?下面就用流程图来解释一下:

①转发

sendRedirect()重定向与forward()转发的区别

②重定向

sendRedirect()重定向与forward()转发的区别

2.通过上面的图很请楚的看出来在重定向中浏览器向客户端发出了两次请求,每一次请求都会是一个新的request对象,所以第一次请求Servlet1的request对象和第二次请求Servlet2的request对象是两个完全不同的对象,也就是说两次请求的request对象是不共享数据的。而对于转发来说浏览器向客户端只发出了一次请求,请求的是Servlet1处理类,在Servlet1中转发到Servlet2具体步骤是:

①Servlet1告诉服务器要请求Servlet2,并且把自己的request对象和response对象传给Servlet2

②服务器找到Servlet2并且调用Servlet2的相应方法创建Servlet2并且做相应处理

③处理完之后Servlet2将response对象返回给服务器,服务器做处理响应给客户端

整个转发过程中客户端只请求了一次服务器,换而言之转发是发生的服务器端的,而且转发的两个Servlet类中是共享request对象中的数据的