什么是重定向?
服务器向浏览器发送一个状态码302及一个消息头location,浏览器收到后,会立即向 location所指向的地址发送请求。
2) 如何重定向
response.sendRedirect(String url);
其中,url是重定向的地址。
3) 编程要注意的问题
重定向之前,不能够有out.close()或者out.flush()操作。
重定向之前,如果response对象缓存有数据,则这些数据会被清空(注意数据丢失)。
4) 重定向的特点
重定向的地址是任意的
重定向之后,浏览器地址栏的地址变成了location所指定的地址。
·
如何转发?
step1 //先绑订数据 request.setAttribute(String name,Object obj);
跟绑订相关的另外两个方法
//如果name对应的值不存在,返回null。
//获得指定的绑定数据 Object request.getAttribute(String name);
//移除指定的绑定数据 request.removeAttribute(String name);
step2 获得转发器,转发
RequestDispatcher rd = request.getRequestDispatcher(String uri);
rd.forward(request,response);
或者 request.getRequestDispatcher(String uri).rd.forward(request,response);
3) 编程中要注意的问题
转发之前,不能够执行out.close或者out.flush。转发之前,会将response中缓存的数据先清空。
4) 转发的特点
a. 转发的目的地只能是同一个应用(工程)内部的某个组件
b. 转发之后,浏览器地址栏的地址没有变化
c. 转发所涉及的各个组件可以共享同一个request,response对象
重定向与转发的区别
1)地址
a.转发的地址必须是同一个应用内部的某个组件(不能跨应用,不能跨服务器)
比如:
地址1 http://localhost:8080/web06/aaa.jsp
地址2 http://localhost:8080/web06/bbb.jsp
地址3 http://localhost:8080/web07/ccc.jsp
地址4 http://www.ddd.net
在应用web06内部的组件aaa.jsp可以将信息转发到地址2(同一应用),但是不可以 转发到地址3(跨应用)和地址4(跨服务器)
b.重定向的地址没有限制
2) 能否共享request
转发可以
重定向不行
原因是转发是一次请求,重定向为两次请求,Request的生命周期只能在一次请求内,请求结束,Request 被删除
3)浏览器地址栏的地址是否变化
转发不变
重定向会变
4) 事件是否处理完毕
转发是一件事未做完
重定向是一件事已经做完