什么时候使用转发和重定向
1、什么时候用转发forward?什么时候用重定向redirect?
- 如果希望跳转前后地址栏地址不会发生变化, 只能使用转发; 如果希望跳转前后地址栏地址会发生变化, 只能使用重定向
- 如果希望在跳转前后, 能够通过request对象带数据到目的地, 只能使用转发
- 如果仅仅是做一个跳转,没有其他要求,此时推荐使用转发(转发是一次请求,一次响应,可以减少访问服务器的次数,降低服务器的压力)
转发
request在实现转发时,通过request.setAttribute方法和request.getAttribute方法带数据到目的地时,就是通过request对象中的map集合带数据,这个request对象上的map集合以及request对象所在的范围即称之为是一个域对象。
如果一个对象具备可以被访问的范围,通过这个对象上的map集合可以在整个范围内实现数据的共享。这样的对象就叫做域对象。
在request对象上提供了往域对象(map)中存数据的方法以及取数据的方法:
request.setAttribute(String attrName, Object attrValue);
往request域中存入一个域属性,属性名(key)只能是字符串,属性值(value)可以是任意类型。
request.getAttribute(String attrName);
根据属性名(key)获取对应的属性值(value)。返回的是一个Object类型的对象。
1、转发代码
request.getRequestDispatcher(url地址/转发到资源的地址).forward(req, res);
getRequestDispatcher()的参数可以是jsp文件或者是请求的url地址
2、转发图解
3、转发注意点
- 一次请求, 一次响应
- 进行转发的两个资源(A和B)必须是同一个项目下的Web应用(jsp或servlet类等) 否则转发会失败!
- 转发时的路径中不能出现当前Web应用的访问路径, 因为服务器会帮我们加上
- 因为转发是一次请求, 因此服务器会创建一个request对象和一个response对象, 因此转发时, 会将当前Servlet中的request和response对象, 通过forward方法传递给要转发的资源
重定向
当浏览器向服务器发请求访问某一个资源A,资源A在响应时通知浏览器需要再进一步请求才能获取到对应的资源,浏览器再次发请求访问服务器中的资源B,最终由资源B响应浏览器要获取的资源,这个过程叫做重定向。
1、重定向代码
response.sendRedirect(所重定向到资源的URL地址);
2、重定向图解
3、重定向特点
- 重定向是两次请求、两次响应
- 重定向前后,浏览器的地址栏地址会发生变化。(因为两次请求都是通过浏览器发起,浏览器知道这个跳转的过程,因此地址栏地址会变化)
- 重定向前后的request对象不是同一个(因为重定向是两次请求,服务器会根据两次请求创建两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)
- 重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器。(进行跳转的两个资源之间没有限制)
本文转载于:https://www.cnblogs.com/zpKang/p/13099759.html