导读:在JavaWeb中有两种方法让一个页面跳转到另一个页面,一种是请求转发,一种是响应重定向。
请求转发:
利用request.getRequestDispatcher("转发目标URL").forward(request,response),可将页面转向到另一个页面。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/direct/check")
public class CheckloginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/direct/index").forward(request,response);
}
}
注意,用请求转发后,虽然进入了新的页面,但是URL没变,依然是/direct/check,而不是/direct/index。
响应重定向:
利用response.sendRedirect("完整URL")即可进行响应重定向。
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/direct/check")
public class CheckloginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//响应重定向需要在URL上增加Contextpath
response.sendRedirect("/request_struc/direct/index");
}
}
与请求转发不同的是,响应重定向会跳转到新页面的URL,即/direct/index。
区别:
请求转发:全程只有一次请求,服务器的请求首先来到Servlet-1,Servlet-1再原封不动地将这个请求发送到Servlet-2,并由Servlet-2返回响应到浏览器。
响应重定向:先发送一个请求到Servlet-1,Servlet返回一个响应,要求浏览器再把请求重新发送到Servlet-2,Servlet-2返回最终响应。全程有两次请求。