2010年12月7日 星期二

[轉載] 使用response.sendRedirect的注意事項

首先我們要明白用response.sendRedirect做轉向的原理
它其實是向瀏覽器發送一個特殊的Header,然後由瀏覽器來做轉向,轉到指定的頁面
所以用sendRedirect時,瀏覽器的地址欄上可以看到地址的變化
用<jsp:forward page=""/>則不同,它是直接在server做的
瀏覽器並不知道,也不和瀏覽器打交道,這從瀏覽器的地址並不變化可以看出。
所以使用response.sendRedirect時就需要注意以下兩點:

1,在使用response.sendRedirect時,前面不能有HTML輸出
這並不是絕對的,不能有HTML輸出其實是指不能有HTML被送到了瀏覽器
事實上現在的server都有cache機制,一般在8K(我是說JSP SERVER)
這就意味著,除非你關閉了cache,或者你使用了out.flush()強制刷新
那麼在使用sendRedirect之前,有少量的 HTML輸出也是允許的
如果報錯說,「一些信息已經被submitted」(原文忘了)
那麼,你就要注意看了,前面是不是有過多的HTML輸出了

2,在response.sendRedirect之後,應該緊跟一句return;
我們已經知道response.sendRedirect是通過瀏覽器來做轉向的
所以只有在頁面處理完成後,才會有實際的動作
既然你已經要做轉向了,那麼後的輸出還有什麼意義呢?
而且有可能會因為後面的輸出導致轉向失敗

沒有留言:

張貼留言