response.sendRedirect()和request.getRequestDispatcher().forward()都可以用来跳转页面,但还是有很大区别,总结了一些,具体如下:
- response.sendRedirect(url)重定向到指定URL
request.getRequestDispatcher().forward()请求转发到指定URL
- response.sendRedirect()是客户端跳转
request.getRequestDispatcher().forward()是服务器跳转
- response.sendRedirect()跳转指定URL后,上个页面的请求全部结束,原request将会消亡,数据将会消失,当前新页面会建立新的request对象
request.getRequestDispatcher().forward()采用请求转发方式,在跳转页面的时候是带着原页面的request和response对象跳转的,request对象始终存在,不会重建
- response.sendRedirect()会改变地址栏
request.getRequestDispatcher().forward()不会改变地址栏
- response.sendRedirect()传递参数时将参数写入URL中,如:test.jsp?name=zhangsan&age=28不能通过request或response方式
request.getRequestDispatcher().forward()通过response.setAttribute("name","zhangsan")来传值
- response.sendRedirect()可以重定向到任何url
request.getRequestDispatcher().forward()只能向同一web应用下的其他资源转发
举个栗子:
public class send extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //这里设置一个session request.setAttribute("name", "zhangsan"); //先使用转发 request.getRequestDispatcher("recv.jsp").forward(request, response); //再使用重定向 //response.sendRedirect("recv.jsp"); } }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <% String name = (String)request.getAttribute("name"); %> <%=name %> </body> </html>
显示用转发跳转网页,再使用重定向,结果分别如下: