response.sendRedirect()和request.getRequestDispatcher().forward()的区别

6 篇文章 0 订阅

response.sendRedirect()和request.getRequestDispatcher().forward()都可以用来跳转页面,但还是有很大区别,总结了一些,具体如下:

  1. response.sendRedirect(url)重定向到指定URL
    request.getRequestDispatcher().forward()请求转发到指定URL

  2. response.sendRedirect()是客户端跳转
    request.getRequestDispatcher().forward()是服务器跳转

  3. response.sendRedirect()跳转指定URL后,上个页面的请求全部结束,原request将会消亡,数据将会消失,当前新页面会建立新的request对象
    request.getRequestDispatcher().forward()采用请求转发方式,在跳转页面的时候是带着原页面的request和response对象跳转的,request对象始终存在,不会重建

  4. response.sendRedirect()会改变地址栏
    request.getRequestDispatcher().forward()不会改变地址栏

  5. response.sendRedirect()传递参数时将参数写入URL中,如:test.jsp?name=zhangsan&age=28不能通过request或response方式
    request.getRequestDispatcher().forward()通过response.setAttribute("name","zhangsan")来传值

  6. 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>
    


    显示用转发跳转网页,再使用重定向,结果分别如下:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值