什么是重定向,什么是转发?
重定向就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。”
转发通过各种方法发送请求时,实际上访问的是同一个web容器下的URL,不能跳转到本web容器以外的路径。
重定向和转发到底有什么区别
两者区别 | 转发 | 重定向 |
---|---|---|
语句 | request.getRequestDispatcher(‘跳转的地址 ’).forward(request,response) | response.sentRedirect(‘跳转的地址’) |
访问服务器的次数 | 1次 | 2次 |
地址栏是否变化 | 变化 | 不变 |
跳转后面的语句是否执行 | 不执行 | 执行【除非return】 |
上面的概念比较抽象,我现在用具体代码来解释
首先这个代码主要有四个页面,一个是login.jsp登录页面,一个是check.jsp页面,一个是index.jsp页面,一个是error.jsp页面。
实现的功能 :用户在login.jsp页面中输入用户名和密码,通过按钮提交到check.jsp页面进行判断,如果用户名和密码检验是对的,那么通过重定向跳转的index.jsp页面显示“某某某登录成功”;如果用户名和密码不匹配,那么通过转发跳转到error.jsp页面显示“某某某登录失败”。该案例以用户名“张三”与密码“123”为登录成功的条件
login.jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录页面</title>
</head>
<body>
<form action="check.jsp" method="get">
用户名:<input type="text" name="username" /><br>
密 码:<input type="password" name="password" /><br>
<input type="submit" value="提交"/>
</form>
</body>
</html>
check.jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>检查用户名和密码的页面</title>
</head>
<body>
<%
String user = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); //防止乱码
String pass = request.getParameter("password");
if ("admin".equals(user) && "123".equals(pass)) {
response.sendRedirect("index.jsp");//重定向
} else {
request.getRequestDispatcher("error.jsp").forward(request, response);//转发
}
%>
</body>
</html>
index.jsp页面
<%
String user = request.getParameter("username");
if (user != null) {
user = new String(request.getParameter("username").getBytes(
"ISO-8859-1"), "UTF-8");
}
%>
<%=user%>登录成功
error.jsp页面
<%String user = new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"); %>
<%= user%>登录失败
login.jsp登录页面图片
登录成功的页面 index.jsp
index.jsp是通过重定向实现的
登录失败的页面 error.jsp
error.jsp是通过转发实现的
由上面几个图片可以得出的结论:
1.地址栏发生变化,转发能够将参数一并的传过去。而重定向并不能一并将参数传过去。
2。页面发生变化,转发还是上个页面。而重定向跳转到新的页面。
重定向和转发的运行机制:
重定向
请求转发
如有错误,望谅解,并且能够说一下哪里错误,一起进步嘛