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.HttpServlet;
8 import javax.servlet.http.HttpServletRequest;
11 * Über diese Annotation kann der Inhalt des <code>Last-Modified</code>-Headers
13 * Mit dieser Annotation können Klassen oder Methoden merkiert werden.
15 * Wenn eine Methode annotiert wird, muss diese eine Instanz von
16 * {@link HttpServletRequest} als (einziges!) Argument akzeptieren und einen
17 * Wert liefern, der sich nach <code>long</code> casten lässt.
18 * Die Signatur der Methode entspricht der Methode
19 * {@link HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest)}
20 * aus dem <code>HttpServlet</code>-Interface.
21 * Um das Cache-Verhalten ein existierendes Servlet, das diese Methode bereits
22 * implementiert, mit Juplo-CacheControll zu verbessern, kann als erste
23 * Maßnahme daher einfach diese Methode mit dieser Annotation markiert werden.
25 * Wenn eine Klasse Annotiert wird, muss der Annotation der Wert für den
26 * <code>Last-Modified</code>-Header übergeben werden.
27 * Da dieser Wert somit statisch ist, macht es nur Sinn, Klassen mit dieser
28 * Annotation zu markieren, die ausschließlich statische Ressourcen ausliefern,
29 * die sich nur mit der Neuinstallation der Webanwendung ändern.
31 * Über diese Annotation wird der Zeitpunkt gesteuert, zu dem die gelieferte
32 * Ressource zuletzt verändert wurde.
33 * Erwartet wird eine Zeitangabe in Millisekunden seit dem Unix-0-Zeitpunkt,
34 * die dann an {@link HttpServletResponse#setDateHeader(String, long)}
37 * <strong>Zu beachten:</strong>
38 * Wenn zugleich die Annotation {@link CacheSeconds} verwendet wird, wird
39 * die mit dieser Annotation markierte Methode nur aufgerufen, wenn die mit
40 * der Annotation {@link CacheSeconds} markierte Methode einen Wert größer
41 * oder gleich <code>0</code> liefert, bzw. für die mit Annotation
42 * {@link CacheSeconds} markierte Klasse eine Cache-Zeit größer oder gleich
43 * <code>0</code> festgelegt wurde.
49 @Retention(RetentionPolicy.RUNTIME)
50 @Target({ ElementType.TYPE, ElementType.METHOD })
51 public @interface LastModified {
52 long value() default 0;