贴代码:
public class EhcacheTest { public Cache callCache(String cacheName){
CacheManager cacheManager = CacheManager.create("ehcache.xml");   
Cache cache = cacheManager.getCache(cacheName);
return cache;
}

public static void main(String[] args) {
 CacheManager cacheManager = CacheManager.create("src/ehcache.xml");
 Cache cache = cacheManager.getCache("SimplePageFragmentCachingFilter");
 
          }通过 main 方法去运行  Cache cache 这里能取到值,但是在Web项目发布到tomcat里 通过页面访问Controller 去调 callCache
方法 Cache cache 是null值,(ehcache.xml配置文件放在默认的src目录下) 以下是Servlet调用的代码,   代码1 处的 cache 是null值。 protected void doPost(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException {

EhcacheTest eh = new EhcacheTest();
Cache cache = eh.callCache("SimplePageFragmentCachingFilter");// 代码1                    request.setAttribute("tvalue", tvalue);
request.getRequestDispatcher("cache.jsp").forward(request, response);

    通过看源码发现代码2处这里返回的是空值
    public Cache getCache(String name) throws IllegalStateException, ClassCastException {
        checkStatus();
        Ehcache ehcache = ehcaches.get(name);
        return ehcache instanceof Cache ? (Cache) ehcache : null;//代码2
    }
   希望有搞过这个的大神们 帮帮忙~纠结1天了

解决方案 »

  1.   

    刚通过测试 如果把web.xml里的过滤器
    <filter>
        <filter-name>myFirstCache</filter-name>
        <filter-class>net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter</filter-class>
        <init-param>
          <param-name>cacheName</param-name>
          <param-value>myFirstCache</param-value>
        </init-param>
      </filter>
      
      <filter-mapping>
        <filter-name>myFirstCache</filter-name>
        <url-pattern>/zhb</url-pattern>
      </filter-mapping>去掉的话就能获得值 但是去掉这个 页面缓存就没效果了 难道 页面缓存和后台缓存只能用一个么?