關于servlet的緩存問題
今天,在用Servlet做注銷控制時,遇到一個很奇怪的問題,就是該Servlet不能正常注銷登陸。經過測試發現,該servlet根本就沒有被訪問。開始還以為是web.xml的配置問題,或是我tomcat的配置問題,導致它沒有指向正確的Servlet。可無論如何修改配置,都無濟于事。
在朋友提醒下,可能是緩存的問題,但是如果是緩存問題,為什么只有這個Servlet有這個問題,而其他的沒有呢?抱著試一試的態度,我在跳轉到該URL里加入了一個隨機參數,這次該Servlet可以正常注銷了。問題雖然解決了,可原因卻還沒找到。
為了測試Servlet究竟會在什么情況下存在緩存問題,我開始做測試。首先新建一個Servlet,然后在它的doGet方法里,添加打印隨機值的語句。結果每次運行,它都能輸出不同的值,并沒有緩存問題。我就猜想,會不會是訪問方式的問題,我每次測試都是在地址欄直接輸入然后敲回車的,這其實已經帶著刷新的效果了。于是我又新建了一個頁面,用一個超鏈指向該頁面。重新測試,發現仍然每次輸出。
問題到這一步似乎僵住了,然后認真分析出問題的servlet與測試所用的Servlet有什么不同。突然想起,出問題的Servlet并不輸出頁面,而是會跳轉到一個靜態的html頁面。會不會是瀏覽器因為它返回來的是一個靜態頁面,瀏覽器認為沒必要去訪問服務器,所以才緩存的呢?再次嘗試,將測試Servlet改為跳轉到另一個html的頁面的功能。測試,這次問題出現了,在大部分情況下,都沒有再輸出隨機值,說明服務端的Servlet并沒有被訪問。同時嘗試讓它跳轉到一個jsp頁面,發現如此的話,該Servlet仍然會被每次訪問。看來,緩存問題主要還是出現于Servlet向普通的html頁面跳轉中。
問題解決了,原因也差不多搞明白了,這里還剩下最后一個問題。就是在測試Servlet中,緩存問題值存在于第二次以后,但問題Servlet的緩存問題在第一次訪問也存在。另外測試Servlet的訪問次數也要多與問題Servlet。這個問題留待以后再去想明白吧。