转发和重定向
在 JavaWeb 中,有两种跳转方式:
1.转发 2.重定向
转发
客户端访问 servlet ,有转发指令,将 servlet 发送给另一个servlet,然后由这个 servlet 返回给客户端,这就是转发(整个过程中对服务器的请求只发送一次)
只发出一次请求,地址栏是初次发出的请求地址,在最终的servlet中,request对象和中转的request的对象是同一个request对象,只能转发当前web应用资源(“/”代表的是相当于web工程的路径 如果是相对路径就不用写“/”)
例子:response.sendDispatcher("showLogin")(告知转发器要跳转到那个页面去). forword(req,resp);(通过转发器进行转发)
结果(地址栏不发生改变)
重定向
客户端访问 servlet ,有重定向指令,将 servlet 先返回客户端(跟服务器链接断开),客户端再发起一次请求给另一个 servlet,然后由这个 servlet 返回给客户,这就是重定向(整个过程中对服务器的请求发送两次)
重定向是发出两(多)次请求,两个请求不是同一个request,地址栏是最后发出请求的地址。如果“/”写在重定向的话,代表的是web站点的根路径
例子:response.sendRedirect("ServletForWard1");
结果(地址栏发生改变)
转发和重定向的区别
1.本质区别:转发实质上只发送一次请求,重定向实质上发送两次请求
2.转发请求的第一个request对象和中转request对象是同一个request对象,重定向的请求request对象和中转request对象不是同一个request对象
3.转发只能将请求发送给web资源(当前项目),重定向可以发送给任意资源
4.转发的地址栏是第一次请求的地址,重定向的地址栏是最后一次请求的地址
5.转发:“/”代表web项目的根路径,重定向:“/”代表web站点的根路径
包含:include
例子:
结果