(请求)转发和(响应)重定向@HttpServletRequest对象@HttpServletResponse对象

转发和重定向

理解:
都是用于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");

图解:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

转发和重定向的区别

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

猜你喜欢

转载自blog.csdn.net/weixin_47371330/article/details/107657516