在 servlet 中使用 EhCache 缓存

jopen 6年前

本文主要介绍 在纯servlet应用中 整合 EhCache 缓存的使用

1.整合EhCache首先我们要下载EhCache的架包
下载地址:http://ehcache.org/downloads/catalog
直接下载 hcache-2.7.4-distribution.tar.gz 

下载后,我们解压出来到lib文件夹里找到架包,总共有3个文件
ehcache-2.7.4.jar
slf4j-api-1.6.6.jar
slf4j-jdk14-1.6.6.jar
这3个文件我们都是需要的,直接导入到项目里
在 servlet 中使用 EhCache 缓存

2.导入架包之后,我们要考虑怎么和servlet容器进行整合
上一篇文章中 我介绍了 怎么在 servlet 中使用和初始化 ServletContext 也就是全局变量 

那我们整合EhCache 是否就可以 把 EhCache 放到 ServletContext 里去?

照例,先实现一个ServletContext的监听器并且在ServletContext初始化的时候初始化我们的EhCache

public class ContextLoaderListener implements ServletContextListener{        //实现全局上下文初始化方法      @Override      public void contextInitialized(ServletContextEvent servletContextEvent) {          //获得全局变量          ServletContext servletContext = servletContextEvent.getServletContext();          //初始化 EhCache 管理器          CacheManager cacheManager = new CacheManager();          //初始化 defaultCache Cache          Cache cache = cacheManager.getCache("defaultCache");          //新建一个cache节点,并赋值"value1"          Element element = new Element("key1","value1");          //把cache节点存储到默认的cache          cache.put(element);          //将cahe存储到全局变量(servletContext)          servletContext.setAttribute("Cache",cache);      }          //实现全局上下文销毁函数      @Override      public void contextDestroyed(ServletContextEvent servletContextEvent) {          //实现       }  }

在 web.xml 里配置 contextInitialized 监听器

<listener>      <listener-class>listener.ContextLoaderListener</listener-class>  </listener>
3.整合完毕,然后我们就可以测试是否整合成功

因为前面我们初始化的时候已经给cache存储了一个key为“key1”的cache节点
所以我们在helloOut这个servlet中直接查看是否可以取到"key1"节点


public class HelloOut extends HttpServlet {      public void service(HttpServletRequest request,HttpServletResponse response) throws IOException {          PrintWriter writer = response.getWriter();          writer.println("Hello Word For BAE3");          //获取全局变量          ServletContext servletContext = getServletContext();          //从全局变量获取 cache          Cache cache = (Cache) servletContext.getAttribute("Cache");          //输出cache中key为"key1"节点的value          writer.println(cache.get("key1").getObjectValue());          writer.close();        }  }
打开 http://localhost:8080/EhCacheTest_war_exploded/hello
在 servlet 中使用 EhCache 缓存

可以明显的看到,我们已经在helloOut这个servlet中取到cache里面"key1"节点的value

预告下一篇文章:java servlet + EhCache 实现的 短链接 项目