OSCache入门配置

 

OSCache是一个开放式资源缓冲库,可从http://www.opensymphony.com/oscache免费下载。我用的是2.41版,它包括一组JSP的标签,通过它们可以很容易的在你的程序中实现页面缓存,同时,还可以使用它的过滤器,可缓冲的不仅仅是JSP页面,还可以缓存任何Servlet生成的内容。
   下面先介绍一下它的一些术语:
   缓冲记录:存储在页面缓存器内的对象称为一个缓冲记录。在一个JSP程序中,它通常是一个JSP页面、JSP页面的一部分或Servlet的输出。
   缓冲键码:它就像一个hash表(Hash Table)。当在页面缓存中存储缓冲记录时,你必须提供缓冲键码来识别各个条目。在一个JSP程序中,你可能需要把几个请求参数组合在一起来形成缓冲键码,或者使用页面请求URI作为缓冲键码。
   缓冲周期:是一个缓冲记录在保留在页面缓存器中的时间。对于一个显示数据时常更新的JSP页面,你应该设定一个短的缓冲周期。
   缓冲域:是缓冲被存储在的作用域。你可以在应用程序域内存储缓冲记录,这样,缓冲记录可以被所有用户分享;或者在会话域,在前用户基础上存储缓冲记录。
  安装OSCache
   解压下载下来的文件包,将oscache.jar放到lib目录下,将oscache.properties和oscache.tld放到WEB-INF/classes下。在web.xml中加入标签库的配置:
   <taglib>
   <taglib-uri>/WEB-INF/oscache.tld </taglib-uri>
   <taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>
   </taglib>
   oscache.properties文件是它的配置,如果你像将缓存文件存放在硬盘上,并使用windows,在指定目录上需要使用\\。比如你的目录是c:\cache,那么应该写上c:\\cache。
  OSCache JSP标签
   使用这些标签很简单。你要做的是在需要缓存的JSP页面部分放置<os:cache>标签。以下JSP页面的示例表明了其实现方法:
   <!--导入标签库-->
   <%@ taglib uri="/WEB-INF/oscache.tld" prefix="os" %>
   <!--开始使用-->
   <os:cache time="60">
   <!--这里是你要缓存的JSP代码-->
   </os:cache>
   怎么样很简单吧,你只需把你要缓存的代码用<os:cache>标签包围起来即可,这里缓存周期是60秒,你可以根据你的具体情况来修改。在这个例子中,我们没有指定一个缓冲键码,默认情况下,OSCache将使用请求URI作为缓冲记录的键码。也没有指定一个缓冲域,默认情况下将会使用应用程序域。
  OSCacheServlet过滤器
   我们现在可以用它的过滤器来缓冲Servlet的输出,通过使用com.opensymphony.module.oscache.web.filter.CacheFilter类来实现。现在你需要做的是在程序的web.xml中添加这个过滤器,以及为所有你希望缓存的URL样式添加过滤器映射。以下是web.xml文件,我们只给出需要的部分:
   <filter>

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

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

              <init-param>

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

                     <param-value>5</param-value>

              </init-param>

       </filter>

       <filter-mapping>

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

              <url-pattern>/servlets/*</url-pattern>

       </filter-mapping>

   过滤器元素应该在上下文参数之后,但在Servlet和监听器元素之前。
   如同前面JSP的例子一样,我们同样设置了缓冲时间为60秒。其他的参数,如缓冲键码和缓冲域被省略,使用默认值。<filter-mapping>元素配置CacheFilter,以便它为匹配样式/servlets/*的所有请求URL缓冲相应输出。

 

附我的配置

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>oscache_demo</display-name>
 <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>5</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>CacheFilter</filter-name>
  <url-pattern>/servlets/*</url-pattern>
 </filter-mapping>
 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 <jsp-config>
  <taglib>
   <taglib-uri>/WEB-INF/oscache.tld</taglib-uri>
   <taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>
  </taglib>
 </jsp-config>
</web-app>

 

index.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/WEB-INF/oscache.tld" prefix="os" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>试试缓存吧</title>
</head>
<body>
<os:cache time="3">
 <%=new java.util.Date() %>
</os:cache>
</body>
</html>

OSCache是当前运用最广的缓存方案,JBoss,Hibernate,Spring等都对其有支持,
下面简单介绍一下OSCache的配置和使用过程。

1.安装过程
从http://www.opensymphony.com/oscache/download.html下载合适的OSCache版本,
我下载的是oscache-2.0.2-full版本。
解压缩下载的文件到指定目录

从解压缩目录取得oscache.jar 文件放到 /WEB-INF/lib 或相应类库目录 目录中,
jar文件名可能含有版本号和该版本的发布日期信息等,如oscache-2.0.2-22Jan04.jar

如果你的jdk版本为1.3.x,建议在lib中加入Apache Common Lib 的commons-collections.jar包。
如jdk是1.4以上则不必

从src或etc目录取得oscache.properties 文件,放入src根目录或发布环境的/WEB-INF/classes 目录
如你需要建立磁盘缓存,须修改oscache.properties 中的cache.path信息 (去掉前面的#注释)。
win类路径类似为c:\\app\\cache
unix类路径类似为/opt/myapp/cache

拷贝OSCache标签库文件oscache.tld到/WEB-INF/classes目录。

现在你的应用目录类似如下:
$WEB_APPLICATION\WEB-INF\lib\oscache.jar
$WEB_APPLICATION\WEB-INF\classes\oscache.properties
$WEB_APPLICATION\WEB-INF\classes\oscache.tld


将下列代码加入web.xml文件中
<taglib>
<taglib-uri>oscache</taglib-uri>
<taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>
</taglib>

为了便于调试日志输出,须加入commons-logging.jar和log4j-1.2.8.jar到当前类库路径中

在src目录加入下面两个日志输出配置文件:
log4j.properties 文件内容为:
log4j.rootLogger=DEBUG,stdout,file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[start]%d{yyyy/MM/dd/ HH:mm:ss}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n



log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=oscache.log
log4j.appender.file.MaxFileSize=100KB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[start]%d{yyyy/MM/dd/ HH:mm:ss}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n


log4j.logger.org.apache.commons=ERROR
log4j.logger.com.opensymphony.oscache.base=INFO


commons-logging.properties 文件内容为

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog

2.oscache.properties 文件配置向导

cache.memory
值为true 或 false ,默认为在内存中作缓存,
如设置为false,那cache只能缓存到数据库或硬盘中,那cache还有什么意义:)

cache.capacity
缓存元素个数

cache.persistence.class
持久化缓存类,如此类打开,则必须设置cache.path信息

cache.cluster 相关
为集群设置信息。

cache.cluster.multicast.ip为广播IP地址
cache.cluster.properties为集群属性


3.OSCache的基本用法

cache1.jsp 内容如下

<%@ page import="java.util.*" %>
<%@ taglib uri="oscache" prefix="cache" %>

<html>
<body>

没有缓存的日期: <%= new Date() %><p>
<!--自动刷新-->
<cache:cache time="30">
每30秒刷新缓存一次的日期: <%= new Date() %>
</cache:cache>
<!--手动刷新-->
<cache:cache key="testcache">
手动刷新缓存的日期: <%= new Date() %> <p>
</cache:cache>
<a href="cache2.jsp">手动刷新</a>

</body>
</html>

cache2.jsp 执行手动刷新页面如下
<%@ taglib uri="oscache" prefix="cache" %>

<html>
<body>

缓存已刷新...<p>

<cache:flush key="testcache" scope="application"/>

<a href="cache1.jsp">返回</a>

</body>
</html>


你也可以通过下面语句定义Cache的有效范围,如不定义scope,scope默认为Applcation
<cache:cache time="30" scope="session">
...
</cache:cache>

4. 缓存过滤器 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)作缓存处理

 

 

和freemarker 配合使用

第一要在web.xml中加入以下配置
<taglib>
<taglib-uri>oscache</taglib-uri>
<taglib-location>/WEB-INF/classes/oscache.tld</taglib-location>
</taglib>
第二在/web-inf/lib下加入os的jar包
第三在/web-inf/classes下加入oscache的配置文件和tld
第四在freemarker中按如下方法使用

<#assign cache=JspTaglibs["/WEB-INF/classes/oscache.tld"] />
<@cache.cache key="xxx" time=20>
${fowUrlaa}
</@cache.cache>

 

你可能感兴趣的:(jsp,freemarker,Date,cache,servlet,application)