首先我們要明白用response.sendRedirect做轉(zhuǎn)向的原理,它其實(shí)是向?yàn)g覽器發(fā)送一個(gè)特殊的Header, 然后由瀏覽器來(lái)做轉(zhuǎn)向,轉(zhuǎn)到指定的頁(yè)面,所以用sendRedirect時(shí),瀏覽器的地址欄上可以看到地址的變化。 用則不同,它是直接在server做的,瀏覽器并不知道,也不和瀏覽器打交道, 這從瀏覽器的地址并不變化可以看出。 所以使用response.sendRedirect時(shí)就需要注意以下兩點(diǎn): 1,在使用response.sendRedirect時(shí),前面不能有HTML輸出。 這并不是絕對(duì)的,不能有HTML輸出其實(shí)是指不能有HTML被送到了瀏覽器。事實(shí)上現(xiàn)在的server都有cache機(jī)制 ,一般在8K(我是說(shuō)JSP SERVER),這就意味著,除非你關(guān)閉了cache, 或者你使用了out.flush()強(qiáng)制刷新,那么在使用sendRedirect之前, 有少量的 HTML輸出也是允許的。 如果報(bào)錯(cuò)說(shuō),“一些信息已經(jīng)被submitted”(原文忘了),那么,你就要注意看了,前面是不是有過(guò)多的HTML輸出了。 2,在response.sendRedirect之后,應(yīng)該緊跟一句return; 我們已經(jīng)知道response.sendRedirect是通過(guò)瀏覽器來(lái)做轉(zhuǎn)向的,所以只有在頁(yè)面處理完成后, 才會(huì)有實(shí)際的動(dòng)作。既然你已經(jīng)要做轉(zhuǎn)向了,那么后的輸出還有什么意義呢?而且有可能會(huì)因?yàn)楹竺娴妮敵鰧?dǎo)致轉(zhuǎn)向失敗。 |