JSP/Servlet編程中response.sendRedirect方法就是使用HTTP協議中的重定向機制。它與JSP中的<jsp:forward …>的區別在於後者是在服務器中實現頁面的跳轉,也就是說應用容器加載了所要跳轉的頁面的內容並返回給客戶端;而前者是返回一個狀態碼,這些狀態碼的可能值見下表,而後客戶端讀取須要跳轉到的頁面的URL並從新加載新的頁面。就是這樣一個過程,因此咱們編程的時候就要經過HttpMethod.getStatusCode()方法判斷返回值是否爲下表中的某個值來判斷是否須要跳轉。若是已經確認須要進行頁面跳轉了,那麼能夠經過讀取HTTP頭中的location屬性來獲取新的地址。算法
狀態碼
對應 HttpServletResponse 的常量
詳細描述
301
SC_MOVED_PERMANENTLY
頁面已經永久移到另一個新地址
302
SC_MOVED_TEMPORARILY
頁面暫時移動到另一個新的地址
303
SC_SEE_OTHER
客戶端請求的地址必須經過另外的 URL 來訪問
307
SC_TEMPORARY_REDIRECT
同 SC_MOVED_TEMPORARILY編程
301的含義是「永久重定向」,而302的含義是「臨時重定向」
301 表明永久性轉移是網頁更改地址後對搜索引擎友好的最好方法,只要不是暫時搬移的狀況,都建議使用301來作轉址。服務器
因爲搜索引擎排名算法只是程序而不是人,在遇到302重定向的時候,並不能像人同樣的去準確斷定哪個網址更適當,這就形成了網址URL劫持的可能性。也就是說,一個不道德的人在他本身的網址A作一個302重定向到你的網址B,出於某種緣由, Google搜索結果所顯示的仍然是網址A,可是所用的網頁內容倒是你的網址B上的內容,這種狀況就叫作網址URL劫持。你辛辛苦苦所寫的內容就這樣被別人偷走了。jsp