X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=accelerator%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Faccelerator%2Fannotations%2FETag.java;fp=accelerator%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Faccelerator%2Fannotations%2FETag.java;h=81b6d16ae3f71ca44b391f699ea7c9a539bd792d;hp=0000000000000000000000000000000000000000;hb=a6e0e65cce68acb20abc6ca935471611a740c342;hpb=1d395c6002486d485bde0d5dc713886d70bd3f8a diff --git a/accelerator/src/main/java/de/juplo/accelerator/annotations/ETag.java b/accelerator/src/main/java/de/juplo/accelerator/annotations/ETag.java new file mode 100644 index 00000000..81b6d16a --- /dev/null +++ b/accelerator/src/main/java/de/juplo/accelerator/annotations/ETag.java @@ -0,0 +1,84 @@ +package de.juplo.accelerator.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; + +/** + * Über diese Annotation kann der Inhalt des ETag/code>-Headers + * gesteuert werden. + * Mit dieser Annotation können Klassen oder Methoden merkiert werden. + *

+ * Wenn eine Methode annotiert wird, muss diese eine Instanz von + * {@link HttpServletRequest} als (einziges!) Argument akzeptieren und einen + * String liefern. + *

+ * Wenn eine Klasse Annotiert wird, muss der Annotation der Wert für den + * ETag-Header übergeben werden. + * Da dieser Wert somit statisch ist, macht es nur Sinn, Klassen mit dieser + * Annotation zu markieren, die ausschließlich statische Ressourcen ausliefern, + * die sich nur mit der Neuinstallation der Webanwendung ändern. + * Wenn sich (z.B. nach einer Neuinstallation der Webanwendung) die statischen + * Ressourcen geändert haben, muss der übergebene statische ETag geändert + * werden, da Caches sonst weiterhin die alten Ressourcen ausliefern! + *

+ * Frei wählbares ETag nach + * {@linkplain http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.19 RFC 2616, Abschnitt 14.19 ETag}. + * Der gelieferte Wert darf die vom RFC geforderten Anführungszeichen noch nicht + * enthalten, da er, wenn vary gesetzt ist, noch um je nach + * erfolgter Content-Negotiation varriierende Teile ergänzt wird. + *

+ * Die erzeugten ETag's können über die Annotations-Parameter + * weak und vary weiter gesteuert werden. + *

+ * Zu beachten: + * Wenn zugleich die Annotation {@link CacheSeconds} verwendet wird, wird + * die mit dieser Annotation markierte Methode nur aufgerufen, wenn die mit + * der Annotation {@link CacheSeconds} markierte Methode einen Wert größer + * oder gleich 0 liefert, bzw. für die mit Annotation + * {@link CacheSeconds} markierte Klasse eine Cache-Zeit größer oder gleich + * 0 festgelegt wurde. + * + * @see #getCacheSeconds(javax.servlet.http.HttpServletRequest) + * + * @author kai + * @see Cacheable + * @see CacheSeconds + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE, ElementType.METHOD }) +public @interface ETag { + + public final static String ACCEPT = "Accept"; + public final static String ACCEPT_CHARSET = "Accept-Charset"; + public final static String ACCEPT_ENCODING = "Accept-Encoding"; + public final static String ACCEPT_LANGUAGE = "Accept-Language"; + + + String value() default "X"; + boolean weak() default false; + String[] vary() default {}; +}