请求转发和重定向的区别

Posted xiaotiancaililuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求转发和重定向的区别相关的知识,希望对你有一定的参考价值。

以一个login界面的跳转为例子:

首先一共有3个页面,login页面,check页面,success页面。

流程是login页面使用户键入登录信息,然后把用户登录信息传递给check页面检查信息是否有误,如果没有错误则转到success界面输出登录信息;

1、地址栏是否改变

请求转发: 不改变;(check.jsp)

重定向:改变; (success.jsp)

2、是否保留第一次请求时的数据

请求转发:保留 (不会丢失数据)

重定向:不保留(会丢失数据)

3、请求的次数和响应

请求转发:一次请求,一次跳转 (login.界面请求check.jsp界面然后信息正确则响应跳转success.jsp不正确则响应错误信息)

重定向:两次请求,两次跳转 (请求check.jsp界面然后有check.jsp界面响应给login.jsp界面,如果信息正确则由login.jsp请求success.jsp界面)

eg:

请求转发:

张三(客户端) ——> 【 服务窗口A (服务端) ——>服务窗口B(服务端)】

重定向:

张三(客户端) ——>服务窗口A(服务端) ——>去找B
张三(客户端) ——>服务窗口B(服务端) ——>结束

4、 跳转发生的位置

请求转发:服务端

重定向:客户端发出的第二次请求跳转

代码示例:

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   
     <form action="check.jsp" method="post">
     用户名:<input  type="text" name="uname"><br/>
     密码:<input type="password" name="upwd"><br/>
     <input type= "submit" value="登录"><br/>
     
     </form>
</body>
</html>

check.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

   <%
   request.setCharacterEncoding("utf-8");
   String  name = request.getParameter("uname");
   String  pwd  = request.getParameter("upwd");
   
   if(name.equals("zs")&&pwd.equals("abc"))
   
  //response.sendRedirect("success.jsp");  //重定向会导致数据丢失
   
   request.getRequestDispatcher("success.jsp").forward(request,response);
   //用请求转发,可以获取到数据并且地址栏没有改变
   
   else 
   
  out.print("用户名密码错误");
   
   
   %>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

      登陆成功!<br/>
      欢迎您:
      <%
        String name = request.getParameter("uname");
        out.print(name);
      %>


</body>
</html>

以上是关于请求转发和重定向的区别的主要内容,如果未能解决你的问题,请参考以下文章

转发和重定向

转发和重定向的区别

转发和重定向的区别

转发和重定向的区别

SpringMVC框架如何实现请求转发和重定向呢?

请求转发和重定向的区别