OSCache-JSP頁面緩存(1)


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

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

如果符合上面四項中的任何一項,被緩存的內容視為已經失效,這時被緩存的內容將被重新處理並且返回處理過后的信息,如果被緩存的內容沒有失效,那么返回給用戶的將是緩存中的信息。

cache標簽的屬性說明:
key - 標識緩存內容的關鍵詞。在指定的作用范圍內必須是唯一的。默認的key是被訪問頁面的URI和后面的請求字符串。
你可以在同一個頁面中使用很多cache標簽而不指定他的key屬性,這種情況下系統使用該頁面的URI和后面的請求字符串,另外再自動給這些key增加一個索引值來區分這些緩存內容。但是不推薦采用這樣的方式。

scope - 緩存發生作用的范圍,可以是application或者session。

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

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

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

mode - 如果編程者不希望被緩存的內容增加到給用戶的響應中,可以設置mode屬性為"silent"。
其它可用的屬性還包括:cron 、groups、language、refreshpolicyclass、refreshpolicyparam。
上面的這些屬性可以單獨使用,也可以根據需要組合使用,下面的例子將講解這些常用屬性的使用方式。

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

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>

三、緩存過濾器 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)作緩存處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM