1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.ObjectInputStream;
  6. import java.io.ObjectOutputStream;
  7.  
  8. import my.httpClient.MD5Helper;
  9.  
  10. import org.apache.http.client.cache.HttpCacheEntry;
  11. import org.apache.http.client.cache.HttpCacheStorage;
  12. import org.apache.http.client.cache.HttpCacheUpdateCallback;
  13. import org.apache.http.client.cache.HttpCacheUpdateException;
  14.  
  15. public class DiskCache implements HttpCacheStorage {
  16.  
  17. public DiskCache() {
  18.  
  19. }
  20.  
  21. public HttpCacheEntry getEntry(String url) throws IOException {
  22.  
  23. HttpCacheEntry entry = null;
  24.  
  25. // 一个文件一个缓存项,使用 请求的url进行hash
  26. String path = getPath(url);
  27. // System.out.println("path:" + path);
  28. // 判断文件是否存在
  29. File file = new File(path);
  30. if (file.exists() == false) {
  31. return null;
  32. }
  33.  
  34. try {
  35. ObjectInputStream in = new ObjectInputStream(new FileInputStream(
  36. path));
  37. entry = (HttpCacheEntry) in.readObject();
  38. in.close();
  39. // System.out.println("object read here:");
  40. } catch (ClassNotFoundException e) {
  41. e.printStackTrace();
  42. }
  43.  
  44. return entry;
  45.  
  46. }
  47.  
  48. public void putEntry(String url, HttpCacheEntry entry) throws IOException {
  49.  
  50. String path = getPath(url);
  51.  
  52. ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
  53. path));
  54. out.writeObject(entry);
  55.  
  56. // System.out.println("object has been written..");
  57. out.close();
  58.  
  59. }
  60.  
  61. public void removeEntry(String url) throws IOException {
  62.  
  63. String path = getPath(url);
  64.  
  65. // 判断文件是否存在
  66. File file = new File(path);
  67. if (file.exists() == true) {
  68.  
  69. file.delete();
  70. }
  71. }
  72.  
  73. public void updateEntry(String url, HttpCacheUpdateCallback callback)
  74. throws IOException, HttpCacheUpdateException {
  75.  
  76. String path = getPath(url);
  77. HttpCacheEntry existingEntry = null;
  78.  
  79. // 判断文件是否存在,若文件存在,则取出文件的内容
  80. File file = new File(path);
  81. if (file.exists() == true) {
  82.  
  83. ObjectInputStream in = new ObjectInputStream(new FileInputStream(
  84. path));
  85. try {
  86. existingEntry = (HttpCacheEntry) in.readObject();
  87. } catch (ClassNotFoundException e) {
  88. e.printStackTrace();
  89. }
  90. in.close();
  91. System.out.println("object read here:");
  92. }
  93.  
  94. HttpCacheEntry updatedEntry = callback.update(existingEntry); // 获取更新过的缓存实体
  95.  
  96. // 不管存在不存在,都用保存新的实体项。
  97. putEntry(url, updatedEntry);
  98.  
  99. }
  100.  
  101. /*
  102. * 根据url地址获取缓存项在文件系统中的存储地址
  103. */
  104. private String getPath(String url) {
  105. String key = MD5Helper.string2MD5(url);
  106. String path = "c:\\http-cache\\" + key;
  107. return path;
  108. }
  109.  
  110. }

参考资料:

http://hc.apache.org/httpcomponents-client-ga/httpclient-cache/xref/index.html

http://hc.apache.org/httpcomponents-client-ga/httpclient-cache/xref/org/apache/http/impl/client/cache/ManagedHttpCacheStorage.html

apache httpclient CacheStorage的一个自定义实现的更多相关文章

  1. Apache HttpClient 5 使用详细教程

    点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 超文本传输协议(HTTP)可能是当今 ...

  2. 一个封装的使用Apache HttpClient进行Http请求(GET、POST、PUT等)的类。

    一个封装的使用Apache HttpClient进行Http请求(GET.POST.PUT等)的类. import com.qunar.payment.gateway.front.channel.mp ...

  3. 如何在Apache HttpClient中设置TLS版本

    1.简介 Apache HttpClient是一个底层.轻量级的客户端HTTP库,用于与HTTP服务器进行通信. 在本教程中,我们将学习如何在使用HttpClient时配置支持的传输层安全(TLS)版 ...

  4. 论httpclient上传带参数【commons-httpclient和apache httpclient区别】

    需要做一个httpclient上传,然后啪啪啪网上找资料 1.首先以前系统中用到的了commons-httpclient上传,找了资料后一顿乱改,然后测试 PostMethod filePost = ...

  5. 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”

    摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...

  6. Apache HttpClient使用之阻塞陷阱

    前言: 之前做个一个数据同步的定时程序. 其内部集成了某电商的SDK(简单的Apache Httpclient4.x封装)+Spring Quartz来实现. 原本以为简单轻松, 喝杯咖啡就高枕无忧的 ...

  7. 使用Apache HttpClient 4.x发送Json数据

    Apache HttpClient是Apache提供的一个开源组件,使用HttpClient可以很方便地进行Http请求的调用.自4.1版本开始,HttpClient的API发生了较大的改变,很多方法 ...

  8. 《Apache HttpClient 4.3开发指南》

    转载自:http://blog.csdn.net/chszs/article/details/16854747 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chs ...

  9. apache 网页301重定向、自定义400/403/404/500错误页面

    首先简单介绍一下,.htaccess文件是Apache服务器中的一个配置文件(Nginx服务器没有),它负责相关目录下的网页配置.通过对.htaccess文件进行设置,可以帮我们实现:网页301重定向 ...

随机推荐

  1. gerrit 部署手册

    概述 gerrit是谷歌开发用于安卓系统的代码审查的系统,目前已经开源.gerrti使用简单并友好.这里记录了gerrti的部署方法以及其中可能存在的陷阱和问题. 创建专属系统用户 Gerrit co ...

  2. ORACLE存储过程创建失败,如何查看其原因

    工作中用SQL Server比较多,Oracle可以说是小白,最近想用存储过程来完成单据复制的功能,结果遇到各种问题,其实都是非常简单的问题,但是对我来说还是花了很多时间来解决,浪费这些时间非常不值得 ...

  3. DataSet用法详细 转

    DataSet用法详细 转 DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级 ...

  4. C# 5.0新推出的async和await

    class Program { static void Main(string[] args) { Test t = new Test(); } } public class Test { publi ...

  5. Shell文本处理 - 分割合并与过滤

    sort分类操作 示例文件 Boys in Company C:HK:192:2192 Alien:HK:119:1982 The Hill:KL:63:2972 Aliens:HK:532:4892 ...

  6. iOS随机页面NSClassFromString

      NSString *className = self.classNameArray[randomNumber]; Class viewClass = NSClassFromString(class ...

  7. Trie 最长前缀匹配串的实现

    http://blog.csdn.net/hguisu/article/details/8131559

  8. Freemarket学习整理。

    导入freemarker.jar包 把word文档另存为xml格式,2007以上版本支持. 编写代码,把路径更改为xml所在路径. 把需要更改的地方写成${}形式. package Document. ...

  9. php设计模式--单例模式

    单例模式(Singleton Pattern 单件模式或单元素模式) 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式是一种常见的设计模式,在计算机系统中,线程池.缓 ...

  10. ros下多机器人系统(1)

    multi-robot system 经过两个多月的ros学习,对ros的认识有了比较深入的了解,本篇博客主要记录在ros下开发多机器人系统以及对ros更深入的开发.本篇博客是假定读者已经学习完了全部 ...