CONAN ZONE

          你越掙扎我就越興奮

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            0 Posts :: 282 Stories :: 0 Comments :: 0 Trackbacks

          一、概述

              緩存的思想可以應用在軟件分層的各個層面。它是一種內部機制,對外界而言,是不可感知的。

              數據庫本身有緩存,持久層也可以緩存。(比如:hibernate,還分1級和2級緩存)

              業務層也可以有緩存(但一般來說,這是一個過程域,不會設緩存)。

              表現層/數據服務層(傳統web的表現層)也可以設置緩存(jsp cache 就是這一層,實現在app server上的緩存機制)

              另外Browser也有緩存(如IE)這個大家也都知道(實現在 web server 上的緩存機制)。越上層的緩存效果越好,越底層的緩存影響越深遠。

           二、緩存實現(瀏覽器緩存當前訪問的JSP動態頁面

          (一)、服務端方法:

          1. <%   
          2. response.setHeader("Pragma","No-cache");    
          3. response.setHeader("Cache-Control","no-cache");    
          4. response.setDateHeader("Expires", -10);   
          5. %>  

          (二)、客戶端方法:

          meta是用來在HTML文檔中模擬HTTP協議的響應頭報文。meta 標簽用于網頁的<head>與</head>中,meta 標簽的用處很多。meta 的屬性有兩種:namehttp-equivname屬性主要用于描述網頁,對應于content(網頁內容),以便于搜索引擎機器人查找、分類(目前幾乎所有的搜索引擎都使用網上機器人自動查找meta值來給網頁分類)。這其中最重要的是description(站點在搜索引擎上的描述)和keywords(分類關鍵詞),所以應該給每頁加一個meta值。比較常用的有以下幾個:
          name
          屬性
          1
          、<meta name="Generator" contect="">用以說明生成工具(如Microsoft FrontPage 4.0)等;
          2
          、<meta name="KEYWords" contect="">向搜索引擎說明你的網頁的關鍵詞;
          3
          、<meta name="DEscription" contect="">告訴搜索引擎你的站點的主要內容;
          4、<meta name="Author" contect="你的姓名">告訴搜索引擎你的站點的制作的作者;
          5、<meta name="Robots" contect="all|none|index|noindex|follow|nofollow"

          其中的屬性說明如下:
          設定為all:文件將被檢索,且頁面上的鏈接可以被查詢;
          設定為none:文件將不被檢索,且頁面上的鏈接不可以被查詢;
          設定為index:文件將被檢索;
          設定為follow:頁面上的鏈接可以被查詢;
          設定為noindex:文件將不被檢索,但頁面上的鏈接可以被查詢;
          設定為nofollow:文件將不被檢索,頁面上的鏈接可以被查詢。

          http-equiv
          屬性
          1
          、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"
          meta http-equiv="Content-Language" contect="zh-CN">用以說明主頁制作所使用的文字以及語言;又如英文是ISO-8859-1字符集,還有BIG5utf-8shift-JisEucKoi8-2等字符集;
          2
          、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定時讓網頁在指定的時間n內,跳轉到頁面http;//yourlink
          3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于設定網頁的到期時間,一旦過期則必須到服務器上重新調用。需要注意的是必須使用GMT時間格式;
          4、<meta http-equiv="Pragma" contect="no-cache">是用于設定禁止瀏覽器從本地機的緩存中調閱頁面內容,設定后一旦離開網頁就無法從Cache中再調出;
          5
          、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT"cookie設定,如果網頁過期,存盤的cookie將被刪除。需要注意的也是必須使用GMT時間格式;
          6
          、<meta http-equiv="Pics-label" contect="">網頁等級評定,在IEinternet選項中有一項內容設置,可以防止瀏覽一些受限制的網站,而網站的限制級別就是通過meta屬性來設置的;
          7
          、<meta http-equiv="windows-Target" contect="_top">強制頁面在當前窗口中以獨立頁面顯示,可以防止自己的網頁被別人當作一個frame頁調用;
          8、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<meta http-equiv="Page-Exit" contect="revealTrans(duration=20transtion =6)">設定進入和離開頁面時的特殊效果,這個功能即FrontPage中的格式/網頁過渡,不過所加的頁面不能夠是一個frame頁面。

            三、緩存應用

          (一)、防止JSP頁面緩存為了防止瀏覽器緩存當前訪問的JSP動態頁面,可以采用如下的方式進行設置:
          <%
          // 將過期日期設置為一個過去時間

          response.setHeader("Expires", "Sat, 6 May 199512:00:00 GMT");

          // 設置 HTTP/1.1 no-cache 頭
          response.setHeader("Cache-Control", "no-store,no-cache,must-revalidate");

          // 設置 IE 擴展 HTTP/1.1 no-cache headers, 用戶自己添加
          response.addHeader("Cache-Control", "post-check=0, pre-check=0");

          // 設置標準 HTTP/1.0 no-cache header.
          response.setHeader("Pragma", "no-cache");
          %>

          當然,每一個頁面都包含這些代碼會很繁瑣,可以通過自定義過濾器(Filter)的方法來處理相關的頁面  

          二)、jsp,html 清除頁面緩存

          1.禁止客戶端緩存要在<head>中加入類似如下內容:

          <META HTTP-EQUIV="pragma" CONTENT="no-cache">
          <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
          <META HTTP-EQUIV="expires" CONTENT="
          Wed, 26 Feb 199708:21:57 GMT">

             <meta http-equiv="pragma" content="no-cache">
               <meta http-equiv="cache-control" content="no-cache">
               <meta http-equiv="expires" content="0">   

          2.在服務器的動態網頁中禁止緩存,要加入類似如下腳本

          response.setHeader("Pragma","No-cache");
          response.setHeader("Cache-Control","no-cache");
          response.setDateHeader("Expires", 0); 
           

          (三)設置有限時間的緩存

              int minutes = 10;

              Date d = new Date();

              String modDate = d.toGMTString();

              String expDate = null;

              expDate = (new Date(d.getTime() + minutes * 60000)).toGMTString();

              response.setHeader("Last-Modified", modDate);

              response.setHeader("Expires", expDate);

              response.setHeader("Cache-Control", "public"); //   HTTP/1.1

              response.setHeader("Pragma", "Pragma"); //   HTTP/1.0  

          補充:關于.jsp cache的幾條建議:

          1.jsp cache最好做在過濾器上,把需要緩沖的頁面集中在同一個目錄下,每次更改只須更改web.xml就可以完成緩沖設置,這樣比較方便.

          2.Gzip壓縮可以將頁面壓縮得很小,平均壓縮比為1/3,jsp cacheHashMap緩沖壓縮后的頁面,肯定比沒壓縮前更節約內存消耗,并且效率更高.關于Gzip可以參考這個開源項目:http://sourceforge.net/projects/pjl-comp-filter 

          posted on 2010-03-09 16:20 CONAN 閱讀(2674) 評論(0)  編輯  收藏 所屬分類: HTML/CSSJ2EE
          主站蜘蛛池模板: 许昌县| 浦东新区| 保山市| 宝坻区| 陕西省| 名山县| 乐清市| 南城县| 惠水县| 邢台县| 达拉特旗| 鹤壁市| 嵩明县| 巫溪县| 陇南市| 万荣县| 阳城县| 鹿泉市| 华池县| 黔江区| 龙海市| 靖宇县| 库车县| 京山县| 扶余县| 泸西县| 荣成市| 松桃| 留坝县| 黎川县| 九龙城区| 扶沟县| 香格里拉县| 凌云县| 延边| 屏南县| 长葛市| 桂林市| 图木舒克市| 忻州市| 南开区|