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)做緩存處理。