了解Servlet转发机制点击关于转发机制
了解Servlet重定向点击关于重定向
来看看两者的代码对比
转发:request.getRequesrDispatcher("要跳转的资源的url")。forward(requset,response);
重定向:response.sendRedirect(resquest.getContextPath()+"web.xml中定义的需要跳转资源的url");
//resquest.getContextPath()获取到的是资源的项目名
1.两者形式上的区别:
转发机制:
转发的是一次请求,无论资源之间进行了多少次的转发都是一次请求,即都在同一个request当中,使用的是同一个request对象,所以浏览器地址栏上的地址始终是第一个资源的地址。
(这是由于调用forward方法的时候,会将当前的request和response对象传递给下一个Servlet.)
.
由于是后端资源与资源之间的跳转,所以代码中的路径不需要加项目名。
重定向:
重定向是多次请求,浏览器地址栏上发送的请求地址为第一个资源的地址,最终再浏览器地址栏上显示的地址是最后一次请求对应资源的地址。
.
由于是response对象将将其中的路径重新响应给浏览器,浏览器接收到响应的信息之后,自发的向服务器发起一次新的请求,是前端对服务器的请求,所以路径中需要包含项目名。
2.两者本质上的区别:
转发机制:
是由web服务器来控制的,A资源跳转到B资源这个跳转是Tomcat服务器内部完成的。
重定向:
是由浏览器来完成的,具体跳转到哪个资源,由浏览器的请求路径决定。
3.使用例子来描述两者区别:
转发机制(发送一次请求):
假设A有一个项目不会做,找到了B帮忙,但是B也不会做,于是B找到了C帮忙完成了这个项目,但是此时A不知道是C帮忙完成的项目,A只认为是B帮忙完成的,自己欠了B的人情
重定向(发送多次请求):
假设A有一个项目不会做,找到了B帮忙,但是B也不会做,于是B告诉A,C会做这个项目,于是A找到了C帮忙完成了这个项目,最终A在这个过程中,找了两个人,并且知道是C帮了自己的忙。
4.转发和重定向该怎样选择?
如果在上一个Servlet中向request请求域当中绑定了数据,希望在下一个Servlet中将request域中的数据取出,使用转发机制。
.
其他的所有的请求均使用重定向。
注意:转发会存在浏览器的刷新问题。