前言
在Servlet中有
forward()
方法,response对象有sendRedirect()
方法,但是其实在JSP的内置对象中也有这两个对象,因此不管在Servlet或者JSP中其实他们的区别是一样的,只是JSP第一步需要翻译成Servlet。
区别
- 如下图所示为forward方法的过程:首先浏览器向服务器发送请求,当在使用forward方法的时候是将请求发给另外一个servlet让他来处理,之后将第二个servlet的结果返回给客户端。因此容易知道在浏览器中,用户的地址栏仍然是第一次请求的地址,不会发生改变。forward是服务器内部的转发,在整个过程中使用的是同一个Request,因此
forward()
方法会将Request的信息带到并定向的Servlet中去,调用该方法的过程是Request.getRequestDispatcher(path).forward(request, response);
。
- 如下图所示是sendRedirect的过程:首先客户端向一个servlet发送请求,在这个servlet中Response对象调用了
sendRedirect()
方法,response.sendRedirect(path);
这样就告诉了浏览器新的地址,浏览器根据新的地址再次发送一个请求,因此浏览器中出现的是第二次发送请求的地址,正因为这种方式比forward()
方法多了一次请求因此其效率要低一些。
小结
forward能满足条件的,就用forward,但是有时候需要去其他服务器上面获取资源就不得不使用redirect啦!