转发和重定向
转发的语法:
//java代码
request.getRequestDispatcher("url").forward(request,response);
//jsp标签
<jsp:forward page="url"></jsp:forward>
重定向的语法
//java代码
response.sendRedirect("url");
转发(forward)
- 执行forward后依然是上一次请求
- forward的目标页面,可以访问请求原请求的请求参数,因为是一次请求,所有的请求参数,request范围的属性全部存在(request域对象的属性对象全部存在)。
- 地址栏里请求的URL不会改变
转发的工作方式:
实例:
1. 登录页面(login.jsp)
<form action="doLogin.jsp" method="post">
账户: <input type="text" name="user"><p></p>
密码:<input type="text" name="pwd"><br>
<input type="submit">
</form>
- 验证数据页面(doLogin.jsp),当数据验证成功后转发
<body>
<%
String user = request.getParameter("user");
String psw = request.getParameter("pwd");
if(user!=null){
request.setAttribute("user",user);
request.setAttribute("psw",psw);
// response.sendRedirect("sucessLogin.jsp");
// request.getRequestDispatcher("sucessLogin.jsp").forward(request,response);
%>
<jsp:forward page="sucessLogin.jsp"></jsp:forward>
<%
}else{
request.setAttribute("mess","登录异常!");
request.getRequestDispatcher("errorTest.jsp").forward(request,response);
}
%>
</body>
- 数据验证成功后
当数据验证成功时,或者失败时url还停留在doLogin.jsp页面,url没有改变
重定向(redirect)
- 执行redirect后生成第二次请求
- redirect的目标页面,不能访问原请求参数,因为是第二次请求,所有的请求参数,request范围的属性全部丢失。
- 地址栏请求的URL改变
转发的工作方式:
实例:
当使用重定向时,可以看到url改变,和request域对象里面的数据丢失。
重定向转发的区别
注意: 重定向是客户端的行为,转发是服务器的行为