转发和重定向
理解:
都是用于Servlet之间跳转的技术。只是一个发生在服务器端,一个发生在客户端。
(请求)转发
转发功能,找HttpServletRequest对象。
HttpServletRequest是请求域对象
HttpServletRequest对象,也能作为 “域对象” 存取数据。
涉及的方法,跟ServletContext一致:
java.lang.Object getAttribute(java.lang.String name)
返回具有给动名字的 servlet container 的属性,或者当没有具有所给名字的属性时,返回一个空值。
java.util.Enumeration getAttributeNames()
返回一个包含servlet context中属性名字变量的集合.
void removeAttribute(java.lang.String name)
从请求消息中删除一个属性。
void setAttribute(java.lang.String name, java.lang.Object o)
存储一个请求消息中的属性。
注意: 请求域中存储的数据,仅限于当前HTTP请求。
getRequestDispatcher指定的是 服务器端路径 用于表示 目标Servlet的映射地址
forward 方法表示转发 , 要使用相同的请求 和 响应对象。
req.getRequestDispatcher("/to").forward(req, resp);
图解:




(响应)重定向
重定向功能,找HttpServletResponse对象。
处理完成以后,要重定向到 另一个Servlet中
sendRedirect 方法就是重定向
注意: 它里面的路径是客户端路径(要带项目名) /0729/to
resp.sendRedirect(req.getContextPath()+"/to");
自己实现的重定向:
resp.setStatus(302);
resp.addHeader(“Location”, req.getContextPath()+"/to");
图解:



转发和重定向的区别
- 转发发生在
服务器端,而重定向发生在客户端
- 转发是
一次请求,一次响应。而重定向是两次请求两次响应。
将来会学到请求域对象,意味着重定向不能用请求域传值。
- 转发只能在
项目内部进行转发。而重定向可以是任意位置(包括站外)
- 转发时,客户端感知不到(
地址栏不变)。而重定向时浏览器的地址栏会发生改变。

本文详细解释了转发和重定向两种Servlet间跳转技术的区别。转发发生在服务器端,为一次请求响应;重定向发生在客户端,产生两次请求响应。转发保持请求域数据,仅限项目内;重定向改变浏览器地址,可跨域。
892

被折叠的 条评论
为什么被折叠?



