代码:
response.sendRedirect(“login.html”); //重定向
request.getRequestDispatcher(“login.html”).forward(request,response); //请求转发
在学习servlet过程中如果要实现页面跳转,可以用重定向和请求转发,两种方式都可以实现页面的跳转,那么他们的区别是什么?
重定向时,客户端向服务端发送一次请求,服务端返回给客户端一个响应头302状态码(found),以及跳转的地址,客户端根据服务端返回的这个地址继续发送一次请求,跳转到对应的页面,客户端在这个过程中执行了两次请求
请求转发时,客户端向服务端发送一次请求,服务端返回给客户端一个200状态码(请求成功),并且服务器内部帮助客户端进行页面的跳转,不需要客户端去实现跳转,客户端在这个过程中之执行了一次请求
相比较之下,如果效率高的则是请求转发,因为只发送了一次请求。但是请求转发只能跳转到服务器中自己项目下的网页地址,而重定向则没有限制,并且由于是两次请求,重定向没办法使用上一次request存储的数据,因为做了两次不同的请求.
简单的理解重定向相当于去小卖部买可乐,小卖部卖完了,老板让你自己去隔壁或者其他店铺买这就是重定向,因此URL地址栏最后显示的是请求的页面地址(你去的另外一家店铺低点)
请求转发相当于去小卖部,老板告诉你可乐卖完了,但是老板比较热心帮你去了其他店铺买来给你,你最后完成交易的地点还是在老板的小卖部,因此URL地址栏最后显示的是你请求的Servlet的地址(老板的小卖部地址).