賽迪網 > IT技術 Java > 技術動態
  IT資訊搜索
 
IT產品搜索
[程式開發][網管世界][網路安全][數據庫技術]
[作業系統][嘉賓聊天·線上訪談][活動集錦]
[精彩專題][Symantec專區][訂閱IT技術週刊]
[開發論壇][網管論壇][安全論壇][數據庫論壇]
[作業系統論壇][Sybase專區][IBM dW技術專區]
[病毒求助][病毒與漏洞播報][文檔·源碼下載]

J2EE:web開發中的緩存問題的研究(一)

發佈時間:2007.09.26 05:05     來源:賽迪網技術社區    作者:baocl

一般情況下,瀏覽器都會緩存已經訪問過的頁面內容,關於如何禁止瀏覽器緩存的介紹,在網上到處都有相關的文章,但是,關於瀏覽器如何利用緩存,如何處理緩存的講解,卻鮮有人談及.我一直為這個問題所困惑,這個問題也是絕大多數有經驗的WEB開發人員所共同面臨的問題,我有些朋友已做過幾十個大大小小的WEB項目,當與他們交流這些問題時,他們雖然也在項目中遇到和解決過這些問題,但由於沒有足夠的時間和精力來仔細思考這些問題的原因和細節,他們對這些問題始終也是一知半解、含糊不清,而目前又很少關於這些問題的專門和詳細講解,我最近用了兩天的時間,把瀏覽器緩存的問題透徹地研究了一翻,主要包括一下方面的細節.

1.如何禁止瀏覽器緩存,這是最簡單的問題,本來羞于在此講解,但是為了完整性,不妨將其列為一個知識點.

2.瀏覽器在訪問已緩存過的資源時,它在什麼情況下會向伺服器發送請求?在什麼情況下根本就不向伺服器發送請求.這與瀏覽器的緩存設置有關!但是,由於幾乎所有人的瀏覽器都是採用的默認設置,所以,重點應該放在分析瀏覽器的默認緩存設置的研究上.

3.當通過其他網頁文檔中的超鏈結來訪問某一個已經緩存過的資源時,瀏覽器是否要向伺服器發出訪問請求?如果不發,則會出現一個問題:當銷售一件商品後再回到商品庫存的顯示頁面時,看到的還將是先前看到的內容,而不是更新的庫存數據。但是,在訪問一個普通的HTML文件時,如果瀏覽器每次都向伺服器發送訪問請求,效率就會相對低下,這就失去了緩存的意義和價值.所以,結論應是瀏覽器訪問動態頁面時不能使用緩存,而訪問靜態頁面時應該使用緩存,但是,僅僅根據被訪問頁面的資源名稱,瀏覽器是無法知道商品庫存的顯示頁面是屬於動態內容,還是屬於靜態內容。瀏覽器是根據什麼方式來判斷它緩存的資源是動態的,還是靜態的呢?在什麼請求下,它會對緩存的資源總是發出新的請求呢?

4.對於緩存的內容,即使瀏覽器向伺服器發送了請求,但伺服器在接收到請求後,可能不會返回內容,而是讓瀏覽器繼續使用緩存的內容,這在實際應用中有什麼好處呢?如何處理其具體細節呢?

5.伺服器端也有緩存,當伺服器接收到瀏覽器的請求後,假設它返迴響應內容,但返回的響應內容可能不是最新的內容,而很可能是一個舊的緩存版本,這又是怎麼回事呢?

所有這些問題,在筆者的《深入體驗java web開發內幕》一書中都有深刻的分析和詳細的實驗步驟.

以下是該書的節選(不包括伺服器端緩存技術的講解,伺服器端緩存技術在其他章節有案例分析)

4.5.8 瀏覽器緩存內幕與getLastModified方法
  在HttpServlet類中定義了一個getLastModified方法,其完整語法定義如下:
      protected long getLastModified(HttpServletRequest req)
  其中的返回值表示自1970年1月1日的0點0分0秒開始計算的一個毫秒數,HttpServlet類中定義的getLastModified方法總是返回一個負數,在HttpServlet子類中可以對這個方法進行覆蓋,以便返回一個代表當前輸出的響應內容的修改時間,HttpServlet類的service方法可以根據這個返回值在響應消息中自動生成Last-Modified頭字段。
  一般情況下,瀏覽器都會緩存已經訪問過的頁面內容,getLastModified方法的返回值可以影響瀏覽器如何處理和利用緩存內容。在詳細了解getLastModified方法的應用之前,應該先對瀏覽器的緩存機制有所了解。單擊IE瀏覽器的“工具”“Internet選項”功能表,打開“Internet選項”對話方塊,接著再單擊“常規”選項卡中的“Internet臨時文件”欄中的“設置”按鈕,打開如圖4.16所示的“設置”對話方塊。


[ 發表評論 ] 字體[  ] [ 列印 ] [ 進入博客 ] [ 進入論壇 ]  [ 推薦給朋友 ]
  相關文章
· J2EE:web開發中的緩存問題的研究(二) (09-25) · resin3 和 jstl1.1的配置問題 (09-25)
· 談源代碼閱讀的必要 (09-25) · JAVA綜合--如何掌握JDK1.5枚舉類型 (09-24)
· JAVA基礎--JAVA中的反射機制詳解 (09-24) · Tomcat5的數據庫連接池配置方法 (09-24)
· 軟體人才從實踐中來,從軟體中來 (09-24) · 明白Java的多線程-線程間的通信 (09-21)
· 煮酒論英雄,漫談Java數據庫存取技術 (09-21) · 通過JDBC連接oracle數據庫的十大技巧 (09-21)
  客戶需求反饋表
* 姓  名:
更多資料  了解方案  認識廠商
* 單位名稱:
* 聯繫電話:
* 電子郵件:
  賽迪推薦  
  手機·資費 ·新品·導購·評測·手機資費·寬帶
手機搜索  諾基亞 N73 MOTO Z6
  IT產品 ·筆記本·臺式機·伺服器·列印·投影
IT產品搜索 
  IT技術 ·開發·網管·安全·數據庫·作業系統
  資訊化 ·熱點·專題·訪談·週刊·方案案例
· 我國軟體行業未來3-5年投資增長將超30%
· 案例分析 eHR自行開發還是選擇成熟產品
· 簽合同前的四問 談八大廠商“雲計算”理念
· 亞略特煙草解決方案 移民安置資訊管理系統
  IT博客 ·曾劍秋·項立剛·Java學習·網管
  IT技術論壇 ·開發·網管·安全·數據庫·系統