X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2Fannotations%2FCacheSeconds.java;fp=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2Fannotations%2FCacheSeconds.java;h=e076e0875d51401688daf55e83220ba01579e97d;hp=0000000000000000000000000000000000000000;hb=75b55d74f57705c6c5ebee2bcd66c87f3f09089d;hpb=397f5a682248103663ddd0db81decdcdee1c37fc diff --git a/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/annotations/CacheSeconds.java b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/annotations/CacheSeconds.java new file mode 100644 index 00000000..e076e087 --- /dev/null +++ b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/annotations/CacheSeconds.java @@ -0,0 +1,52 @@ +package de.halbekunst.juplo.cachecontrol.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.servlet.http.HttpServletRequest; + +/** + * Mit dieser Annotation können Klassen oder Methoden merkiert werden. + *
+ * Wenn eine Methode markiert wird, muss diese eine Instanz von
+ * {@link HttpServletRequest} als (einziges!) Argument akzeptieren und einen
+ * Wert liefern, der sich nach int
casten lässt.
+ * Die annotierte Methode ermöglicht eine einfache, zentrale aber Request-
+ * Abhängige Steuerung des Caching-Verhaltens.
+ *
+ * Wenn eine Klasse annotiert wird, muss der Anotation die dann statisch für
+ * alle von der Klasse erzeugten Antworten gültige Cache-Zeit als Argument
+ * übergeben werden.
+ * Wird keine Cache-Zeit spezifiziert, wird der Wert 86400
+ * (ein Tag) verwendet.
+ *
0
festgelegt wird, wird
+ * 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
+ * der Annotation {@link LastModified} vollständig für ein einfaches aber
+ * effektives Caching aus.
+ * TODO
+ * 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!
+ *
+ * @author kai
+ * @See Cacheable
+ * @See LastModified
+ * @See CacheControl
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.TYPE, ElementType.METHOD })
+public @interface CacheSeconds {
+ int value() default 86400; /** Default: 1 Tag */
+}