我正在從我的servlet提供圖像。響應內容類型是image/jpeg。我發現從我的servlet請求的圖像沒有被緩存。我如何讓它們像文件映像請求一樣被緩存?我試着設置Cache-Control:public但無濟於事。由servlet提供的緩存圖像
回答
好吧..看起來像默認標題字段應啓用緩存。我在另一個論壇找到了解決方案。顯然,您需要在響應中明確設置內容長度。不知道爲什麼。我認爲HttpServletResponse會爲我們做到這一點。無論如何,它像一個魅力,圖像緩存得很好。
例如,如果你希望緩存他們1個月:
Calendar inOneMonth = Calendar.getInstance();
inOneMonth.add(Calendar.MONTH, 1);
response.setDateHeader("Expires", inOneMonth.getTimeInMillis());
(這是一個Filter
處理該*.jpg
模式,例如)
不過,形象應該是默認緩存 - 檢查你的過濾器和配置,看看有沒有不正確地設置緩存參數。
您需要沿響應發送ETag
,Last-Modified
和Expires
標頭。 ETag
表示文件的唯一標識符(通常基於文件名,文件大小和上次修改時間戳的組合)。 Last-Modified
代表文件的最後修改時間戳。 Expires
標頭表示允許客戶端將文件保存在緩存中的時間。如果緩存已過期,並且ETag
或Last-Modified
可用,則客戶端將發送HEAD
請求以檢查文件是否需要更新。如果不是,那麼Expires
將相應地再推遲。
你可以在這裏找到它處理這一切(和下載簡歷和自動GZIP)一個servlet實例:FileServlet supporting resume and GZIP
服務於集裝箱靜態內容,如Tomcat沒有設置任何緩存控制頭默認的servlet。你不需要爲此寫一個servlet。只要創建每當你想添加緩存控制這樣的過濾器,
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
long expiry = new Date().getTime() + cacheAge*1000;
HttpServletResponse httpResponse = (HttpServletResponse)response;
httpResponse.setDateHeader("Expires", expiry);
httpResponse.setHeader("Cache-Control", "max-age="+ cacheAge);
chain.doFilter(request, response);
}
,只需將過濾器添加到資源在web.xml中。例如,
<filter>
<filter-name>CacheControl</filter-name>
<filter-class>filters.CacheControlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheControl</filter-name>
<url-pattern>/images/*</url-pattern>
</filter-mapping>
標題以毫秒爲單位,所以'cacheAge'是你想要緩存的東西的秒數。 – 2012-10-31 13:08:36
這個過濾器可以用於css和javascript文件嗎? – Shadow 2014-04-17 08:43:09
- 1. 配置nginx提供緩存圖像
- 2. 縫緩存提供
- 3. Dropbox提供的瀏覽器緩存圖像
- 4. 空的asp.net資源緩存,由SQLResourceProvider提供
- 5. 從servlet中的文件系統提供靜態圖像文件?
- 6. 緩存圖像
- 7. 檢測Web API請求是否由高速緩存提供
- 8. 通過腳本提供的緩存映像
- 9. Tools.pingdom.com是否提供緩存或無緩存的速度結果?
- 10. iPhone圖像緩存
- 11. Django:緩存圖像
- 12. 圖像緩存8.1
- 13. JWPlayer緩存圖像
- 14. Servlet篩選器提供NullPointerException
- 15. 從servlet開始提供PDF
- 16. 如何緩存經常提供服務的圖片?
- 17. 從ASP.NET MVC中的相同路由URL路徑提供圖像
- 18. 存儲緩存圖像
- 19. 按需提供空Hibernate緩存
- 20. 無法注入煤層緩存提供
- 21. Flex數據提供者緩存問題
- 22. nginx - 只提供圖像
- 23. 給圖像提供信息
- 24. 提供圖像參數$ _GET
- 25. 提供OG:圖像不夠
- 26. 緩存Memcached中的圖像
- 27. 的Flex 3 - 圖像緩存
- 28. 緩存檢索的圖像
- 29. 從其他緩存圖像加載緩存圖像
- 30. 使用jquery緩存indexeddb中的圖像以供離線使用
也許你可以提供一個鏈接到你找到答案的論壇? – Stewart 2012-06-13 22:53:41