sendredirect,forward,include區別

來源:互聯網
上載者:User

首先,sendRedirect與forward,include的最大區別是request,response..
sendRedirect產生新的請求與響應,前後已沒有聯絡.
相當於在頁面中重新輸入一個URL,只是自動完成而已.
forward,include是共用同一請求.用戶端完全不知道(瀏覽器中的URL不變)

使用方式:
servlet和jsp裡面一樣

Java代碼
  1. response.sendRedirect();   
response.sendRedirect(); 

其次,forward與include的區別.
調用forward()方法時必須注意下列兩點:
在HTTP回應被“確認”(committed)以前才能調用forward()方法(這裡的“確認”是指將HTTP回應的內容主體送回使用者端),否則將拋出IllegalStateException異常。[include沒有這種情況]

調用forward()方法後,原先存放在HttpResponse對象中的內容將會自動被清除(也就是在forward方法前,使用PrintWriter,ServletOutputStream輸出的內容都被忽略)

[include不會]

使用方式
Servlet中 Java代碼

  1. getServletContext().getRequestDispatcher(path).include(request,response);   
  2. getServletContext().getRequestDispatcher(path).forward(request,response);  
getServletContext().getRequestDispatcher(path).include(request,response); getServletContext().getRequestDispatcher(path).forward(request,response); 

這裡面的path必須以"/",相對於當前WEB應用程式根目錄 Java代碼

  1. request.getRequestDispatcher(path).include(request,response);   
  2. request.getRequestDispatcher(path).forward(request,response);  
request.getRequestDispatcher(path).include(request,response); request.getRequestDispatcher(path).forward(request,response); 

這裡面的path可以是以"/"開頭,也可以使用相對路徑.

在JSP中 Java代碼

  1. <jsp:include page=""/>   
  2. <jsp:forward page=""/>  
<jsp:include page=""/> <jsp:forward page=""/> 

forward在SERVLET與JSP中表現不一致:servlet中:運行forward方法,後面的語句會執行完,再去執行forward方法 (符合JAVA程式運行順序)

在jsp中,運行到forward後,直接跳轉,後面的語句不再執行.

兩者的區別:
forward方法是把請求的內容轉寄到另外的一個servlet/jsp.
include是把另一個servlet/jsp處理過後的內容拿過來與此時servlet的內容一同輸出.

----------------------------------------------------------
forward與include還有一個重要的區別:
forward在調用者程式中設定的響應狀態代碼和回應標頭不會被忽略,在被調用者程式中設定的響應狀態代碼和回應標頭也不會被忽略.
include會被忽略..
這也是亂碼的一個原因..
使用include時候,要要調用程式中寫上response.setContentType("text/html;charset=utf-8")
不管你是不是用filter統一處理過字元.

===================================================================
總結下:
sendRedirect與include,forward的區別在於是不是同一個request
include與forward的區別在於輸出內容,以及回應標頭!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.