请求转发和重定向的区别
Posted 离落想AC
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>
以上是关于请求转发和重定向的区别的主要内容,如果未能解决你的问题,请参考以下文章