所謂瀏覽器緩存,是指當(dāng)?shù)谝淮卧L問網(wǎng)頁(yè)時(shí),瀏覽器會(huì)將這些網(wǎng)頁(yè)緩存到本地,當(dāng)下一次再訪問這些被緩存的網(wǎng)頁(yè)時(shí),瀏覽器就會(huì)直接從本地讀取這些網(wǎng)頁(yè)的內(nèi)容,而無需再?gòu)木W(wǎng)絡(luò)上獲取。
雖然瀏覽器提供的緩存功能可以有效地提高網(wǎng)頁(yè)的裝載速度,但對(duì)于某些需要實(shí)時(shí)更新的網(wǎng)頁(yè),這種緩存機(jī)制就會(huì)影響網(wǎng)頁(yè)的正常顯示。幸好在HTTP響應(yīng)消息頭中提供了三個(gè)字段可以關(guān)閉客戶端瀏覽器的緩存功能。下面三條語句分別使用這三個(gè)字段來關(guān)閉瀏覽器的緩存:
1
2
3
|
response.setDateHeader( "Expires" , 0 ); response.setHeader( "Cache-Control" , "no-cache" ); response.setHeader( "Pragma" , "no-cache" ); |
雖然上面三個(gè)HTTP響應(yīng)消息頭字段都可以關(guān)閉瀏覽器緩存。但并不是所有的瀏覽器都支持這三個(gè)響應(yīng)消息頭字段,因此,最好同時(shí)使用上面這三個(gè)響應(yīng)消息頭字段來關(guān)閉瀏覽器的緩存。
例子 : 禁止瀏覽器緩存當(dāng)前Web頁(yè)面
1. 實(shí)例說明
本程序演示了在未關(guān)閉瀏覽器緩存和關(guān)閉瀏覽器緩存兩種情況下,通過form提交請(qǐng)求消息時(shí)的表現(xiàn)。
2. 編寫Cache類
在Cache類中同時(shí)使用上述的三個(gè)響應(yīng)消息頭字段關(guān)閉了瀏覽器緩存,并向客戶端輸出一段HTML代碼,以測(cè)試關(guān)閉緩存和未關(guān)閉緩存的效果。Cache類的實(shí)現(xiàn)代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class Cache extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType( "text/html;charset=UTF-8" ); String cache = request.getParameter( "cache" ); if (cache != null ) { if (cache.equals( "false" )) { // 關(guān)閉瀏覽器緩存 response.setDateHeader( "Expires" , 0 ); response.setHeader( "Cache-Control" , "no-cache" ); response.setHeader( "Pragma" , "no-cache" ); } } // 定義HTML代碼 String html = "<form id = 'form', action='test' method='post'>" + "姓名:<input type='text' name = 'name'/>" + "<input type='submit' value='提交' />" + "</form>" ; PrintWriter out = response.getWriter(); out.println(html); // 向客戶端輸出HTML代碼 } } |
從上面的代碼可以看出,當(dāng)cache請(qǐng)求參數(shù)值為false時(shí)關(guān)閉瀏覽器的緩存。
3. 配置Cache類
Cache類的配置代碼如下:
1
2
3
4
5
6
7
8
|
<servlet> <servlet-name>Cache</servlet-name> <servlet- class >chapter5.Cache</servlet- class > </servlet> <servlet-mapping> <servlet-name>Cache</servlet-name> <url-pattern>/Cache</url-pattern> </servlet-mapping> |
4. 測(cè)試未關(guān)閉瀏覽器緩存的情況
在瀏覽器地址欄中輸入如下的URL:
http://localhost:8080/demo/Cache?cache=true
在【姓名】文本框中輸入任意字符串,點(diǎn)擊【提交】按鈕,這時(shí)瀏覽器會(huì)顯示一個(gè)異常(這個(gè)異常是由于所提交的test不存在而產(chǎn)生的,我們不用去管它),然后點(diǎn)擊瀏覽器的返回按鈕回到剛才輸入數(shù)據(jù)的頁(yè)面。我們可以看到,剛才輸入的字符串仍然存在。這說明在返回時(shí),瀏覽器并未從服務(wù)端重新獲得這個(gè)頁(yè)面,而是從本地的緩存里重新加載了當(dāng)前的頁(yè)面。
5. 測(cè)試關(guān)閉瀏覽器緩存的情況
在瀏覽器地址欄中輸入如下的URL來關(guān)閉瀏覽器緩存:
http://localhost:8080/demo/Cache?cache=false
按著上一步的方式提交并返回,發(fā)現(xiàn)剛才輸入的數(shù)據(jù)沒有了。這說明在關(guān)閉瀏覽器緩存后,每次返回時(shí),瀏覽器總會(huì)從服務(wù)端重新獲得當(dāng)前頁(yè)面。因此,當(dāng)前頁(yè)面總是保持著初始值。
6. 程序總結(jié)
在關(guān)閉瀏覽器緩存時(shí),為了盡可能保證在大多數(shù)瀏覽器中都有效,我建議同時(shí)使用上述三個(gè)HTTP響應(yīng)消息頭字段來關(guān)閉瀏覽器緩存。
總結(jié)
以上所述是小編給大家介紹的JavaWeb禁止瀏覽器緩存當(dāng)前Web頁(yè)面的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
原文鏈接:https://geekori.com/courseDetails.php?cid=1&fid=105