2011-10-01 109 views
4

我使用RESTFul服務作爲後端到我的前端。該服務在其響應中設置了過期/ etag/last修飾的標頭。如何像瀏覽器一樣實現客戶端HTTP緩存?

我在找的是一個客戶端(有利的java)庫,它可以從服務中獲取數據並將其緩存在可插入緩存後端(如ehcache)中。

我也希望能夠做的是在條目無效時自動使用後臺工作線程來初始化緩存。另外,做條件GET也應該很聰明。

我遇到 http://hc.apache.org/httpcomponents-client-ga/tutorial/html/caching.html

是否有任何其他圖書館的人都知道呢?這不是一個相當普遍的問題嗎?

回答

2

Java中客戶端HTTP緩存的情況並不是特別好。這是一個不平凡的問題,並未受到大多數HTTP客戶端庫開發人員的攻擊。

我認爲這是變化緩慢,但我不能提供一個明確的指針。開始的一個好方法是查看JAX-RS的各種實現,這些實現與客戶端API(例如Jersey)(沒有客戶端緩存)一起提供。可能是Restlet有一個或Restfulie,請檢查。

下面是我通過谷歌發現:

http://xircles.codehaus.org/projects/httpcache4j

您也可以嘗試推出自己的,但你必須要小心,瞭解緩存頭(而變:)得到它的權利。

1

RestEasy具有client side caching機制,如果您正在使用此類客戶端,那麼啓動和運行的機制很小。

RegisterBuiltin.register(ResteasyProviderFactory.getInstance()); 
YourService proxy = ProxyFactory.create(YourService.class, url); 

LightweightBrowserCache cache = CacheFactory.makeCacheable(proxy); 

您首先創建一個客戶端代理實例,然後將其包裝在緩存中。而已。

10

4.0 +版本的Apache HttpComponents庫附帶HTTP 1.1緩存支持。您可以使用Spring RestTemplate寧靜客戶端,如下所示:

CacheConfig cacheConfig = new CacheConfig(); 
    cacheConfig.setMaxCacheEntries(1000); 
    cacheConfig.setMaxObjectSize(8192); 

    HttpClient cachingClient = new CachingHttpClient(new DefaultHttpClient(), cacheConfig); 

    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(cachingClient); 
    RestTemplate rest = new RestTemplate(requestFactory); 
相關問題