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 @Override
58 public void processCacheRequest(HttpServletRequest request,
59 HttpServletResponse response, FilterChain chain, Cache cache,
60 CachePolicyResult cachePolicy) throws IOException, ServletException {
61 CachedEntry cached = (CachedEntry) cachePolicy.getCachedEntry();
62 processCachedEntry(cached, request, response, chain);
63 }
64
65 protected void processCachedEntry(CachedEntry cached, HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
66 log.debug("Serving {}", cached);
67 if (cached instanceof ContentCachedEntry) {
68 final ContentCachedEntry page = (ContentCachedEntry) cached;
69 if (!ifModifiedSince(request, page.getLastModificationTime())) {
70 if (response.isCommitted()) {
71
72 log.warn("Unable to change status on already committed response {}.", response.getClass().getName());
73 } else {
74 response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
75 return;
76 }
77 }
78
79
80 }
81
82 if (cached != null) {
83 try {
84 cached.replay(request, response, chain);
85 response.flushBuffer();
86 } catch (IOException e) {
87
88
89 log.debug("Exception while serving resource from cache: " + e.getClass().getName() + ": " + e.getMessage(), e);
90 return;
91 }
92 } else {
93
94 }
95 }
96
97 }