最近自己在做專案時遇到乙個問題,明明加了response.sendredirect() ,系統也執行了,但是它就是不跳轉;最後在網上找到原因如下:
首先我們要知道的是用response.sendredirect做轉向的原理,它其實是向瀏覽器傳送乙個特殊的header,然後由瀏覽器來做轉向,轉到指定的頁面,所以sendredirect時,瀏覽器的位址列上可以看到位址的變化。 而用則不同,它是直接在server做的,瀏覽器並不知道,也不和瀏覽器打交道,這從瀏覽器的位址並不變化可以看出。
所以使用response.sendredirect時就需要注意以下兩點:
1、在使用response.sendredirect時,前面不能有html輸出。
這並不是絕對的,不能有html輸出其實是指不能有html被送到了瀏覽器。事實上現在的server都有cache機制,一般在8k(我是說jsp server),這就意味著,除非你關閉了cache,或者你使用了out.flush()強制重新整理,那麼在使用sendredirect之前,有少量的html輸出也是允許的。
如下圖所示,必須在jsp語句之後才能引入,否則就會出現錯誤!
2、在response.sendredirect之後,應該緊跟一句return;
我們已經知道response.sendredirect是通過瀏覽器來做轉向的,所以只有在頁面處理完成後,才會有實際的動作。既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?而且有可能會因為後面的輸出導致轉向失敗。
jsp中還有的跳轉語句包括:request.getrequestdispatcher(「」);
request.getrequestdispatcher().forward(request.response)這個語句意思是將客戶端的請求轉向(forward)到getrequestdispatcher()方法中引數定義的頁面或者鏈結。
說通俗點就是,當乙個客戶端的請求到這個頁面後,不做處理或者不處理完,將請求轉給另乙個頁面處理,然後再響應給客戶端。
而這兩種跳轉方法的區別就在於:
getrequestdispatcher是伺服器內部跳轉,位址列資訊不變,只能跳轉到web應用內的網頁。
sendredirect是頁面重定向,位址列資訊改變,可以跳轉到任意網頁。
jsp下頁面跳轉的幾種方法小結
1.requestdispatcher.forward 在伺服器端起作用,當使用forward 時,servlet engine傳遞http請求從當前的servlet或者是jsp到另外的乙個servlet jsp 或普通html檔案,也即你的form提交至a.jsp,在a.jsp用到了forward...
jsp下頁面跳轉的幾種方法小結
1.requestdispatcher.forward 在伺服器端起作用,當使用forward 時,servlet engine傳遞http請求從當前的servlet或者是jsp到另外的乙個servlet jsp 或普通html檔案,也即你的form提交至a.jsp,在a.jsp用到了forward...
頁面跳轉的幾種方法
href assgin跳轉到另乙個頁面可以返回到原來的頁面 location.href location.assign 注意 replace跳轉到另乙個頁面之後不可以返回原來的頁面 location.replace 用乙個新的位址去替換當前的位址,所以不能返回之前的頁面history是載入歷史列表中...