1. forward是服务器的转向而redirect是客户端的跳转
2. 使用forward浏览器的地址不会发生改变,而redirect会发生改变
3. forward是一次请求中完成,而redirect是重新发起请求
4.forward是在服务器完成(必须是同一个服务器),而不用客户端重新发起请求,效率高
是servlet种的2种主要的跳转方式:forward又叫转发,redirect叫做重定向。
区别:
地址栏是否变化,数据共享,应用场景,效率,本质,次数
两者的区别总结:
1. 地址栏是否变化
1> forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端l浏览器并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
必须在同一个服务器中,否则只能使用重定向
2> redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址
地址栏显示的是新的地址。
2. 数据是否共享
1> 由于转发整个过程是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据
2> redirect不能共享
3. 使用场景
1>forword 一般用于用户登录,成功登录后转发到首页
2>redirect一般用于用户注销登录,成功注销后,返回主页面或者跳转到其他网站
4. 从效率来说
1>forword效率高(一次请求),而redirect效率低(二次请求)
5. 从本质来说
forword转发是服务器上的行为,而redirect重定向是客户端浏览器的行为
6. 请求的次数
forword只有一次请求;而redirect有两次请求,
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class MyServlet extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("/other/page.html?para=some").forward(req, resp); resp.sendRedirect(req.getContextPath() + "/index.html"); } }