OSCache-JSP頁面緩存(1)

1、OSCache提供的緩存標籤
這是OSCache提供的標籤庫中最重要的一個標籤,包括在標籤中的內容將應用緩存機制進行處理,處理的方式將取決於編程者對cache標籤屬性的設置。html

第一次請求到達時,標籤中的內容被處理而且緩存起來,當下一個請求到達時,緩存系統會檢查這部份內容的緩存是否已經失效,主要是如下幾項:
1. 緩存時間超過了cache標籤設置的time或者duration屬性規定的超時時間;
2. cron屬性規定的時間比緩存信息的開始時間更晚;
3. 標籤中緩存的內容在緩存後又被從新刷新過;
4. 其餘緩存超期設定。java

若是符合上面四項中的任何一項,被緩存的內容視爲已經失效,這時被緩存的內容將被從新處理而且返回處理事後的信息,若是被緩存的內容沒有失效,那麼返回給用戶的將是緩存中的信息。 web

cache標籤的屬性說明:
key - 標識緩存內容的關鍵詞。在指定的做用範圍內必須是惟一的。默認的key是被訪問頁面的URI和後面的請求字符串。
你能夠在同一個頁面中使用不少cache標籤而不指定他的key屬性,這種狀況下系統使用該頁面的URI和後面的請求字符串,另外再自動給這些key增長一個索引值來區分這些緩存內容。可是不推薦採用這樣的方式。編程

scope - 緩存發生做用的範圍,能夠是application或者session。緩存

time - 緩存內容的時間段,單位是秒,默認是3600秒,也就是一個小時,若是設定一個負值,那麼這部分被緩存的內容將永遠不過時。session

duration - 指定緩存內容失效的時間,是相對time的另外一個選擇,可使用簡單日期格式或者符合USO-8601的日期格式。app

refresh - false 或者true。
若是refresh屬性設置爲true,無論其餘的屬性是否符合條件,這部分被緩存的內容都將被更新,這給編程者一種選擇,決定何時必須刷新。jsp

mode - 若是編程者不但願被緩存的內容增長到給用戶的響應中,能夠設置mode屬性爲"silent"。
其它可用的屬性還包括:cron 、groups、language、refreshpolicyclass、refreshpolicyparam。
上面的這些屬性能夠單獨使用,也能夠根據須要組合使用,下面的例子將講解這些經常使用屬性的使用方式。 url

2、Cache標籤實例分析
1. 最簡單的cache標籤用法
使用默認的關鍵字來標識cache內容,超時時間是默認的3600秒
<cache:cache>
<% //本身的JSP代碼內容 %>
</cache:cache>spa

2. 用本身指定的字符串標識緩存內容,而且設定做用範圍爲session。
<cache:cache key="foobar" scope="session">
<% //本身的JSP代碼內容 %>
</cache:cache>

3.動態設定key值,使用本身指定的time屬性設定緩存內容的超時時間,使用動態refresh值決定是否強制內容刷新。
由於OSCache使用key值來標識緩存內容,使用相同的key值將會被認爲使用相同的的緩存內容,因此使用動態的key值能夠自由的根據不一樣的角色、不一樣的要求決定使用不一樣的緩存內容。
<cache:cache key="<%= product.getId() %>" time="1800" refresh="<%= needRefresh %>">
<% //本身的JSP代碼內容 %>
</cache:cache>

4. 設置time屬性爲負數使緩存內容永不過時
<cache:cache time="-1">
<% //本身的JSP代碼內容 %>
</cache:cache>

5. 使用duration屬性設置超期時間
<cache:cache duration=''PT5M''>
<% //本身的JSP代碼內容 %>
</cache:cache>

6. 使用mode屬性使被緩存的內容不加入給客戶的響應中
<cache:cache mode=''silent''>
<% //本身的JSP代碼內容 %>
</cache:cache>
案例一

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ taglib uri="http://www.opensymphony.com/oscache" prefix="cache"%>
<html>
    <body>
            沒有緩存的日期: <%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())%><p>
            <!--自動刷新-->
            <cache:cache time="30">
                每30秒刷新緩存一次的日期: <%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())%><p>
            </cache:cache>
            <!--手動刷新-->
            <cache:cache key="testcache">
                手動刷新緩存的日期: <%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())%><p>
            </cache:cache>
            <a href="cache2.jsp">手動刷新</a>
    </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.opensymphony.com/oscache" prefix="cache"%>

<html>
    <body>
        緩存已刷新... 
        <cache:flush key="testcache" scope="application" />
        <a href="cache1.jsp">返回</a>
    </body>
</html>

3、緩存過濾器 CacheFilter
你能夠在web.xml中定義緩存過濾器,定義特定資源的緩存。

<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>60</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>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>

上面定義將緩存全部.jsp頁面,緩存刷新時間爲60秒,緩存做用域爲Session

注意,CacheFilter只捕獲Http頭爲200的頁面請求,即只對無錯誤請求做緩存,而不對其餘請求(如500,404,400)做緩存處理。

相關文章
相關標籤/搜索