转发与重定向的区别

转发和重定向中,是我们开发中经常遇到的,那什么是转发,什么是重定向呢?

转发:浏览器向服务器请求a.jsp,但是a.jsp没有办法处理,于是将请求转发给b.jsp,b.jsp处理完成,将结果返回给浏览器(响应)。

转发过程浏览器只发起一次请求,并且浏览器地址栏不会发生改变,也就是说第一次请求哪个页面,地址栏就是哪个地址。
在这里插入图片描述
重定向
浏览器请求a.jsp,a.jsp处理不了,需要重定向b.jsp,然后响应浏览器,并且告诉浏览器重定向地址,浏览器得到响应后,发起第二次请求,请求b.jsp,b.jsp处理完成后,返回结果响应浏览器。

重定向过程,浏览器一共发起两次请求,并且浏览器地址栏发生改变(显示重定向地址)。
在这里插入图片描述

转发案例
请求text01_a.jsp页面,该页面将完成转发操作

index.jsp

<a href="text01_a.jsp">转发</a><br>

text01_a.jsp(将请求转发给text01_b.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>text01_a</title>
</head>
<body>

  <%
  System.out.println("访问text01_a,即将转发");
  request.setAttribute("req","this is request's message");
  request.getRequestDispatcher("text01_b.jsp").forward(request,response);
   %>
  </body>
</html>

text01_b.jsp(转发页面):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>text01_b</title>
</head>
<body>

  <%
  String s=request.getAttribute("req").toString();
   %>
   text01_b
   <h5><%=s %></h5>
  </body>
</html>

转发完成后浏览器结果
在这里插入图片描述
我们请求a.jsp,需要转发给b.jsp,发现内容是b.jsp的,但是地址栏确是a.jsp的。
在这里插入图片描述

重定向案例
请求text02_a.jsp页面,该页面将完成重定向操作
index.jsp

<a href="text02_a.jsp">重定向</a><br>

text02_a.jsp(session存值,重定向过程中,将完成2次request过程,request存值只在当前request有效,所以用request存值,重定向后将无法取值)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>text01_a</title>
</head>
<body>

  <%
  System.out.println("访问text02_a,即将重定向");
  session.setAttribute("req","this is session's message");
  response.sendRedirect("text02_b.jsp");
   %>
  </body>
</html>

text02_b.jsp(重定向页面):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>text02_b</title>
</head>
<body>

  <%
  String s=session.getAttribute("req").toString();
   %>
   text02_b<br/>
   <%
   out.println("session作用域,重定向取值结果:");
    %>
   <h5><%=s %></h5>
  </body>
</html>

重定向完成后浏览器结果
在这里插入图片描述
我们请求的是a.jsp,需要重定向给b.jsp,发现内容是b的,浏览器地址栏也是b的(地址栏发生了改变)
在这里插入图片描述

总结:
1.转发过程只发起一次请求,浏览器地址栏不发生改变
2.重定向过程发起两次请求,浏览器地址栏发生改变
3.转发效率更高(浏览器只发起一次请求即可)。
4.数据作用域如果是request范围的,那么重定向后将无法获取(通过session来存储数据可正常取值)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值