apache httpclient CacheStorage的一个自定义实现
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import my.httpClient.MD5Helper;
- import org.apache.http.client.cache.HttpCacheEntry;
- import org.apache.http.client.cache.HttpCacheStorage;
- import org.apache.http.client.cache.HttpCacheUpdateCallback;
- import org.apache.http.client.cache.HttpCacheUpdateException;
- public class DiskCache implements HttpCacheStorage {
- public DiskCache() {
- }
- public HttpCacheEntry getEntry(String url) throws IOException {
- HttpCacheEntry entry = null;
- // 一个文件一个缓存项,使用 请求的url进行hash
- String path = getPath(url);
- // System.out.println("path:" + path);
- // 判断文件是否存在
- File file = new File(path);
- if (file.exists() == false) {
- return null;
- }
- try {
- ObjectInputStream in = new ObjectInputStream(new FileInputStream(
- path));
- entry = (HttpCacheEntry) in.readObject();
- in.close();
- // System.out.println("object read here:");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- return entry;
- }
- public void putEntry(String url, HttpCacheEntry entry) throws IOException {
- String path = getPath(url);
- ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
- path));
- out.writeObject(entry);
- // System.out.println("object has been written..");
- out.close();
- }
- public void removeEntry(String url) throws IOException {
- String path = getPath(url);
- // 判断文件是否存在
- File file = new File(path);
- if (file.exists() == true) {
- file.delete();
- }
- }
- public void updateEntry(String url, HttpCacheUpdateCallback callback)
- throws IOException, HttpCacheUpdateException {
- String path = getPath(url);
- HttpCacheEntry existingEntry = null;
- // 判断文件是否存在,若文件存在,则取出文件的内容
- File file = new File(path);
- if (file.exists() == true) {
- ObjectInputStream in = new ObjectInputStream(new FileInputStream(
- path));
- try {
- existingEntry = (HttpCacheEntry) in.readObject();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- in.close();
- System.out.println("object read here:");
- }
- HttpCacheEntry updatedEntry = callback.update(existingEntry); // 获取更新过的缓存实体
- // 不管存在不存在,都用保存新的实体项。
- putEntry(url, updatedEntry);
- }
- /*
- * 根据url地址获取缓存项在文件系统中的存储地址
- */
- private String getPath(String url) {
- String key = MD5Helper.string2MD5(url);
- String path = "c:\\http-cache\\" + key;
- return path;
- }
- }
参考资料:
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的一个自定义实现的更多相关文章
- Apache HttpClient 5 使用详细教程
点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 超文本传输协议(HTTP)可能是当今 ...
- 一个封装的使用Apache HttpClient进行Http请求(GET、POST、PUT等)的类。
一个封装的使用Apache HttpClient进行Http请求(GET.POST.PUT等)的类. import com.qunar.payment.gateway.front.channel.mp ...
- 如何在Apache HttpClient中设置TLS版本
1.简介 Apache HttpClient是一个底层.轻量级的客户端HTTP库,用于与HTTP服务器进行通信. 在本教程中,我们将学习如何在使用HttpClient时配置支持的传输层安全(TLS)版 ...
- 论httpclient上传带参数【commons-httpclient和apache httpclient区别】
需要做一个httpclient上传,然后啪啪啪网上找资料 1.首先以前系统中用到的了commons-httpclient上传,找了资料后一顿乱改,然后测试 PostMethod filePost = ...
- 一个自定义 HBase Filter -“通过RowKeys来高性能获取数据”
摘要: 大家在使用HBase和Solr搭建系统中经常遇到的一个问题就是:“我通过SOLR得到了RowKeys后,该怎样去HBase上取数据”.使用现有的Filter性能差劲,网上也没有现成的自定义Fi ...
- Apache HttpClient使用之阻塞陷阱
前言: 之前做个一个数据同步的定时程序. 其内部集成了某电商的SDK(简单的Apache Httpclient4.x封装)+Spring Quartz来实现. 原本以为简单轻松, 喝杯咖啡就高枕无忧的 ...
- 使用Apache HttpClient 4.x发送Json数据
Apache HttpClient是Apache提供的一个开源组件,使用HttpClient可以很方便地进行Http请求的调用.自4.1版本开始,HttpClient的API发生了较大的改变,很多方法 ...
- 《Apache HttpClient 4.3开发指南》
转载自:http://blog.csdn.net/chszs/article/details/16854747 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chs ...
- apache 网页301重定向、自定义400/403/404/500错误页面
首先简单介绍一下,.htaccess文件是Apache服务器中的一个配置文件(Nginx服务器没有),它负责相关目录下的网页配置.通过对.htaccess文件进行设置,可以帮我们实现:网页301重定向 ...
随机推荐
- gerrit 部署手册
概述 gerrit是谷歌开发用于安卓系统的代码审查的系统,目前已经开源.gerrti使用简单并友好.这里记录了gerrti的部署方法以及其中可能存在的陷阱和问题. 创建专属系统用户 Gerrit co ...
- ORACLE存储过程创建失败,如何查看其原因
工作中用SQL Server比较多,Oracle可以说是小白,最近想用存储过程来完成单据复制的功能,结果遇到各种问题,其实都是非常简单的问题,但是对我来说还是花了很多时间来解决,浪费这些时间非常不值得 ...
- DataSet用法详细 转
DataSet用法详细 转 DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程序中很有用. 2.可以在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法. 3.处理分级 ...
- C# 5.0新推出的async和await
class Program { static void Main(string[] args) { Test t = new Test(); } } public class Test { publi ...
- Shell文本处理 - 分割合并与过滤
sort分类操作 示例文件 Boys in Company C:HK:192:2192 Alien:HK:119:1982 The Hill:KL:63:2972 Aliens:HK:532:4892 ...
- iOS随机页面NSClassFromString
NSString *className = self.classNameArray[randomNumber]; Class viewClass = NSClassFromString(class ...
- Trie 最长前缀匹配串的实现
http://blog.csdn.net/hguisu/article/details/8131559
- Freemarket学习整理。
导入freemarker.jar包 把word文档另存为xml格式,2007以上版本支持. 编写代码,把路径更改为xml所在路径. 把需要更改的地方写成${}形式. package Document. ...
- php设计模式--单例模式
单例模式(Singleton Pattern 单件模式或单元素模式) 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式是一种常见的设计模式,在计算机系统中,线程池.缓 ...
- ros下多机器人系统(1)
multi-robot system 经过两个多月的ros学习,对ros的认识有了比较深入的了解,本篇博客主要记录在ros下开发多机器人系统以及对ros更深入的开发.本篇博客是假定读者已经学习完了全部 ...