spring使用ehcache实现页面缓存示例

发布时间 - 2026-01-10 23:13:49    点击率:

如果将应用的结构分为"page-filter-action-service-dao-db",那page层就是最接近用户的一层,一些特定的页面如果在这里做缓存,之后用户的请求在filter就会结束了,不用再走后面的"action-service-dao-db",很大程度的节省了服务器的压力,也加快了页面响应。

在系统中可以对一些访问量特别大、数据更新较少的页面设置页面缓存,比如首页、一些浏览页和统计页,设置成几分钟更新一次缓存。

spring的ehcache页面缓存是用filter的原理实现的,ehcache-web包中的"SimplePageCachingFilter"过滤器提供了简单的页面缓存功能,如果有特殊需要我们也可以继承这个类实现自己的过滤器。

下面举栗子:

 一、添加jar包引用

修改pom.xml文件,加入:

<dependency>
  <groupId>net.sf.ehcache</groupId>
  <artifactId>ehcache-web</artifactId>
  <version>2.0.4</version>
</dependency> 

二、修改配置文件

1、修改web.xml文件,加入两个自己的filter:

<!-- 页面缓存过滤器 -->
<!-- 添加缓存 -->
<filter>
  <filter-name>testPageAddCachingFilter</filter-name>
  <filter-class>org.xs.demo1.TestPageCachingFilter</filter-class>
  <init-param>
    <param-name>cacheName</param-name>
    <param-value>testPageCache</param-value>
  </init-param>
</filter>

<filter-mapping>
  <filter-name>testPageAddCachingFilter</filter-name>
  <url-pattern>/hello/list</url-pattern>
  <url-pattern>/hello/list2</url-pattern>
  <url-pattern>/hello/view/*</url-pattern>
</filter-mapping>
<!-- 清除缓存 -->
<filter>
  <filter-name>testPageRemoveCachingFilter</filter-name>
  <filter-class>org.xs.demo1.TestPageRemoveCachingFilter</filter-class>
  <init-param>
    <param-name>cacheName</param-name>
    <param-value>testPageCache</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>testPageRemoveCachingFilter</filter-name>
  <url-pattern>/hello/update/*</url-pattern>
  <url-pattern>/hello/delete/*</url-pattern>
</filter-mapping>

2、修改ehcache-context.xml文件,加入"testPageCache"缓存实例名(一定要加,不然tomcat启动时filter会报错,提示找不到)

<cache name="testPageCache" 

  maxEntriesLocalHeap="10000"

  maxEntriesLocalDisk="100000"

  overflowToDisk="true"

  eternal="false"

  timeToIdleSeconds="300"

  timeToLiveSeconds="600"

/>

三、增加filter类

1、增加添加缓存过滤器

package org.xs.demo1;

import net.sf.ehcache.CacheManager;

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

public class TestPageCachingFilter extends SimplePageCachingFilter {  

  @Override

  protected CacheManager getCacheManager() {

    return ((CacheManager)ContextUtils.getBean("ehcacheManager"));

  }

} 

继承SimplePageCachingFilter类的原因是要自己创建CacheManager,不然会是自动创建,默认会去根目录找"ehcache.xml",和我们已有的配置不符。

2、增加清除缓存过滤器

package org.xs.demo1;

import java.io.IOException; 

import javax.servlet.FilterChain;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse; 

import net.sf.ehcache.Ehcache; 

public class TestPageRemoveCachingFilter extends TestPageCachingFilter {   

  @Override

  protected void doFilter(final HttpServletRequest httpRequest, final HttpServletResponse httpResponse, final FilterChain chain) throws ServletException, IOException {

    Ehcache ehcache = getCacheManager().getEhcache(getCacheName());

    //清除缓存

    ehcache.removeAll();

    //请求继续执行

    chain.doFilter(httpRequest, httpResponse);

  }

}

四、运行测试

第一次访问"http://localhost:8080/demo1/hello/list2"地址,会进入Controller中的断点:

第二次访问就不会进入断点了,页面瞬间加载好

点击"删除"按钮,会进入TestPageRemoveCachingFilter过滤器的断点:

之后再访问list2又会重新进入Controller中的断点

 

实例代码地址:spring-ehcache_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # ehcache缓存  # 页面缓存  # ehcache页面缓存  # 配置Spring4.0注解Cache+Redis缓存的用法  # Spring Cache的基本使用与实现原理详解  # 自己的  # 就会  # 在这里  # 找不到  # 几分钟  # 又会  # 报错  # 会去  # 较少  # 首页  # 以对  # 配置文件  # 启动时  # 大家多多  # 再走  # 设置成  # 包中  # 加载  # 瞬间  # 结束了 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在IIS服务器上快速部署高效网站?  利用vue写todolist单页应用  Laravel如何实现多对多模型关联?(Eloquent教程)  如何获取上海专业网站定制建站电话?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  Laravel如何使用Blade模板引擎?(完整语法和示例)  Laravel怎么在Controller之外的地方验证数据  深圳网站制作培训,深圳哪些招聘网站比较好?  如何构建满足综合性能需求的优质建站方案?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  非常酷的网站设计制作软件,酷培ai教育官方网站?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Linux后台任务运行方法_nohup与&使用技巧【技巧】  如何在七牛云存储上搭建网站并设置自定义域名?  米侠浏览器网页背景异常怎么办 米侠显示修复  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Mybatis 中的insertOrUpdate操作  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  简单实现Android验证码  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  七夕网站制作视频,七夕大促活动怎么报名?  如何挑选高效建站主机与优质域名?  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  JavaScript Ajax实现异步通信  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  详解MySQL数据库的安装与密码配置  JS经典正则表达式笔试题汇总  JavaScript实现Fly Bird小游戏  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  如何批量查询域名的建站时间记录?  历史网站制作软件,华为如何找回被删除的网站?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel中的Facade(门面)到底是什么原理  微信小程序 配置文件详细介绍  如何用IIS7快速搭建并优化网站站点?  如何在Windows服务器上快速搭建网站?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  如何为不同团队 ID 动态生成多个独立按钮  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?