国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 使用filter實現url級別內存緩存示例

使用filter實現url級別內存緩存示例

2019-11-16 14:05java教程網 JAVA教程

這篇文章主要介紹了使用filter實現url級別內存緩存示例,只需要一個靜態類,在filter中調用,也可以全部寫到filt里面??梢愿鶕樵儏捣謩e緩存,需要的朋友可以參考下

用到了fastJson用來解析配置,原理是通過自己實現response類來得到輸出的內容

 

復制代碼代碼如下:


package saleandbuy.freemodule.web.filter;

 

import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class CacheResp {
 private long waitTime=1000*3;

 private static Map<String,CacheInfo> cfgMap=new HashMap<String, CacheResp.CacheInfo>();

 public static final String QUERY_STRINGS="queryStrings";
 public static final String CACHED_TIME="cachedTime";
 public static final String CACHE_CONFIG="cacheConfig";

 public static void config(String cfgJson) {
  JSONObject cfg=JSON.parseObject(cfgJson);
  for (Map.Entry<String, Object> entry : cfg.entrySet()) {
   String key=entry.getKey();
   Map<String, Object> value=(Map<String, Object>) entry.getValue();
   List queryStrings= (JSONArray)value.get(QUERY_STRINGS);
   Integer cachedTime=(Integer) value.get(CACHED_TIME);
   CacheInfo cacheInfo=new CacheInfo(queryStrings,cachedTime);
   cfgMap.put(key, cacheInfo);
  }
 }

 public static void cachedDo(HttpServletRequest request, HttpServletResponse response,FilterChain chain) throws IOException, ServletException {
  CacheInfo cacheInfo=getCacheInfo(request);
  String queryString=request.getQueryString();
  //cacheInfo為空則不需要緩存,不為空則需要緩存
  if(cacheInfo!=null){
   long now=System.currentTimeMillis();
   synchronized (CacheResp.class) {
    if(now-cacheInfo.lastUpdateTime>cacheInfo.cachedTime){
     System.out.println("not use cache:"); 
     ProxyResponse proxyResponse=new ProxyResponse(response);
     chain.doFilter(request, proxyResponse);
     cacheInfo.cacheMap.put(queryString, proxyResponse.getBuffer());
     cacheInfo.lastUpdateTime=now;
    }else {
     System.out.println("use cache");
    }
   }
   String cacheStr=cacheInfo.cacheMap.get(queryString).toString();
   response.getWriter().write(cacheStr);
  }else {
   chain.doFilter(request, response);
  }
 }

 private static CacheInfo getCacheInfo(HttpServletRequest request){
  String key=request.getRequestURI().replace(request.getContextPath(), "");
  CacheInfo cacheInfo=cfgMap.get(key);
  if(cacheInfo!=null&&
    cacheInfo.needCache(request.getQueryString())){
   return cacheInfo;
  }
  return null;
 }

 public static class CacheInfo{
  public List queryStrings=Arrays.asList(new String[]{"list","index"});
  public long cachedTime=1000;
  public long lastUpdateTime=0;
  public Map<String, StringBuffer> cacheMap=new HashMap<String, StringBuffer>();

  public CacheInfo(List queryStrings, Integer cachedTime) {
   super();
   if(cachedTime!=null){
    this.cachedTime = cachedTime;
   }
   this.queryStrings = queryStrings;
  }

  /**
   * 
   * @param queryStrings request.getQueryString
   * @return
   */
  public boolean needCache(String queryStrings) {
   if(queryStrings==null){//queryStrings為空時默認緩存所有的查詢
    return true;
   }
   return queryStrings.contains(queryStrings);
  }

 }

 private static class ProxyResponse extends HttpServletResponseWrapper{

  private StringWriter sw=new StringWriter();

//  private ByteArrayOutputStream baos=new ByteArrayOutputStream();

  public ProxyResponse(HttpServletResponse response) {
   super(response);
  }

  @Override
  public PrintWriter getWriter() throws IOException {
   return new PrintWriter(sw);
  }

  public StringBuffer getBuffer() {
   return sw.getBuffer();
  }
 }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久草福利在线视频 | 久久国产精品免费一区二区三区 | 国产午夜视频 | 国产精品美女久久久久久久久久久 | 国产v日产∨综合v精品视频 | 在线无吗 | 国产成人精品一区二区三区四区 | 欧美一级二级视频 | 伊人网站 | 尤物视频在线观看 | 亚洲精品久久 | 一级特黄录像免费播放全99 | 伊人久久综合 | 日韩av视屏 | 亚洲人人 | 国产精品中文字幕在线 | 人人叉人人 | 成人a视频| 一区二区三区日本 | 欧洲一级毛片 | 亚洲在线视频 | 91在线精品一区二区三区 | 国产欧美日韩综合精品一区二区 | 亚洲一区二区精品 | 久久伊人亚洲 | 国产男女做爰免费网站 | 国产精品久久久久久久久久久久 | 欧美精品成人一区二区在线 | 99精品国产高清在线观看 | jvid精品资源在线观看 | 久久性| 亚州中文| 在线日韩中文字幕 | 91精品综合久久久久久五月天 | 91精品久久久久久久久久 | 日韩中文字幕一区 | 黄色免费视频 | 久久综合成人精品亚洲另类欧美 | 免费毛片黄色视频 | 99精品国产一区二区三区 | 亚洲视频在线播放 |