<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blog.Toby

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評(píng)論 :: 0 Trackbacks

     

    一、緩存整個(gè)頁面
            在OSCache組件中提供了一個(gè)CacheFilter用于實(shí)現(xiàn)頁面級(jí)的緩存,主要用于對(duì)web應(yīng)用中的某些動(dòng)態(tài)頁面進(jìn)行緩存,尤其是那些需要生成PDF格式文件/報(bào)表、圖片文件等的頁面,不僅減少了數(shù)據(jù)庫的交互、減少數(shù)據(jù)庫服務(wù)器的壓力,而且對(duì)于減少web服務(wù)器的性能消耗有很顯著的效果。
    這種功能的實(shí)現(xiàn)是通過在web.xml中進(jìn)行配置來決定緩存哪一個(gè)或者一組頁面,而且還可以設(shè)置緩存的相關(guān)屬性,這種基于配置文件的實(shí)現(xiàn)方式對(duì)于J2EE來說應(yīng)該是一種標(biāo)準(zhǔn)的實(shí)現(xiàn)方式了。
    [注] 只有客戶訪問時(shí)返回http頭信息中代碼為200(也就是訪問已經(jīng)成功)的頁面信息才能夠被緩存。

            修改web.xml,增加如下內(nèi)容,確定對(duì)/testContent.jsp頁面進(jìn)行緩存。

    <filter>

          <filter-name>CacheFilter</filter-name>

    <filter-class>com.opensymphony.oscache.web.filter.CacheFilter</filter-class>

            <init-param>

             <param-name>time</param-name>

             <param-value>600</param-value>

          </init-param>

          <init-param>

             <param-name>scope</param-name>

             <param-value>session</param-value>

          </init-param>

    </filter>

    <filter-mapping>

    <filter-name>CacheFilter</filter-name>

    <!-對(duì)所有jsp頁面內(nèi)容進(jìn)行緩存-->

    <url-pattern>*.jsp</url-pattern>

    </filter-mapping>


            在頁面級(jí)緩存的情況下,可以通過設(shè)置CacheFilter的初始屬性來決定緩存的一些特性:time屬性設(shè)置緩存的時(shí)間段,默認(rèn)為3600秒,可以根據(jù)自己的需要只有的設(shè)置,而scope屬性設(shè)置,默認(rèn)為application,可選項(xiàng)包括application、session。

    二、緩存頁面的部分
    1、OSCache標(biāo)簽庫配置
    (1) 從src\webapp\WEB-INF\classes或etc目錄取得soscache.tld文件,放在CLASSPATH下(src根目錄或發(fā)布環(huán)境的/WEB-INF/classes  目錄)。該文件定義了OSCache的定義。
    (2) 將下列代碼加入web.xml文件中:

    <taglib>
    <taglib-uri>oscache</taglib-uri>
    <taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>
    </taglib>


    2、cache標(biāo)簽

            這是OSCache提供的標(biāo)簽庫中最重要的一個(gè)標(biāo)簽,包括在標(biāo)簽中的內(nèi)容將應(yīng)用緩存機(jī)制進(jìn)行處理,處理的方式將取決于編程者對(duì)cache標(biāo)簽屬性的設(shè)置。
            第一次請(qǐng)求到達(dá)時(shí),標(biāo)簽中的內(nèi)容被處理并且緩存起來,當(dāng)下一個(gè)請(qǐng)求到達(dá)時(shí),緩存系統(tǒng)會(huì)檢查這部分內(nèi)容的緩存是否已經(jīng)失效,主要是以下幾項(xiàng):
            (1)緩存時(shí)間超過了cache標(biāo)簽設(shè)置的time或者duration屬性規(guī)定的超時(shí)時(shí)間
            (2)cron屬性規(guī)定的時(shí)間比緩存信息的開始時(shí)間更晚
            (3)標(biāo)簽中緩存的內(nèi)容在緩存后又被重新刷新過
            (4)其他緩存超期設(shè)定
            如果符合上面四項(xiàng)中的任何一項(xiàng),被緩存的內(nèi)容視為已經(jīng)失效,這時(shí)被緩存的內(nèi)容將被重新處理并且返回處理過后的信息,如果被緩存的內(nèi)容沒有失效,那么返回給用戶的將是緩存中的信息。
            cache標(biāo)簽的常用屬性說明:

    key

    標(biāo)識(shí)緩存內(nèi)容的關(guān)鍵詞。在指定的作用范圍內(nèi)必須是唯一的。默認(rèn)的key是被訪問頁面的URI和后面的請(qǐng)求字符串。可以在同一個(gè)頁面中使用很多cache標(biāo)簽而不指定他的key屬性,這種情況下系統(tǒng)使用該頁面的URI和后面的請(qǐng)求字符串,另外再自動(dòng)給這些key增加一個(gè)索引值來區(qū)分這些緩存內(nèi)容。但是不推薦采用這樣的方式。

    scope

    緩存發(fā)生作用的范圍,可以是application或者session。默認(rèn)為application

    time

    緩存內(nèi)容的時(shí)間段,單位是秒,默認(rèn)是3600秒,也就是一個(gè)小時(shí),如果設(shè)定一個(gè)負(fù)值,那么這部分被緩存的內(nèi)容將永遠(yuǎn)不過期。

    duration

    指定緩存內(nèi)容失效的時(shí)間,是相對(duì)time的另一個(gè)選擇,可以使用簡(jiǎn)單日期格式或者符合USO-8601的日期格式。如:duration='PT5M' duration='5s'

    cron

    指定緩存內(nèi)容失效表達(dá)式,見“Cron表達(dá)式基本語法”。

    refresh

    false 或者true。如果refresh屬性設(shè)置為true,不管其他的屬性是否符合條件,這部分被緩存的內(nèi)容都將被更新,這給編程者一種選擇,決定什么時(shí)候必須刷新。

    mode

    如果不希望被緩存的內(nèi)容增加到給用戶的響應(yīng)中,可以設(shè)置mode屬性為"silent"。此時(shí)被緩存的部分不在頁面上顯示,而其它任意的mode屬性值都會(huì)將緩存的部分顯示到頁面上。

    groups

    指定當(dāng)前cache標(biāo)簽所屬的組,可使用“,”分割組名。這樣就可以對(duì)緩存項(xiàng)進(jìn)行分組了。如果緩存項(xiàng)依賴于應(yīng)用的其它部分或其它數(shù)據(jù),分組就有了用武之地——當(dāng)這種依賴改變時(shí)(刷新相關(guān)的組),這個(gè)組的所有緩存項(xiàng)都將過期。

    language

    使用ISO-639定義的語言碼來發(fā)布不同的緩存內(nèi)容(under an otherwise identical key)。要在一個(gè)多語言網(wǎng)站上同一段JSP代碼不同用戶的參數(shù)提供不同的語言時(shí),這個(gè)屬性會(huì)很有用。

    refreshpolicyclass

    指定自定義的刷新策略類的全限定類名。這個(gè)類繼承自com.opensymphony.oscache.web.WebEntryRefreshPolicy

    refreshpolicyparam

    指定任意需要傳給refreshpolicyclass的參數(shù)。如果沒有指定refreshpolicyclass,則這個(gè)值不起作用。


            這些屬性可以單獨(dú)使用,也可以根據(jù)需要組合使用。

    3、Cron表達(dá)式基本語法
            通過Cron表達(dá)式我們可以很靈活的設(shè)置緩存的失效時(shí)間,Cron表達(dá)式包括5個(gè)字段分別為Minute,Hour, DOM(Day Of Month), Month,DOW(Day Of Week)。他們順序地對(duì)應(yīng)了5個(gè)位置。當(dāng)某個(gè)位置上的值為*時(shí),表示該位置上的任意時(shí)間。另外還提供了指定時(shí)間的操作符號(hào)"-",",","/",他們分別表示一段時(shí)間范圍,具體的時(shí)間,以及遞增的時(shí)間段。下面是幾個(gè)例子說明一下Cron表達(dá)式的基本應(yīng)用: 
            (1) "10/20 * * * *" :因是第一個(gè)位置,并且是一個(gè)遞增的表達(dá)式,所以表達(dá)式指定的是每個(gè)小時(shí)的第10分鐘,第30分鐘,第50分鐘緩存內(nèi)容失效。
            (2) "* 8-18/4 * * *" :指定每天早上8點(diǎn)到晚上6點(diǎn)之間,每4個(gè)小時(shí)緩存內(nèi)容失效。  等同于"* 8,12,16 * * *"。
            (3) "* * * * 1-5":表示每個(gè)星期一到星期五內(nèi)容失效。

    4、Cache標(biāo)簽實(shí)例分析
            (1) 最簡(jiǎn)單的cache標(biāo)簽用法。使用默認(rèn)的關(guān)鍵字來標(biāo)識(shí)cache內(nèi)容,超時(shí)時(shí)間是默認(rèn)的3600秒。

    <oscache:cache>
    <%
    //自己的JSP代碼內(nèi)容
    %>
    </oscache:cache>

            (2) 用自己指定的字符串標(biāo)識(shí)緩存內(nèi)容,并且設(shè)定作用范圍為session。

    <oscache:cache key="foobar" scope="session">
    <%
    //自己的JSP代碼內(nèi)容
    %>
    </oscache:cache>

            (3) 動(dòng)態(tài)設(shè)定key值,使用自己指定的time屬性設(shè)定緩存內(nèi)容的超時(shí)時(shí)間,使用動(dòng)態(tài)refresh值決定是否強(qiáng)制內(nèi)容刷新。因?yàn)?span id="jodpxuo" class=hilite1>OSCache使用key值來標(biāo)識(shí)緩存內(nèi)容,使用相同的key值將會(huì)被認(rèn)為使用相同的的緩存內(nèi)容,所以使用動(dòng)態(tài)的key值可以自由的根據(jù)不同的角色、不同的要求決定使用不同的緩存內(nèi)容。

    <oscache:cache key="<%= product.getId() %>" time="1800" refresh="<%= needRefresh %>">
    <%
    //自己的JSP代碼內(nèi)容
    %>
    </oscache:cache>

            (4) 設(shè)置time屬性為負(fù)數(shù)使緩存內(nèi)容永不過期

    <oscache:cache time="-1">
    <%
    //自己的JSP代碼內(nèi)容
    %>
    </oscache:cache>

            (5) 使用duration屬性設(shè)置超期時(shí)間

    <oscache:cache  duration='PT5M'>
    <%
    //自己的JSP代碼內(nèi)容
    %>
    </oscache:cache>

            (6) 使用mode屬性使被緩存的內(nèi)容不加入給客戶的響應(yīng)中

    <oscache:cache  mode='silent'>
    <%
    //自己的JSP代碼內(nèi)容
    %>
    </oscache:cache>


    5、flush標(biāo)簽
            這個(gè)標(biāo)簽用于在運(yùn)行時(shí)刷新緩存。只有運(yùn)行flush標(biāo)簽后再次訪問相關(guān)緩存項(xiàng)時(shí)才執(zhí)行刷新。
            屬性說明:

    scope[all]

    指定要刷新的范圍。可選的值是"application", "session" nulnull(到底是null量還是all呀)值指定刷新所有的緩存(是指使用cache標(biāo)簽的緩存)。

    key

    當(dāng)指定了scopekey值時(shí),刷新唯一的緩存項(xiàng)。當(dāng)這個(gè)緩存項(xiàng)下次被訪問時(shí)將被刷新。只指定一個(gè)key值而沒有指定scope不起作用。

    group

    指定一個(gè)組時(shí)將刷新所有這個(gè)組中的緩存項(xiàng)。只指定一個(gè)group值而沒有指定scope不起作用。

    pattern

    任意包含pattern屬性指定的值的緩存項(xiàng)都將被刷新。只指定一個(gè)pattern值而沒有指定scope不起作用。 (注意:OSCache項(xiàng)目組已經(jīng)不贊成使用pattern這個(gè)屬性賴刷新緩存,二是鼓勵(lì)使用具有更好的靈活性和性能的group屬性來代替)

    language

    使用ISO-639定義的語言碼來發(fā)布不同的緩存內(nèi)容(under an otherwise identical key)。要在一個(gè)多語言網(wǎng)站上同一段JSP代碼不同用戶的參數(shù)提供不同的語言時(shí),這個(gè)屬性會(huì)很有用。


    6、usecached標(biāo)簽
            <usecached />:必須嵌套在<cache>標(biāo)簽中。
            屬性說明:

    use

    告訴所在的<cache>標(biāo)簽是否使用已經(jīng)緩存的內(nèi)容(缺省為true,使用緩存的內(nèi)容)。可以使用這個(gè)標(biāo)簽來控制緩存。比如使用<frush>標(biāo)簽刷新某個(gè)key的緩存,但可以在必要的地方即使這樣的強(qiáng)制刷新也仍然使用緩存內(nèi)容而不刷新。

            示例代碼如下:

    <oscache:cache>
         <% try { %>
         ... some jsp content ...
         <% } catch (Exception e) { %>
              <cache:usecached />
         <% } %>
    </oscache:cache>

    7、addgroup標(biāo)簽
            <addgroup />:必須嵌套在<cache>標(biāo)簽中。It allows groups to be dynamically added to a cached block. It is useful when the group(s) a cached block should belong to are unknown until the block is actually rendered. As each group is 'discovered', this tag can be used to add the group to the block's group list.
            屬性說明:

    group- req

    The name of the group to add the enclosing cache block to.  

            示例代碼如下:

    <oscache:cache key="test1">

    <oscache:addgroup group="group1" />

    ... some jsp content ...

    <oscache:addgroup group="group2" />

    ... some more jsp content ...

    </oscache:cache>

    8、使用標(biāo)簽的特殊說明

            (1) 標(biāo)簽的屬性值如果動(dòng)態(tài)生成,則需要先把動(dòng)態(tài)生成的值賦予一個(gè)變量,再使用JSP 表達(dá)式把動(dòng)態(tài)值賦予對(duì)應(yīng)的屬性。

    <!--正確的寫法:-->

    <%

    String keyValue = (String)request.getAttribute("keyValue");

    if(keyValue == null)

           keyValue = "";

    %>

    <oscache:cache  refresh='<%=keyValue%>'>……</ oscache:cache >

    <!--不正確的寫法:-->

    <oscache:cache  refresh='<%=(String)request.getAttribute("keyValue")%>'>

    <!-屬性的值此時(shí)為字符串“<%=(String)request.getAttribute("keyValue")%>--->

    </ oscache:cache >


            (2) 標(biāo)簽的屬性值對(duì)boolean是強(qiáng)類型的,比如cache的refresh屬性要求為true或false,示例如下:

    <!--正確的寫法:-->

    <oscache:cache  refresh='true'>……</ oscache:cache >

    <!--正確的寫法:-->

    <%

    String needRefresh = (String)application.getAttribute("needRefresh");

    if(needRefresh == null)

           needRefresh = "false";

    boolean t_f = Boolean.valueOf(needRefresh).booleanValue();

    %>

    <oscache:cache  refresh='<%=t_f %>'>……</ oscache:cache >

    <!--不正確的寫法:-->

    <oscache:cache  refresh='<%= needRefresh %>'>……</ oscache:cache >

    posted on 2006-01-12 16:50 渠上月 閱讀(4639) 評(píng)論(2)  編輯  收藏 所屬分類: java tips

    評(píng)論

    # re: 基于OSCache的頁面緩存[未登錄] 2013-06-06 11:43 aa
    12  回復(fù)  更多評(píng)論
      

    # re: 基于OSCache的頁面緩存[未登錄] 2013-06-06 11:43 aa
    111@aa
      回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 一级做a爰全过程免费视频| 美女被羞羞网站免费下载| 日本黄色动图免费在线观看| 亚洲精品国精品久久99热| 国产亚洲精品成人久久网站| 免费看无码自慰一区二区| 亚洲欧美成人一区二区三区| 破了亲妺妺的处免费视频国产 | 亚洲国产成人精品无码一区二区| 在线涩涩免费观看国产精品| 亚洲AV无码1区2区久久| 最近2019中文字幕免费大全5| 亚洲欧洲日产v特级毛片| 色窝窝免费一区二区三区| 亚洲风情亚Aⅴ在线发布| 国产成人无码a区在线观看视频免费| 337p日本欧洲亚洲大胆人人| 亚洲成av人片一区二区三区 | 91高清免费国产自产拍2021| 亚洲美女视频网站| 成人a视频片在线观看免费| 美女扒开尿口给男人爽免费视频| 亚洲av午夜精品一区二区三区| 香蕉免费在线视频| 亚洲电影在线免费观看| 免费高清av一区二区三区| 一级做a爱过程免费视| 亚洲AV本道一区二区三区四区| 免费在线视频你懂的| 亚洲精华国产精华精华液 | 青娱乐免费视频在线观看| 亚洲国产成人久久综合| 久久久久无码专区亚洲av| 88av免费观看入口在线| 亚洲AV日韩AV一区二区三曲| 中文字幕第13亚洲另类| 美女被cao免费看在线看网站| 黄色a三级三级三级免费看| 亚洲一二成人精品区| 日本免费一本天堂在线| 美女在线视频观看影院免费天天看 |