浅谈JSP的Forward及sendRedirect方法

·        
浅谈JSP的Forward及sendRedirect方法 
 

使用同一个request,是在服务器端跳转,浏览器显示的是第一个页面的名字,因为客户端(浏览器)不知道它在服务器端跳转了。本文将为大家讲解JSPforwardsendRedirect方法。

Response.sendRedirect是两个不同的request,是在客户端跳转,浏览器显示的是跳转后的页面的名字。因为它是从客户端跳转到第二个页面的。 
使用forward时,由于只是发送一次request请求,request设置的属性(setAttribute)依然能保留在下一个页面。 

使用sendRedirect时,由于发送两次request请求,所以在下一个不能获取request属性。但可以通过重写URL的方式

内容传递过去。 

下面举例说明:
 
tian.jsp    
<%request.setAttribute(
"river","redwater"); 
     request.setAttribute(
"country","daguaiwan"); 
%> 
 
<jsp:forward
page=
"fengshan.jsp" />  
 
 
donglan.jsp    
 
<%request.setAttribute(
"river","redwater"); 

     request.setAttribute(
"country","daguaiwan"); 
%> 
<a
href=
"fengshan.jsp">fengshan</a>  
 
bama.jsp    
<%request.setAttribute(
"river","redwater"); 
     request.setAttribute(
"country","daguaiwan"); 
     response.sendRedirect(
"fengshan.jsp"); 
%> 
 
 
fengshan.jsp 
<%=request.getAttribute(
"river")%><br/> 
<%=request.getAttribute(
"country")%>  
 1.  http://localhost:8080/ForwardRedirect/tiane.jsp 跳转后结果为:   

2.  redwater 

3.  daguaiwan   

4.     

5.  http://localhost:8080/ForwardRedirect/donglan.jsp 跳转后结果为:   

6.  null  

7.  null  

8.

9.  http://localhost:8080/ForwardRedirect/bama.jsp 跳转后结果为: 

10. null  

11. null 

结果分析: tiane.jsp是通过forward跳转到fengshan.jsp的,这两个页面享用的是同一个request,故fengshan.jsp可以接收到tiane.jsp通过 request设置的属性。而donglan.jsp是通过href发送了另外的request请求,bama.jsp是通过sendRedirect跳转,用的也是另外的request请求,故fengshan.jsp不可以接收到这两个页面通过 request设置的属性。 Jsp和Servlet之间的跳转:从Jsp跳转Servlet可以使用或者response.sendRedirect(URL)都可以,它们之间的区别上面已经说明了。
从Servlet跳转Jsp:
getRequestDispatcher的forward(request, response)方法,这里也只是发送了一次请求,可以在下一个页面接受request设置的属性。 ² response.sendRedirect(URL),这里发送了两次请求,不可以在下一个页面接受request设置的属性。
 
  例子如下: servlettiane.jsp   

12. <%request.setAttribute("river","redwater"); 

13.     request.setAttribute("country","daguaiwan"); 

14. %> 
15. <jsp:forward page="/tiane" />    
16.  

17. servletbama.jsp    
18. <%request.setAttribute("river","redwater"); 
19.     request.setAttribute("country","daguaiwan"); 

20.     response.sendRedirect("/ForwardRedirect/tiane"); 
21. %>   
 

Tiane.java

22. public class Tiane extends HttpServlet { 

23.  

24.   public void doGet(HttpServletRequest request, HttpServletResponse response) 
  
 
25.       throws ServletException, IOException { 
26. //    response.sendRedirect("/ForwardRedirect/fengshan.jsp"); 
27.     this.getServletConfig().getServletContext() 
28.             .getRequestDispatcher("/fengshan.jsp").forward(request, response); 
29.   }  

30.   
31.   public void doPost(HttpServletRequest request, HttpServletResponse response) 
32.       throws ServletException, IOException { 
33.     doGet(request, response); 
34.   }       
35. }  

再在web.xml中配置servlet:   
36. <servlet>      
37.    <servlet-name> tiane </servlet-name>      
38.    <servlet-class> com.dvnchina.test.Tiane </servlet-class>      
39.    </servlet>      
40.    <servlet-mapping>      
41.    <servlet-name> tiane </servlet-name>      
42.    <url-pattern> /tiane </url-pattern>      
43. </servlet-mapping>     
 

具体的结果我就不分析了,和第一个例子差不多的。



转载于:https://my.oschina.net/zichen/blog/103982

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值