1 package de.halbekunst.juplo.cachecontrol.annotations;
3 import java.lang.annotation.ElementType;
4 import java.lang.annotation.Retention;
5 import java.lang.annotation.RetentionPolicy;
6 import java.lang.annotation.Target;
7 import javax.servlet.http.HttpServletRequest;
10 * Mit dieser Annotation können Klassen oder Methoden merkiert werden.
12 * Wenn eine Methode markiert wird, muss diese eine Instanz von
13 * {@link HttpServletRequest} als (einziges!) Argument akzeptieren und einen
14 * Wert liefern, der sich nach <code>int</code> casten lässt.
15 * Die annotierte Methode ermöglicht eine einfache, zentrale aber Request-
16 * Abhängige Steuerung des Caching-Verhaltens.
18 * Wenn eine Klasse annotiert wird, muss der Anotation die dann statisch für
19 * alle von der Klasse erzeugten Antworten gültige Cache-Zeit als Argument
21 * Wird keine Cache-Zeit spezifiziert, wird der Wert <code>86400</code>
22 * (ein Tag) verwendet.
24 * <li>Wenn negativer Wert als Cache-Seconds festgelet wird, werden Cache-Header
25 * erzeugt, die das Cachen der Antwort für HTTP/1.0 und HTTP/1.1 vollständig
27 * <li>Wenn einen Wert größer oder gleich <code>0</code> festgelegt wird, wird
28 * für HTTP/1.0-Clients ein <code>Expires</code>-Header generiert und für
29 * HTTP/1.1-Clients ein <code>Cache-Control</code>-Header mit einem
30 * entsprechenden <code>max-age</code>-Eintrag. Dies reicht in Kombination mit
31 * der Annotation {@link LastModified} vollständig für ein einfaches aber
32 * effektives Caching aus.</li>
36 * <strong>Zu beachten:</strong> Wenn die Methode
37 * {@link #getCacheControl(javax.servlet.http.HttpServletRequest)} weitere
38 * Schlüssel-Wert-Paare für den <code>Cache-Control</code>-Header liefert,
39 * werden diese ergänzt. Wenn in der Rückgabe ein Wert für
40 * <code>max-age</code> enthalten ist, wir er allerdings von dem durch diese
41 * Methode vorgegebenen Wert überschrieben!
48 @Retention(RetentionPolicy.RUNTIME)
49 @Target({ ElementType.TYPE, ElementType.METHOD })
50 public @interface CacheSeconds {
51 int value() default 86400; /** Default: 1 Tag */