<jsp:forward>与response.sendRedirect()页面跳转的区别
<jsp:forward>与respose.sendRedirect()是JSP中实现页面跳转的两种方式,他们都能实现从一个页面跳转到另一个页面的功能,那他们有什么区别呢?下面是我对他们的理解
如上图所示:
<jsp:forward>:客户端访问第一个页面,第一个页面跳转到第2个页面,第二个页面把内容传递给客户端,客户端浏览器显示第一个页面的名字,跳转页面发生在服务器端,2个页面的request是同一个
response.sendRedirect:客户端访问第一个页面时,第一个页面告诉客户端重新访问第二个页面,客户端自动敲第二个页面的地址,第二个页面把内容反馈给客户端,跳转页面发生在客户端,2个页面的request不同
可用一个简单的例子来说明:
forforward.jsp:
<html>
<head>
<title>forforward.jsp</title>
</head>
<body bgcolor=pink>
here is the forforward page
<br>
<%= request.getParameter("name") %>
<%= request.getParameter("oldName") %>
<%= request.getParameter("roles") %>
</body>
</html>
采用<jsp:forward>跳转的
forward.jsp:
<html>
<head>
<title>forward example</title>
</head>
<body bgcolor=red>
Welcome to here!
<jsp:forward page="forforward.jsp" >
<jsp:param name = "name" value="m"/>
<jsp:param name="oldName" value='<%= request.getParameter("name") %>'/>
<jsp:param name = "roles" value = "manager"/>
</jsp:forward>
</body>
</html>
运行forward.jsp时,客户端显示forforward.jsp的内容,但访问的地址名字依然是forward.jsp
采用response.sendRedirect()跳转的 sendRedirect.jsp:
<% response.sendRedirect("forforward.jsp"); %>
运行sendRedirect.jsp时,客户端显示forforward.jsp的内容,而且访问的地址名字也变成了forforward.jsp
因此,可总结如下:
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说
forward:高.
redirect:低.