属于同一个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如下:
2、利用include()方法实现转发控制 (包括请求页面a0.jsp、接受请求的页面a1.jsp和转发到页面a2.sjp)
a0.jsp与a2.jsp同forward()方法转发,a1.jsp的code如下:
§ 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如下:
< 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 >
<%
@ 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如下:
< 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 >
<%
@ page contentType="text/html; charset=GBK"
%>
< html >
< head >
< title >
dispatcher转发结果显示页面
</ title >
</ head >
< body bgcolor ="#ffffff" >
< h1 >
dispatcher转发结果显示页面
</ h1 >
name参数的值是: <% = request.getParameter( " name " ) %>
</ body >
</ html >
< 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方法非常类似,前者只显示被转发到的显面,后者将两个页面的内容合并在一起显示,并回到转发前的页面。
< 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 >
3、requestDispatcher.forward()和response.sendRedirect()两者的区别是什么,平时如何在程序开发中如
何使用?
答:requestDispatcher.forward()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后
的地址;而response.sendRedirect()则是完全的跳转,浏览器会得到跳转的地址,并重新发送请求链接
。这样,从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,昼使
用它。