`

EhCache 整合Spring 使用页面缓存

阅读更多

      Ehcache对质页面、对象、数据缓存,同时支持集群/分布式缓存。整合Spring、Hibernate也非常的简单,spring对Ehcache的支持也非常好。EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件。同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度。

下面配置EhCache的页面缓存

一、依赖jar包

ehcache-core-2.5.2.jar

ehcache-web-2.0.4.jar 

其它spring等相关jar包

二、加入ehcache.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
    <diskStore path="java.io.tmpdir"/>
    <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="30" timeToLiveSeconds="30" overflowToDisk="false"/>
    <!-- 
        配置自定义缓存
        maxElementsInMemory:缓存中允许创建的最大对象数
        eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
        timeToIdleSeconds:
               缓存数据的钝化时间,也就是在一个元素消亡之前, 两次访问时间的最大时间间隔值,
               这只能在元素不是永久驻留时有效, 如果该值是 0 就意味着元素可以停顿无穷长的时间。
        timeToLiveSeconds:
                缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,
                这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。
        overflowToDisk:内存不足时,是否启用磁盘缓存。
        memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。
    -->
    <cache name="SimplePageCachingFilter" 
        maxElementsInMemory="10000" 
        eternal="false"
        overflowToDisk="false" 
        timeToIdleSeconds="3" 
        timeToLiveSeconds="6"
        memoryStoreEvictionPolicy="LFU" />
 
</ehcache>

 三、重新实现SimplePageCachingFilter类,SimplePageCachingFilter类也可以不重现实现,也能达到缓存效果,这里根据实现需求,进行重新实现

package com.cache;

import java.util.Enumeration;

import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.ehcache.CacheException;
import net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter;

import org.apache.cxf.common.util.StringUtils;

/**
 * EhCache  页面缓存过滤器
 *
 */
public class PageCachingFilter extends SimplePageCachingFilter {

	private final static String FILTER_URL_PATTERNS = "patterns";
	private static String[] cacheURLs;

	private void init() throws CacheException {
		String patterns = filterConfig.getInitParameter(FILTER_URL_PATTERNS);
		cacheURLs = StringUtils.split(patterns, ",");
	}

	@Override
	protected void doFilter(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) {
		try {
			if (cacheURLs == null) {
				init();
			}

			String url = request.getRequestURI();
			boolean flag = false;
			if (cacheURLs != null && cacheURLs.length > 0) {
				for (String cacheURL : cacheURLs) {
					if (url.contains(cacheURL.trim())) {
						flag = true;
						break;
					}
				}
			}
			if (flag) {// 包含我们指定要缓存的url 就缓存该页面,否则执行正常的页面转向
				String query = request.getQueryString();
				if (query != null) {
					query = "?" + query;
					url = url + query;
				}
				System.out.println("当前请求被缓存:" + url);
				super.doFilter(request, response, chain);
			} else {
				chain.doFilter(request, response);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("rawtypes")
	private boolean headerContains(final HttpServletRequest request, final String header, final String value) {
		logRequestHeaders(request);
		final Enumeration accepted = request.getHeaders(header);
		while (accepted.hasMoreElements()) {
			final String headerValue = (String) accepted.nextElement();
			if (headerValue.indexOf(value) != -1) {
				return true;
			}
		}
		return false;
	}

	/** 兼容ie6/7 gzip压缩*/
	@Override
	protected boolean acceptsGzipEncoding(HttpServletRequest request) {
		boolean ie6 = headerContains(request, "User-Agent", "MSIE 6.0");
		boolean ie7 = headerContains(request, "User-Agent", "MSIE 7.0");
		return acceptsEncoding(request, "gzip") || ie6 || ie7;
	}
}

 四、在web.xml加入配置

<!-- EhCache页面缓存 -->
<filter>
    <filter-name>PageCachingFilter</filter-name>
    <filter-class>com.cache.PageCachingFilter</filter-class>
    <init-param>
        <param-name>patterns</param-name>
        <!-- 配置你需要缓存的url -->
        <param-value>/pageCache.jsp</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>PageCachingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 五、编辑测试页面pageCache.jsp

<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!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>测试EhCache页面缓存</title>
</head>
<body>
测试EhCache页面缓存
<%  
	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    out.print(format.format(new Date()));  
    System.out.println(System.currentTimeMillis());  
%>  
</body>
</html>

 

分享到:
评论

相关推荐

    Ehcache 整合Spring 使用页面、对象缓存

    ### Ehcache 整合Spring 使用页面、对象缓存 #### 一、Ehcache简介与特点 Ehcache是一款开源的、高性能的Java缓存框架,它可以用来存储、检索短期数据,以减轻数据库的压力,提高应用程序性能。Ehcache不仅支持...

    Ehcache整合Spring使用页面、对象缓存

    1. 引入依赖:在项目中添加Ehcache和Spring缓存管理的相关依赖,通常是ehcache-core或ehcache-spring-annotations等。 2. 配置Ehcache:创建一个`ehcache.xml`配置文件,定义缓存策略,包括缓存的名称、大小、过期...

    ehcache+spring demo 整合

    将 Ehcache 整合到 Spring 中,可以方便地在Spring应用中使用缓存服务。 在"ehcache+spring demo 整合"项目中,我们有两个工程:一个Web工程和一个Java工程。Web工程通常用于构建前端展示和处理HTTP请求,而Java...

    spring + ehcache + redis两级缓存

    当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...

    Spring4 整合EhCache实现 页面缓存 零配置

    在本文中,我们将深入探讨如何使用Spring4框架与EhCache进行整合,以实现零配置的页面缓存功能。EhCache是一个广泛使用的开源Java缓存解决方案,它提供了高效的内存和磁盘缓存机制,有助于提升应用程序性能。通过...

    整合spring 和ehcache

    配置ehcache缓存,存储内存的设置,与spring 的整合等

    springMVC+mybatis+ehcache整合

    总的来说,"springMVC+mybatis+ehcache整合"项目提供了从Web交互到数据库操作再到数据缓存的一站式解决方案。理解并掌握这三个技术的集成,对于开发高效、可维护的Java Web应用具有重要意义。通过下载提供的项目,...

    Ehcache缓存框架整合Spring和shiro权限配置

    缓存可以提高查询数据性能, 对同一批数据进行多次查询时, 第一次查询走数据库, 查询数据后,将数据保存在内存中,第二次以后查询 可以直接从内存获取数据,而不需要 和数据库进行交互。

    spring struts2 hibernate ehcache整合

    这篇博客“spring struts2 hibernate ehcache整合”显然探讨了如何将这四个组件集成到同一个项目中,以提升应用程序的性能和效率。以下是关于这些技术及其整合的关键知识点的详细说明: 1. **Spring框架**:Spring...

    spirng3注解(annotation)与ehcache的对象、页面缓存

    Spring3注解与Ehcache整合是现代Java应用中实现高效缓存管理的重要技术组合。在Spring框架中,注解提供了简洁的编程模型,而Ehcache则是一个广泛使用的开源缓存解决方案,它能有效提高应用程序性能,减少数据库访问...

    Spring+Hibernate+ehcache整合

    在"Spring+Hibernate+ehcache整合"项目中,开发者已经完成了一个将这三个框架集成的基础工程。虽然Struts没有被明确提及,但通常在Web开发中,Spring与Struts结合可以构建更完整的MVC架构。这个整合项目可能包含以下...

    SpringBoot 集成Ehcache实现缓存

    下面将详细介绍如何在一个Spring Boot项目中集成并使用Ehcache缓存。 ##### 1. 创建项目 首先,使用IDEA创建一个Maven类型的Spring Boot项目。确保项目结构符合Spring Boot的标准。 ##### 2. 数据库初始化 为了...

    spring+ibatis+ehcache整合例子

    综上所述,这个"spring+ibatis+ehcache整合例子"项目旨在帮助开发者理解并掌握这三个框架的集成使用,提高开发效率,优化系统性能。通过实际运行和分析这个示例,你可以更好地掌握Spring的依赖注入、iBatis的SQL映射...

    spring整合ehcache的完整用例

    通过以上步骤,你就可以在Spring应用中成功整合并使用Ehcache作为缓存机制。在`ehcacheDemo`项目中,你可以找到具体的代码示例,包括配置文件、服务类以及相关的测试用例,帮助你理解和实践这一过程。注意,实际应用...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...

    ehcache-spring

    Ehcache-spring是将Ehcache缓存框架与Spring框架进行整合的应用。通过Spring AOP(面向切面编程)和Ehcache的结合使用,可以在Spring管理的应用中轻松实现数据缓存,提升应用性能。 首先,Ehcache是一个广泛使用的...

    BoneCP连接池和Ehcache注解缓存整合到Spring

    4. **整合缓存**:使用Spring的AOP(面向切面编程)和Ehcache的注解,在需要缓存的方法上添加`@Cacheable`,在清除缓存的方法上添加`@CacheEvict`。 5. **测试验证**:编写测试用例,确保 BoneCP 能够正常提供数据库...

    spring2.5整合ehcache2.0使用

    Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,使得我们可以在不修改核心业务代码的情况下轻松地添加缓存功能。 首先,我们需要在项目中引入Ehcache和Spring的相关依赖...

Global site tag (gtag.js) - Google Analytics