Oscache CacheFilter缓存url和控制刷新的简单实现

使用SSH做成的网站,首页如何载入数据是一个问题,既要考虑到及时性和性能也要考虑到SEO,javaeye上也有很多相关的讨论。比如问答版块中的:

如何处理网站首页中的各个子栏目或频道?

http://www.iteye.com/problems/27503

SSH框架的网站首页是怎样初始化的??

http://www.iteye.com/problems/27503

看了一上午,小总结了一下,无非是以下几种方法:

1.使用首页静态化

2.使用ajax动态调用数据库内容

3.部分静态和部分动态调用

4.使用缓存。

根据我们的需求,我使用缓存首页,具体使用Oscache的CacheFilter缓存首页,具体配置记录如下:

1.引入Oscache的jar

2.src下放入Oscache的配置文件oscache.properties

3.web.xml中写入配置:

    最简单的配置:

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

<filter-mapping>
    <filter-name>CacheFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
</filter-mapping>

 关于详细配置的介绍在这里:http://www.opensymphony.com/oscache/wiki/CacheFilter.html

 一下是我的配置:

<filter>
		<filter-name>CacheFilter</filter-name>
		<filter-class>
			com.cache.MyFilterCache
		</filter-class>
		<init-param>
			<param-name>time</param-name>
			<param-value>-1</param-value>
		</init-param>
		<init-param>
			<param-name>EntryRefreshPolicy  </param-name>
			<param-value>com.cache.MyEntryRefreshPolicy</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CacheFilter</filter-name>
		<url-pattern>/index.jsp</url-pattern>
	</filter-mapping>

 注意:1.filter-class可以使用Oscache自带的com.opensymphony.oscache.web.filter.CacheFilter,

我是为了方便所以自己写了一个类继承了它,重写了一个createCacheKey方法:

     public class MyFilterCache extends CacheFilter{

	@Override
	 public String createCacheKey(HttpServletRequest httpRequest, ServletCacheAdministrator scAdmin, Cache cache) {
		return httpRequest.getServletPath();
    }
}
 

             2. EntryRefreshPolicy 是一个刷新缓存的控制类,实现EntryRefreshPolicy接口,这个接口只声明了

一个方法needsRefresh,就是是否要刷新,呵呵。网上有人说使用CacheFilter无法自己控制刷新,

只能用时间来控制,我看了一下源码发现是可以实现的。

public class MyEntryRefreshPolicy implements EntryRefreshPolicy {

	@Override
	public boolean needsRefresh(CacheEntry entry) {
		if(CacheUtil.isFLUSH()){//判断是否需要刷新缓存
			CacheUtil.setFLUSH(false);//刷新缓存后把需要刷新状态设为false
			return true;
		}
		return false;
	}

}

 其中用到了一个工具类:

public class CacheUtil {

	private static boolean FLUSH=false;//是否刷新缓存

	public static boolean isFLUSH() {
		return FLUSH;
	}

	public static void setFLUSH(boolean flush) {
		FLUSH = flush;
	}
	
}

3.配置中的time是控制刷新时间的,是int类型单位是s,默认是3600.我写成-1是不让他的这个功能生效。 

然后就可以手动的控制是否需要刷新了。

如果不仅需要定时刷新还需要手动刷新的话,就在needsRefresh方法中再总相应的处理。

在我的下一笔文章中实现了定时刷新和手动刷新: Oscache CacheFilter定时刷新和手动刷新缓存URL的实现

http://01404421.iteye.com/blog/510712

你可能感兴趣的:(Ajax,jsp,Web,cache,ssh)