码迷,mamicode.com
首页 > 编程语言 > 详细

关于java中sendRedirect,forward和include区别

时间:2016-04-04 13:03:25      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:

在javaWeb中页面跳转一般有三种形式,sendRedirect,forward和include,三者有什么区别呢?

我先进行说明,再以一个小例子说明

一、sendRedirect

使用方式

response.sendRedirect();

服务器根据逻辑,发送一个状态码,告诉浏览器去请求指定的地址,把需要的参数放在转发的地址里面。由于是一次新的申请,原先的request就不能读取了,可以使用session代替,或者使用include,和forward代替

二、forward

使用方式

request.getRequestDispatcher("/first.jsp").forward(request, response);

页面会是first.jsp的内容,地址栏不变

可以使用设置属性

三、include

使用方式

request.getRequestDispatcher("/first.jsp").include(request, response);

页面会同时包含当前页面和first.jsp的内容

可以使用设置属性

 

下面是一个例子

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
 %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>index.jsp 页面</h1>
<a href="first.jsp">first.jsp</a><br/>
<a href="first.jsp?id=123456">first.jsp带id123456</a><br/>
<a href="second.jsp">second.jsp</a><br/>
<a href="second.jsp?id=123456">second.jsp带id123456</a><br/>
<a href="third.jsp">third.jsp</a><br/>
<a href="third.jsp?id=123456">third.jsp带id123456</a><br/>

可以获取id为:<%=request.getParameter("id") %>
</body>
</html>

first.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
 %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>first.jsp 页面</h1>
提交的ID:<%=request.getParameter("id")%>
 <% 
 		response.sendRedirect(request.getContextPath()+"/index.jsp");
 		System.out.println("first.jsp有访问过了");
 %>
</body>
</html>

second.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
 %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>second.jsp 页面</h1>

<%

	request.getRequestDispatcher("/index.jsp").forward(request, response);
%>
提交的ID:<%=request.getParameter("id")%>

</body>
</html>

third.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
 %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>third.jsp 页面</h1>
提交的ID:<%=request.getParameter("id")%>
<%
	request.getRequestDispatcher("/fourth.jsp").include(request, response);
	request.getRequestDispatcher("/index.jsp").include(request, response);


%>
<hr>

</body>
</html>

fourth.jsp 

<%@ page language="java" contentType="text/html; charset=utf-8"
 %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>fourth.jsp 页面</h1>
<hr>
</body>
</html>

接下来运行服务器(使用的是TomCat8.0)

访问项目

技术分享

点击第一个链接

技术分享

 

页面没有变化,但是控制台有输出,表示访问过了

我们试着传一个参数过去id=123456

技术分享

不能获取id,说明是浏览器重新发出的一个请求,request已经被销毁,这个是一个新的request

下面放上流程图

技术分享

点击第三个连接

技术分享

页面没有变化,但是地址栏发生变化

我们传一个参数进去

技术分享

有了,可以显示id,说明是同一个request

下面放上流程图

技术分享

因为forward是服务器内部跳转,会带着request一起到下一个页面,所以id可以获得

接着点击第五条链接

技术分享

页面发生变化,同时包含了,third.jsp和fourth.jsp的内容

我们传一个参数

技术分享

可以获得request

下面是流程图

技术分享

本人知识有限,如有错误,望指出

此文系原创,转载请声明出处。

关于java中sendRedirect,forward和include区别

标签:

原文地址:http://www.cnblogs.com/sean1009/p/5351660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!