Podaję obrazy z mojego serwletu. Typ treści odpowiedzi to image/jpeg. Uważam, że obrazy żądane z mojego serwletu nie są buforowane. Jak mogę je ustawić w pamięci podręcznej, tak jak zwykle są to żądania dotyczące plików obrazów? Próbowałem ustawić Cache-Control: publiczną, ale bez skutku.Buforowanie obrazów obsługiwanych przez serwleta
Odpowiedz
Ok .. wygląda jak domyślne pola nagłówka powinny umożliwić buforowanie. Znalazłem rozwiązanie na innym forum. Wygląda na to, że w odpowiedzi musisz jawnie ustawić długość treści. Ciekawe dlaczego. Myślałem, że HttpServletResponse zrobi to za nas. W każdym razie zadziałało to jak urok, a obraz został ładnie zbuforowany.
Na przykład, jeśli chcesz buforować je przez 1 miesiąc:
Calendar inOneMonth = Calendar.getInstance();
inOneMonth.add(Calendar.MONTH, 1);
response.setDateHeader("Expires", inOneMonth.getTimeInMillis());
(to jest w Filter
który obsługuje wzorzec *.jpg
, na przykład)
Ale obrazy powinny być domyślnie buforowane - sprawdź filtry i konfiguracje, aby sprawdzić, czy coś nie ustawia nieprawidłowych parametrów pamięci podręcznej.
Musisz wysyłać nagłówki ETag
, Last-Modified
i Expires
wzdłuż odpowiedzi. Numer ETag
reprezentuje unikalny identyfikator pliku (zwykle składa się z kombinacji nazwy pliku, rozmiaru pliku i ostatnio zmodyfikowanego znacznika czasu). Last-Modified
reprezentuje ostatni zmodyfikowany znacznik czasu pliku. Nagłówek Expires
określa, jak długo klient może przechowywać plik w pamięci podręcznej. Jeśli pamięć podręczna wygasła i dostępne są ETag
lub Last-Modified
, klient wyśle żądanie o numer HEAD
, aby sprawdzić, czy plik wymaga odnowienia. Jeśli nie, to Expires
zostanie po prostu odpowiednio przesunięty.
Można tu znaleźć aplet przykład, który obsługuje to wszystko (i pobierać CV i automatycznej GZIP): FileServlet supporting resume and GZIP
Domyślna serwletów obsługujących zawartość statyczną w pojemnikach jak Tomcat nie ustala żadnych nagłówków kontroli cache. Nie potrzebujesz do tego pisać serwletu. Wystarczy utworzyć filtr w ten sposób,
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);
}
kiedy chcesz dodać kontrolę cache, wystarczy dodać filtr do zasobów w web.xml. Na przykład:
<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>
Nagłówki pracują w milisekundach, więc 'cacheAge' to liczba sekund, przez którą pliki mają być buforowane. –
Czy ten filtr może być używany również do plików css i javascript? – Shadow
- 1. Buforowanie obrazów w Memcached
- 2. Buforowanie obrazów WPF
- 3. Przyczyna "odpowiedzi już zatwierdzonej" przez serwleta
- 4. Buforowanie obrazów z błędem HJCacheClasses
- 5. Odświeżanie statycznych plików obsługiwanych przez SparkJava
- 6. Flex: Buforowanie obrazów w rendererze elementów listy?
- 7. Buforowanie zasobów statycznych zwróconych przez VirtualPathProvider
- 8. Najlepszy sposób na buforowanie obrazów w aplikacji ios?
- 9. Buforowanie obrazów, JS i CSS w Apache przy użyciu deflate
- 10. Buforowanie obrazów z różnymi ciągami zapytań (adresy URL podpisane przez S3)
- 11. Pytając przeglądarki o buforowanie naszych obrazów (ASP.NET/IIS)
- 12. Buforowanie obrazów SVG na Androidzie i użycie pamięci
- 13. Liczba klientów obsługiwanych przez serwer Gamekit w IPhone 3.0
- 14. Czy wiele baz danych jest obsługiwanych przez framework testowy django?
- 15. Lista wszystkich właściwości systemu obsługiwanych przez środowisko JRE
- 16. Obsługa zdarzeń JavaScript nie obsługiwanych przez inne elementy
- 17. Jak uzyskać listę zleceń na stronach internetowych obsługiwanych przez Taleo
- 18. czy struktura danych listy obsługiwanych przez linux shell?
- 19. Wyłączyć buforowanie metodą sprężystości przez właściwość zewnętrzną
- 20. Jak uniemożliwić buforowanie pliku json przez przeglądarkę
- 21. Buforowanie nakładek przez zaokrąglenie współrzędnych prostokątów - jak?
- 22. Jak przesłać pliki obrazów przez WCF?
- 23. Wyświetl listę obsługiwanych walut w iOS
- 24. Buforowanie hibernacji?
- 25. Optymalizacja wydajności w czasie kompilacji przez buforowanie metafunkcji
- 26. Czy przepisanie URL-i blokuje buforowanie plików statycznych przez IIS?
- 27. Jak tworzyć mapy offline (korzystając z ulotek OSM) przez buforowanie?
- 28. buforowanie oauth2 tokenów
- 29. Rozproszone buforowanie
- 30. Buforowanie zmienne
Być może mógłbyś podać link do forum, na którym znalazłeś odpowiedź? – Stewart