X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2FCacheable.java;fp=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2FCacheable.java;h=75ac11020a7dcfa180dcb18a8f72b2690c5f5912;hb=f3ec05942f7f5cbf3417bf71b5727b9007739bfd;hp=0000000000000000000000000000000000000000;hpb=c3556bca6ffcc6556393d77fa773b2703e9ad99b;p=percentcodec
diff --git a/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/Cacheable.java b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/Cacheable.java
new file mode 100644
index 00000000..75ac1102
--- /dev/null
+++ b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/Cacheable.java
@@ -0,0 +1,153 @@
+package de.halbekunst.juplo.cachecontrol;
+
+
+import java.util.Map;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * Wenn ein Handler (i.A. eine Impelementierung von {@Controller}),
+ * dieses Interface implementiert, dann schreibt
+ * {@link CachingInterceptor} HTTP/1.1-Caching-Header nach
+ * {@linkplain http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html RFC 2616}
+ * in den Response.
+ *
+ * @see CachingInterceptor
+ * @author kai
+ */
+public interface Cacheable {
+ public boolean accepts(HttpServletRequest request);
+
+ /**
+ * Wenn die Methode false
zurückliefert, werden von
+ * {@link CachingDispatcherServlet#isRessourceModified(HttpServletRequest, HttpServletResponse, Cacheable)}
+ * keinerlei HTTP/1.1-Cache-Header in den Response eingebaut.
+ *
+ * Ãber diese Methode kann z.B. gesteuert werden, dass für eine bestimmte
+ * HTTP-Methode (z.B. POST) keine Cache-Header generiert werden.
+ *
+ * @see CachingDispatcherServlet
+ * @param request
+ * Der aktuelle HTTP-Request
+ * @return true
, wenn Caching-Header in den Response geschrieben
+ * werden sollen, sonst false
.
+ * @throws IllegalArgumentException
+ * Wenn zu dem Request keine Ressource existiert.
+ */
+ public boolean isGenerateCacheHeaders(HttpServletRequest request) throws IllegalArgumentException;
+
+ /**
+ * Diese Methode ermöglicht eine einfache, zentrale Steuerung des
+ * Caching-Verhaltens.
+ *
0
(oder einen anderen Wert
+ * kleiner 1
) zurückliefert, werden Cache-Header erzeugt, die das
+ * Cachen der Antwort für HTTP/1.0 und HTTP/1.1 vollständig untersagen,0
zurückliefert, wird
+ * ein für HTTP/1.0-Clients ein Expires
-Header generiert und für
+ * HTTP/1.1-Clients ein Cache-Control
-Header mit einem
+ * entsprechenden max-age
-Eintrag. Dies reicht in Kombination mit
+ * einem sinnvollen Rückgabewert der Methode
+ * {@link #getLastModified(javax.servlet.http.HttpServletRequest)} vollständig
+ * für ein einfaches Caching aus.
+ * Zu beachten: Wenn die Methode
+ * {@link #getCacheControl(javax.servlet.http.HttpServletRequest)} weitere
+ * Schlüssel-Wert-Paare für den Cache-Control
-Header liefert,
+ * werden diese ergänzt. Wenn in der Rückgabe ein Wert für
+ * max-age
enthalten ist, wir er allerdings von dem durch diese
+ * Methode vorgegebenen Wert überschrieben!
+ *
+ * @see #getLastModified(javax.servlet.http.HttpServletRequest)
+ * @see #getCacheControl(javax.servlet.http.HttpServletRequest)
+ * @param request
+ * Der aktuelle HTTP-Request
+ * @return Die gewünschte Cache-Zeit in Sekunden, oder 0
, wenn
+ * Caching aktiv unterbunden werden soll bzw. einen Wert kleiner
+ * 0
, wenn kein Expires
-Header generiert
+ * werden soll.
+ * @throws IllegalArgumentException
+ * Wenn zu dem Request keine Ressource existiert.
+ */
+ public int getCacheSeconds(HttpServletRequest request) throws IllegalArgumentException;
+
+ /**
+ * Zeitpunkt, zu dem die Ressource zuletzt verändert wurde. Erwartet wird eine
+ * Zeitangabe in Millisekunden seit dem Unix-0-Zeitpunkt, wie sie von
+ * {@link HttpServletResponse#setDateHeader(String, long)} erwartet wird.
+ *
+ * Zu beachten: + *
0
liefert."24afh2w3848adf"
+ * W/"839482"
+ * ""
+ * + * Zu beachten: + *
0
liefert.null
, wenn der Header
+ * nicht generiert werden soll.
+ * @throws IllegalArgumentException
+ * Wenn zu dem Request keine Ressource existiert.
+ */
+ public String getETag(HttpServletRequest request) throws IllegalArgumentException;
+
+ /**
+ * Diese Methode liefert eine Map mit Schlüssel-Wert-Paaren für den
+ * HTTP/1.1-Header Cache-Control
(s. {@plainlink
+ * http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3 RFC2616,
+ * Abschnitt 14.9.3}).
+ * + * Zu beachten: + *
null
zurückliefern!max-age
wird überschrieben,
+ * wenn die Methode
+ * {@link #getCacheSeconds(javax.servlet.http.HttpServletRequest)} einen Wert
+ * gröÃer 0
zurückliefert.0
liefert.Map
mit den Schlüssel-Wert-Paaren für den
+ * Cache-Control
-Header.
+ * @throws IllegalArgumentException
+ * Wenn zu dem Request keine Ressource existiert.
+ */
+ public Map