如果將應用的結(jié)構(gòu)分為"page-filter-action-service-dao-db",那page層就是最接近用戶的一層,一些特定的頁面如果在這里做緩存,之后用戶的請求在filter就會結(jié)束了,不用再走后面的"action-service-dao-db",很大程度的節(jié)省了服務器的壓力,也加快了頁面響應。
在系統(tǒng)中可以對一些訪問量特別大、數(shù)據(jù)更新較少的頁面設置頁面緩存,比如首頁、一些瀏覽頁和統(tǒng)計頁,設置成幾分鐘更新一次緩存。
spring的ehcache頁面緩存是用filter的原理實現(xiàn)的,ehcache-web包中的"SimplePageCachingFilter"過濾器提供了簡單的頁面緩存功能,如果有特殊需要我們也可以繼承這個類實現(xiàn)自己的過濾器。
下面舉栗子:
一、添加jar包引用
修改pom.xml文件,加入:
1
2
3
4
5
|
< dependency > < groupId >net.sf.ehcache</ groupId > < artifactId >ehcache-web</ artifactId > < version >2.0.4</ version > </ dependency > |
二、修改配置文件
1、修改web.xml文件,加入兩個自己的filter:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<!-- 頁面緩存過濾器 --> <!-- 添加緩存 --> < 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會報錯,提示找不到)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
< cache name = "testPageCache" maxEntriesLocalHeap = "10000" maxEntriesLocalDisk = "100000" overflowToDisk = "true" eternal = "false" timeToIdleSeconds = "300" timeToLiveSeconds = "600" /> |
三、增加filter類
1、增加添加緩存過濾器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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類的原因是要自己創(chuàng)建CacheManager,不然會是自動創(chuàng)建,默認會去根目錄找"ehcache.xml",和我們已有的配置不符。
2、增加清除緩存過濾器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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(); //請求繼續(xù)執(zhí)行 chain.doFilter(httpRequest, httpResponse); } } |
四、運行測試
第一次訪問"http://localhost:8080/demo1/hello/list2"地址,會進入Controller中的斷點:
第二次訪問就不會進入斷點了,頁面瞬間加載好
點擊"刪除"按鈕,會進入TestPageRemoveCachingFilter過濾器的斷點:
之后再訪問list2又會重新進入Controller中的斷點
實例代碼地址:spring-ehcache.rar
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/ctxsdhy/p/6421032.html