forward(请求转发) 和 redirect(重定向)

forward 和 redirect 是页面的两种跳转方式

一、请求转发

1、语法:
request.getRequestDispatcher(String path).forward(request,response);

“ 这个path必须加 / ”

2、执行过程

forward是服务器内部跳转,两个页面中数据互通,使用同一个request对象,但是地址栏中依然显示第一次请求的url地址,用户感觉不到页面进行了跳转,也只会发送一次请求。

从servlet1请求转发到servlet2 , 在servlet1完成一部分的功能,再跳转到servlet2,继续完成剩下的功能.请求转发是服务器内部把对一个request/response的处理权,移交给另外一个对于,客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

3、特点

(1) 浏览器地址栏不发生改变,不会变为目标地址
(2) 整个过程是一个请求,一个响应
(3) request域中的数据只能由同一个请求访问
(5) 最终响应给浏览器的 是由后面的servlet来决定
(6) 可以访问WEB-INF目录中的资源

在这里插入图片描述

二、重定向

1、语法
response.sendRedirect(String url);

2、执行过程

先发起请求访问一个servlet,服务端告诉浏览器,你需要访问别的请求,服务端告诉浏览器新的请求的地址,浏览器重新发送新的请求,地址栏发生变化,变化为新请求的地址。

3、特点

(1) 浏览器地址栏发生改变 , 变成目标地址
(2) 在sendRedirect()里面是两个请求,两个响应
(3) 因为URL重定向是两个请求互不干扰,相互独立 , 所以不共享请求中的数据
(4) 最终响应给浏览器的 是由servlet2来决定(相当于把目标地址拷贝到浏览器地址栏 , 敲回车)
(5) URL重定向不能访问WEB-INF目录中的资源
(6) 因为是从客户端浏览器进行再次发送请求,所以在重定向过程中,之前传输的信息会被丢失。
在这里插入图片描述

三、应用场景

1、登陆失败,或者被拦截到登陆页面,只要是需要用户输入之后,进行跳转的,一般使用重定向。使用forward跳转,地址栏不变,如果刷新页面(重新请求地址栏),就会弹框,提示是否重复发送数据(如果是GET请求,不会提示,但是仍然会发送数据)

2、如果是从后端获取数据,一般请求转发(因为request共享)

猜你喜欢

转载自blog.csdn.net/qq_41504815/article/details/114936521
今日推荐