WEB中转发与重定向的区别

首先先看一看转发与重定向的调用

// request转发
request.getRequestDispatcher("/index.jsp").forward(request, response);

// jsp转发
<jsp:forward page="/index1.jsp">
    <!-- 给被转发的页面(index1.jsp)附加上请求数据 -->
    <jsp:param value="admin" name="username"/>
</jsp:forward>

// 重定向
response.sendRedirect("/test/index.jsp");

转发与重定向的定义:

  1. 转发:处理过程中把请求与应答(Request和Response)传入另一个请求中,自始至终只有一个Request和Response
  2. 重定向:告知浏览器,重新发一次请求,让服务器出处理
转发与重定向的区别:

 1. 转发后URL不变,而重定向的URL地址会发生变化
     例:请求地址为:http://localhost:8080/test/Test 
     ![转发的URL](http://img.blog.csdn.net/20160108144255199) 
     ![重定向的URL](http://img.blog.csdn.net/20160108144318758)
 2. 转发自始至终只有一次请求与应答,重定向有两次请求与应答
    例:
    ![转发](http://img.blog.csdn.net/20160108144519105)
    ![重定向](http://img.blog.csdn.net/20160108144538757)
3.转发只能转发当前WEB应用,而重定向可以到非当前WEB应用中
4.转发过程中,只有一个Request和Response,转发者与被转发者可以共享Request和Response,重定向不能

注意:无论是转发与重定向,在转发与重定向之前,都不能向客户端写入数据,如果写入了,转发与重定向之后会清除Response中写入的数据,无法显示到客户端

例如:

try {
            response.getWriter().write("test");
        } catch (IOException e) {
            e.printStackTrace();
        }
        request.getRequestDispatcher("/index.jsp").forward(request, response);

或者

        try {
            response.getWriter().write("test");
        } catch (IOException e) {
            e.printStackTrace();
        }
        response.sendRedirect("/test/index.jsp");

客户端无法显示”test”字符串,会由服务器自动清空Response

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值