转发(forward)
服务器在接受到客户端的请求后,对请求数据进行处理,随后由服务器来向转发地址发送请求,并传递请求数据,最后将响应的内容读取过来再发回给客户端。整个过程对于客户端来说,只发送了一次请求,并不关心随后发送了几次请求。
重定向(redirect)
服务器在接受到客户端的请求后,给客户端回应一个带有新地址的302响应码,客户端在收到响应码识别出是「重定向响应码」后,再自动向新地址发送请求,将由新地址来给客户端响应数据。
区别:
-
转发 发生在服务端
重定向 发生在客户端 -
转发 对于客户端来说只有一次请求,转发的请求是由服务端完成
重定向 对于客户端来说发送了两次请求,第一次请求和重定向后的请求是独立的两次请求 -
转发 后的地址始终是第一次请求的URL,跳转页面的URL并不显示
重定向后地址是新页面的URL -
转发 的地址只能是同一Web容器下的URL,不能跳转到其他Web容器,但可以获取WEB-INF目录下的页面
重定向 的地址可以是其他的Web容器,甚至可以是绝对地址,但不能访问WEB-INF目录下的页面request.getRequestDispatcher("https://www.google.com").forward(request,response);
-
转发 会向新地址传送请求和响应对象,地址之间是有关联的,可以共享数据
重定向 的第一次请求的地址和第二次的新地址是两次独立的请求,之间没有数据的传递