屬于同一個Web應用程序的JSP或Servlet可以使用javax.servlet.RequestDispatcher接口的forward方法和include方法來共享數據。
§RequestDispatcher rd=request.getRequestDispatcher(String path):取得一個相對于當前路徑的請求轉發器,以便于請求轉發。
§void forward(ServletRequest request, ServletResponse response):用于將一個請求從一個JSP或servlet轉發到同一服務器上的另一個JSP或servlet。
§void include ():用于包括另一個Servlet的內容。
1、利用forward()方法作轉發控制 (包括請求頁面a0.jsp、接受請求的頁面a1.jsp和轉發到頁面a2.sjp)
a0.jsp的code如下:
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
請求參數輸入頁面
</title>
</head>
<body bgcolor="#ffffff">
<h1>
請求參數輸入頁面
</h1>
<form action="a0.jsp" method="POST">
<table border="1">
<tr>
<td>用戶名:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td>性別:</td>
<td>
<input type="radio" name="sex" value="男"/>男
<input type="radio" name="sex" value="女"/>女
</td>
</tr>
<tr>
<td>興趣愛好:</td>
<td>
<input type="checkbox" name="interest" value="上網"/>上網
<input type="checkbox" name="interest" value="旅游"/>旅游
<input type="checkbox" name="interest" value="閱讀"/>閱讀
</td>
</tr>
</table>
<input type="submit" name="submit" value="提交"/>
</form>
</body>
</html>
a1.jsp的code如下:
<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>接收請求參數</title>
</head>
<body bgcolor="#ffffff">
<h1>接收客戶端請求數據</h1>
<%
request.setCharacterEncoding("GBK");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String[] interest = request.getParameterValues("interest");
%>
<table border="1">
<tr>
<td>用戶名:</td>
<td><%=name%></td>
</tr>
<tr>
<td>性別:</td>
<td><%=sex%></td>
</tr>
<tr>
<td>興趣愛好:</td>
<td>
<%
for (int i = 0; i < interest.length; i++) {
out.print(interest[i]);
out.print(",");
}
%>
</td>
</tr>
</table>
<%
RequestDispatcher rd=request.getRequestDispatcher("ra3.jsp");
rd.forward(request,response);
%>
</body>
</html>
a2.jsp的code如下:
<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
dispatcher轉發結果顯示頁面
</title>
</head>
<body bgcolor="#ffffff">
<h1>
dispatcher轉發結果顯示頁面
</h1>
name參數的值是:<%=request.getParameter("name")%>
</body>
</html>
2、利用include()方法實現轉發控制 (包括請求頁面a0.jsp、接受請求的頁面a1.jsp和轉發到頁面a2.sjp)
a0.jsp與a2.jsp同forward()方法轉發,a1.jsp的code如下:
<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>接收請求參數</title>
</head>
<body bgcolor="#ffffff">
<h1>接收客戶端請求數據</h1>
<%
request.setCharacterEncoding("GBK");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String[] interest = request.getParameterValues("interest");
%>
<table border="1">
<tr>
<td>用戶名:</td>
<td><%=name%></td>
</tr>
<tr>
<td>性別:</td>
<td><%=sex%></td>
</tr>
<tr>
<td>興趣愛好:</td>
<td>
<%
for (int i = 0; i < interest.length; i++) {
out.print(interest[i]);
out.print(",");
}
%>
</td>
</tr>
</table>
<%
out.flush();//不影響
RequestDispatcher rd = request.getRequestDispatcher("ra3.jsp");
rd.include(request, response);
out.println("我又回來了~~");
%>
</body>
</html>
注意:調用forward()方法后,原先存放在HttpResponse對象中的內容將會被自動清除,再回應被發送到客戶端之前才能調用forward()方法。如在out.flush()與out.close()之后使用,當無效。forward()方法與include方法非常類似,前者只顯示被轉發到的顯面,后者將兩個頁面的內容合并在一起顯示,并回到轉發前的頁面。
§RequestDispatcher rd=request.getRequestDispatcher(String path):取得一個相對于當前路徑的請求轉發器,以便于請求轉發。
§void forward(ServletRequest request, ServletResponse response):用于將一個請求從一個JSP或servlet轉發到同一服務器上的另一個JSP或servlet。
§void include ():用于包括另一個Servlet的內容。
1、利用forward()方法作轉發控制 (包括請求頁面a0.jsp、接受請求的頁面a1.jsp和轉發到頁面a2.sjp)
a0.jsp的code如下:



























































































2、利用include()方法實現轉發控制 (包括請求頁面a0.jsp、接受請求的頁面a1.jsp和轉發到頁面a2.sjp)
a0.jsp與a2.jsp同forward()方法轉發,a1.jsp的code如下:






































out.println("我又回來了~~");



3、requestDispatcher.forward()和response.sendRedirect()兩者的區別是什么,平時如何在程序開發中如
何使用?
答:requestDispatcher.forward()是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后
的地址;而response.sendRedirect()則是完全的跳轉,瀏覽器會得到跳轉的地址,并重新發送請求鏈接
。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。前者更加高效,在前者可以滿足需要時,晝使
用它。