在設計Web應用程式的時候,經常需要把一個系統進行結構化設計,即按照模塊進行劃分,讓不同的Servlet來實現不同的功能,例如可以讓其中一個Servlet接收用戶的請求,另外一個Servlet來處理用戶的請求。為了實現這種程式的模塊化,就需要保證在不同的Servlet之間可以相互跳轉,而Servle ...
在設計Web應用程式的時候,經常需要把一個系統進行結構化設計,即按照模塊進行劃分,讓不同的Servlet來實現不同的功能,例如可以讓其中一個Servlet接收用戶的請求,另外一個Servlet來處理用戶的請求。為了實現這種程式的模塊化,就需要保證在不同的Servlet之間可以相互跳轉,而Servlet中主要有兩種實現跳轉的方式:forward方式與redirect方式。
forward是伺服器內部的重定向,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,而客戶端並不知道,因此,在客戶端瀏覽器的地址欄中不會顯示轉向後的地址,還是原來的地址。由於在整個定向的過程中用的是同一個request,因此,forward會將request的信息帶到被定向的JSP或Servlet中使用。
redirect則是客戶端重定向,是完全的跳轉,即客戶端瀏覽器會獲取到跳轉後的地址,然後重新發送請求,因此,瀏覽器中會顯示跳轉後的地址。同時由於這種方式比forward方式多了一次網路請求,所以,forward效率更高。需要註意的是,客戶端重定向可以通過設置特定的HTTP頭或者寫JavaScript腳本實現。
鑒於以上區別,一般當forward方式可以滿足需求時,儘可能地使用forward方式。但是在有些情況下,例如,需要跳轉到一個其他伺服器上的資源,則必須使用redirect方式。