X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2Fannotations%2FLastModified.java;fp=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2Fannotations%2FLastModified.java;h=be28e0ea1b6bad74508766936d8651a38dbf55d4;hp=0000000000000000000000000000000000000000;hb=75b55d74f57705c6c5ebee2bcd66c87f3f09089d;hpb=397f5a682248103663ddd0db81decdcdee1c37fc diff --git a/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/annotations/LastModified.java b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/annotations/LastModified.java new file mode 100644 index 00000000..be28e0ea --- /dev/null +++ b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/annotations/LastModified.java @@ -0,0 +1,53 @@ +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.HttpServlet; +import javax.servlet.http.HttpServletRequest; + +/** + * Über diese Annotation kann der Inhalt des Last-Modified-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 + * Wert liefern, der sich nach long casten lässt. + * Die Signatur der Methode entspricht der Methode + * {@link HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest)} + * aus dem HttpServlet-Interface. + * Um das Cache-Verhalten ein existierendes Servlet, das diese Methode bereits + * implementiert, mit Juplo-CacheControll zu verbessern, kann als erste + * Maßnahme daher einfach diese Methode mit dieser Annotation markiert werden. + *

+ * Wenn eine Klasse Annotiert wird, muss der Annotation der Wert für den + * Last-Modified-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. + *

+ * Über diese Annotation wird der Zeitpunkt gesteuert, zu dem die gelieferte + * Ressource zuletzt verändert wurde. + * Erwartet wird eine Zeitangabe in Millisekunden seit dem Unix-0-Zeitpunkt, + * die dann an {@link HttpServletResponse#setDateHeader(String, long)} + * weitergegeben wird. + *

+ * 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. + * + * @author kai + * @see Cacheable + * @see CacheSeconds + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.TYPE, ElementType.METHOD }) +public @interface LastModified { + long value() default 0; +}