import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; public class MemoryCache extends ResponseCache { private Map responses = new ConcurrentHashMap(); private int maxEntries = 100; public MemoryCache() { this(100); } public MemoryCache(int maxEntries) { this.maxEntries = maxEntries; } public CacheRequest put(URI uri, URLConnection uc) throws IOException { if (responses.size() >= maxEntries) return null; String cacheControl = uc.getHeaderField("Cache-Control"); if (cacheControl != null && cacheControl.indexOf("no-cache") >= 0) { return null; } SimpleCacheRequest request = new SimpleCacheRequest(); SimpleCacheResponse response = new SimpleCacheResponse(request, uc); responses.put(uri, response); return request; } public CacheResponse get(URI uri, String requestMethod, Map> requestHeaders) throws IOException { SimpleCacheResponse response = responses.get(uri); if (response != null && response.isExpired()) { // check expiration date responses.remove(response); response = null; } return response; } }