转发 (是服务器内部的事,不牵扯浏览器,转发的时候该请求好还没有结束)
通过request.getRequestDispatcher("path").forward(request, response);//request是HttpServletRequest的对象
或者通过调用 this.getServletContext().getRequestDispatcher("path").forward(request,
response);来实现
重定向 (浏览器发起的请求已被服务器响应,该请求已经结束,但因为服务器给浏览器响应了一个重定向的链接,所以浏览器会自动再发一次所给链接的请求,所以整个过程牵扯到了浏览器)
只能通过response.sendRedirect("path");//response是HttpServletResponse的对象
注:重定向发了两次请求,且浏览器的地址栏会发生变化,可以访问域外链接,如 https://www.baidu.com
转发是服务器内部的发生的,不会引起浏览器的二次请求,所以地址栏不会发生变化,但不能访问域外链接,且因为是一次请求,所以可以内部传递数据
通常为了提供访问速度等,一般都采用转发
package com.itheima.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class demo8 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.getServletContext().getRequestDispatcher("path");//转发
request.getRequestDispatcher("path");//转发
response.sendRedirect("path");//重定向
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}