淺談JSP的Forward及sendRedirect方法

來源:互聯網
上載者:User

Response.sendRedirect是兩個不同的request,是在用戶端跳轉,瀏覽器顯示的是跳轉後的頁面的名字。因為它是從用戶端跳轉到第二個頁面的。

javascript:return big(this)" alt="流程圖" src="/data/attachment/portal/et2/201207/ET34910080648491.jpg">

使用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=http://developer.51cto.com/art/200907/"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 

 
  1. <%request.setAttribute("river","redwater");   
  2.     request.setAttribute("country","daguaiwan");   
  3. %>   
  4. <jsp:forward page="/tiane" />   
  5.  
  6. servletbama.jsp      
  7. <%request.setAttribute("river","redwater");   
  8.     request.setAttribute("country","daguaiwan");   
  9.     response.sendRedirect("/ForwardRedirect/tiane");   
  10. %>  

Tiane.java

 
  1. public class Tiane extends HttpServlet {   
  2.  
  3.   public void doGet(HttpServletRequest request, HttpServletResponse response)   
  4.       throws ServletException, IOException {   
  5. //    response.sendRedirect("/ForwardRedirect/fengshan.jsp");   
  6.     this.getServletConfig().getServletContext()   
  7.             .getRequestDispatcher("/fengshan.jsp").forward(request, response);   
  8.   }   
  9.  
  10.   public void doPost(HttpServletRequest request, HttpServletResponse response)   
  11.       throws ServletException, IOException {   
  12.     doGet(request, response);   
  13.   }      
  14. }  

再在web.xml中配置servlet:  

 
  1. <servlet>   
  2.   <servlet-name>tiane</servlet-name>   
  3.   <servlet-class>com.dvnchina.test.Tiane</servlet-class>   
  4.   </servlet>   
  5.   <servlet-mapping>   
  6.   <servlet-name>tiane</servlet-name>   
  7.   <url-pattern>/tiane</url-pattern>   
  8. </servlet-mapping> 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.