重定向和转发

重定向: 服务器发送一个302状态码及一个Location消息头(值是一个地址,称为重定向地址);通知浏览器立即向重定向地址发送请求

用法:response.sendRedirect(String url)

注意: 1重定向之前不要调用 out.close()会报错  

  2 重定向之前服务器会清空response 对象上缓存的数据,servlet只允许同时发送一个响应

特点: 1 重定向的地址是任意的(提前是要存在否则报404)

   2 重定向之后浏览器的地址会变成重定向地址

原理图

 

转发:一个web组件(servlet/jsp)将未完成的处理   通过容器转交给另外一个web组件继续完成 通常的情况是 servlet 将数据处理之后转交给jsp 去展示

如果转发 : 1.绑定数据到request  request里有一个hashMap  resquest.setAttribute(String name,Object obj); name 绑定名  obj 绑定值

2.获得一个转发器: url 要转发给哪一个web组件

RequstDispatcher  rd= request.getRequestDispathcher(String url);

3.转发

rd.forward(request,response);jsp和servlet会共享相同的请求和对象

4,在转发的目的地,可以使用request.getAttribute 方法获取 绑定的数据,然后进行处理。

1转发之前不要调用 out.close()或者out.flush()会报错    

 2 转发之前服务器会清空response 对象上缓存的数据,servlet只允许同时发送一个响应

转发原理图

转发的特点

1.转发的目的地只能是同一个应用内部的某个组件地址

2.转发之后浏览器的地址栏不会变化

3.转发所涉及的各个web组件之间可以共享同一个request和response对象

转发与重定向的区别

1.转发的目的地址是同一个应用内部的某个组件的地址,而重定向的地址是任意的。

2.转发之后浏览器的地址不变,而重定向会变。

3.转发之后的各个web组件之间可以共享request对象。重定向不可以。

4.转发是一件事没有完成,而重定向是一件事件已经做完。

 
原文地址:https://www.cnblogs.com/zjf6666/p/6541864.html