1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.cache.executor;
35
36 import info.magnolia.module.cache.Cache;
37 import info.magnolia.module.cache.CachePolicyResult;
38 import info.magnolia.module.cache.filter.CachedEntry;
39 import info.magnolia.module.cache.filter.ContentCachedEntry;
40
41 import java.io.IOException;
42
43 import javax.servlet.FilterChain;
44 import javax.servlet.ServletException;
45 import javax.servlet.http.HttpServletRequest;
46 import javax.servlet.http.HttpServletResponse;
47
48
49
50
51
52
53
54 public class UseCache extends AbstractExecutor {
55 private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UseCache.class);
56
57 public void processCacheRequest(HttpServletRequest request,
58 HttpServletResponse response, FilterChain chain, Cache cache,
59 CachePolicyResult cachePolicy) throws IOException, ServletException {
60 CachedEntry cached = (CachedEntry) cachePolicy.getCachedEntry();
61 processCachedEntry(cached, request, response, chain);
62 }
63
64 protected void processCachedEntry(CachedEntry cached, HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
65 log.debug("Serving {}", cached);
66 if (cached instanceof ContentCachedEntry) {
67 final ContentCachedEntry page = (ContentCachedEntry) cached;
68 if (!ifModifiedSince(request, page.getLastModificationTime())) {
69 if (response.isCommitted()) {
70
71 log.warn("Unable to change status on already commited response {}.", response.getClass().getName());
72 } else {
73 response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
74 return;
75 }
76 }
77
78
79 }
80
81 if (cached != null) {
82 cached.replay(request, response, chain);
83 response.flushBuffer();
84 } else {
85
86 }
87 }
88
89 }