一、请求转发和重定向示意图
1.1 请求转发示意图
1.2 重定向示意图
二、两者的异同
请求转发:request.getRequestDispatcher("success.jsp").forward(request, response);
重定向:response.sendRedirect("success.jsp");
2.1 相同点
两者的相同之处在于:都可以进行页面的跳转。
2.2 不同点
不同点:
举一个现实生活的例子:
三、示例代码
登录页面:login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</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="登录" />
</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>检查页面</title>
</head>
<body>
<%
//设置post请求编码
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>登录成功页面</title>
</head>
<body>
欢迎您!
<%
String name = request.getParameter("uname");
out.print(name);
%>
</body>
</html>
请求转发运行结果:
注意:数据没有丢失以及地址栏没有改变(check.jsp)
重定向运行结果:
注意:数据丢失以及地址栏发生改变(success.jsp)