一、缓存整个页面
在
OSCache组件中提供了一个CacheFilter用于实现页面级的缓存,主要用于对web应用中的某些动态页面进行缓存,尤其是那些需要生成PDF格式文件/报表、图片文件等的页面,不仅减少了数据库的交互、减少数据库服务器的压力,而且对于减少web服务器的性能消耗有很显著的效果。
这种功能的实现是通过在web.xml中进行配置来决定缓存哪一个或者一组页面,而且还可以设置缓存的相关属性,这种基于配置文件的实现方式对于J2EE来说应该是一种标准的实现方式了。
[注] 只有客户访问时返回http头信息中代码为200(也就是访问已经成功)的页面信息才能够被缓存。
修改web.xml,增加如下内容,确定对/testContent.jsp页面进行缓存。
<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>
<!-对所有jsp页面内容进行缓存-->
<url-pattern>*.jsp</url-pattern>
</filter-mapping> |
在页面级缓存的情况下,可以通过设置CacheFilter的初始属性来决定缓存的一些特性:time属性设置缓存的时间段,默认为3600秒,可以根据自己的需要只有的设置,而scope属性设置,默认为application,可选项包括application、session。
二、缓存页面的部分
1、
OSCache标签库配置
(1) 从src\webapp\WEB-INF\classes或etc目录取得s
oscache.tld文件,放在CLASSPATH下(src根目录或发布环境的/WEB-INF/classes 目录)。该文件定义了
OSCache的定义。
(2) 将下列代码加入web.xml文件中:
2、cache标签
这是
OSCache提供的标签库中最重要的一个标签,包括在标签中的内容将应用缓存机制进行处理,处理的方式将取决于编程者对cache标签属性的设置。
第一次请求到达时,标签中的内容被处理并且缓存起来,当下一个请求到达时,缓存系统会检查这部分内容的缓存是否已经失效,主要是以下几项:
(1)缓存时间超过了cache标签设置的time或者duration属性规定的超时时间
(2)cron属性规定的时间比缓存信息的开始时间更晚
(3)标签中缓存的内容在缓存后又被重新刷新过
(4)其他缓存超期设定
如果符合上面四项中的任何一项,被缓存的内容视为已经失效,这时被缓存的内容将被重新处理并且返回处理过后的信息,如果被缓存的内容没有失效,那么返回给用户的将是缓存中的信息。
cache标签的常用属性说明:
这些属性可以单独使用,也可以根据需要组合使用。
3、Cron表达式基本语法
通过Cron表达式我们可以很灵活的设置缓存的失效时间,Cron表达式包括5个字段分别为Minute,Hour, DOM(Day Of Month), Month,DOW(Day Of Week)。他们顺序地对应了5个位置。当某个位置上的值为*时,表示该位置上的任意时间。另外还提供了指定时间的操作符号"-",",","/",他们分别表示一段时间范围,具体的时间,以及递增的时间段。下面是几个例子说明一下Cron表达式的基本应用:
(1) "10/20 * * * *" :因是第一个位置,并且是一个递增的表达式,所以表达式指定的是每个小时的第10分钟,第30分钟,第50分钟缓存内容失效。
(2) "* 8-18/4 * * *" :指定每天早上8点到晚上6点之间,每4个小时缓存内容失效。 等同于"* 8,12,16 * * *"。
(3) "* * * * 1-5":表示每个星期一到星期五内容失效。
4、Cache标签实例分析
(1) 最简单的cache标签用法。使用默认的关键字来标识cache内容,超时时间是默认的3600秒。
(2) 用自己指定的字符串标识缓存内容,并且设定作用范围为session。
(3) 动态设定key值,使用自己指定的time属性设定缓存内容的超时时间,使用动态refresh值决定是否强制内容刷新。因为
OSCache使用key值来标识缓存内容,使用相同的key值将会被认为使用相同的的缓存内容,所以使用动态的key值可以自由的根据不同的角色、不同的要求决定使用不同的缓存内容。
(4) 设置time属性为负数使缓存内容永不过期
<oscache:cache time="-1"> <% //自己的JSP代码内容 %> </oscache:cache> |
(5) 使用duration属性设置超期时间
(6) 使用mode属性使被缓存的内容不加入给客户的响应中
<oscache:cache mode='silent'> <% //自己的JSP代码内容 %> </oscache:cache> |
5、flush标签
这个标签用于在运行时刷新缓存。只有运行flush标签后再次访问相关缓存项时才执行刷新。
属性说明:
6、usecached标签
<usecached />:必须嵌套在<cache>标签中。
属性说明:
示例代码如下:
<oscache:cache> <% try { %> ... some jsp content ... <% } catch (Exception e) { %> <cache:usecached /> <% } %> </oscache:cache> |
7、addgroup标签
<addgroup />:必须嵌套在<cache>标签中。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.
属性说明:
示例代码如下:
<oscache:cache key="test1">
<oscache:addgroup group="group1" />
... some jsp content ...
<oscache:addgroup group="group2" />
... some more jsp content ...
</oscache:cache> |
8、使用标签的特殊说明
(1) 标签的属性值如果动态生成,则需要先把动态生成的值赋予一个变量,再使用JSP 表达式把动态值赋予对应的属性。
<!--正确的写法:-->
<%
String keyValue = (String)request.getAttribute("keyValue");
if(keyValue == null)
keyValue = "";
%>
<oscache:cache refresh='<%=keyValue%>'>……</ oscache:cache >
<!--不正确的写法:-->
<oscache:cache refresh='<%=(String)request.getAttribute("keyValue")%>'>
<!-属性的值此时为字符串“<%=(String)request.getAttribute("keyValue")%>”--->
</ oscache:cache > |
(2) 标签的属性值对boolean是强类型的,比如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 > |