请求转发(1次跳转)与重定向(2次跳转)的区别:
a.重定向无法保留传输过来的数据,请求转发可以保留传输过来的数据。
b.重定向会令地址栏发生改变(由check.jsp页面–>success.jsp页面),
请求转发则不会令地址栏发生改变(直接在服务器内部–>success.jsp页面)。
c.重定向获取数据请求的次数为2次,请求转发获取数据请求的次数为1次
d.重定向跳转发生的位置为客户端第2次跳转,请求转发跳转发生的位置为服务器内部。
应用实例:创建3个jsp页面页面login.jsp,check.jsp和seccess.jsp。将login.jsp表单数据发送到check.jsp页面,再由check.jsp页面跳转(使用请求转发或重定向)到seccess.jsp页面。
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")){
//登录成功,跳转到success.jsp页面
//重定向方式,确实跳转了,地址栏发生改变,但是数据丢失了
//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>