转发:在请求时,在服务器中完成的,客户端感知不到。
重定向:在响应时,是完全的跳转,客户端会重新请求,并有再次完整的请求过程,浏览器地址栏可见相应的信息变化。
2.对比
| 转发 | 重定向 |
|---|---|
| 不会改变浏览器的地址栏 | 会改变浏览器的地址栏 |
| 在服务器端进行跳转 | 在浏览器端进行跳转 |
| 只发一次请求 | 发两次或更多请求 |
| 可以传递数据 | 不可以传送数据 |
| 只进行域内跳转 | 可以跳转到其他应用 |
| 请求所转发到的资源中可以直接获取到请求所携带的数据 | 重定向到的资源不能直接获取到用户提交请求所携带的数据 |
3.选择
1)为了防止表单的重复提交,若是处理表单数据的Servlet跳转到其他Servlet中,需选择重定向;
2)需要跳转到域外(其他应用),使用重定向;
3)某一请求处理的Servlet执行需要消耗大量资源,需要重定向;
4)如果要保留请求域中的数据,使用转发,否则使用重定向;
5)以后访问数据库,增删改使用重定向,查询使用转发;
6)其他情况用转发。
4.方法
转发
得到转发器:
RequesDispatcher request.getRequesDispatcher("/跳转的地址") 参数是要跳转的地址
实现转发:
.forward(request,response)
RequesDispatcher request.getRequesDispatcher("/跳转的地址").forward(request,response)
重定向
属于响应对象的方法
response.sendRedirect("要跳转的地址")



