X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=cachecontrol%2Fsrc%2Fmain%2Fjava%2Fde%2Fhalbekunst%2Fjuplo%2Fcachecontrol%2FAcceleratorFilter.java;h=e881a8ed82c71e5021b4df290ed98a37d0e7d6bf;hp=71c799c3185466ad7b856e6bbaf1c1597fa273d1;hb=baf207bba5be3121a57f76f2e70231c01180b34c;hpb=61a37d1d42af6c569d61f77f1939af578060aa41 diff --git a/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java index 71c799c3..e881a8ed 100644 --- a/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java +++ b/cachecontrol/src/main/java/de/halbekunst/juplo/cachecontrol/AcceleratorFilter.java @@ -62,21 +62,18 @@ public class AcceleratorFilter implements Filter { return; } - // TODO: Das macht so wahrscheinlich keinen Sinn... - /** Prüfen, ob es sich um eine Anfrage für einen JSP-Include handelt */ - if (request.getAttribute(REQUEST_URI_ATTRIBUTE) != null) { - log.debug("Includes cannot be accelerated"); - chain.doFilter(request, response); - return; - } - HttpServletRequest httpRequest = (HttpServletRequest)request; HttpServletResponse httpResponse = (HttpServletResponse)response; AccelerationWrapper wrapper = new AccelerationWrapper(httpRequest, httpResponse); httpRequest.setAttribute(RESPONSE_WRAPPER, wrapper); cacheControl.init(wrapper); - chain.doFilter(request, wrapper); - wrapper.finish(); + try { + chain.doFilter(request, wrapper); + wrapper.finish(); + } + catch (NotModifiedException nm) { + log.trace("Not modified: {}", httpRequest.getRequestURI()); + } } @Override @@ -333,6 +330,7 @@ public class AcceleratorFilter implements Filter { */ response.reset(); pos = 0; + size = 0; stream = null; writer = null; } @@ -343,8 +341,6 @@ public class AcceleratorFilter implements Filter { writer.flush(); else if (stream != null) stream.flush(); - - out.flush(); } @Override @@ -649,9 +645,17 @@ public class AcceleratorFilter implements Filter { public void write(int i) throws IOException { if (pos == bufferSize) { out().write(buffer); - pos = 0; committed = true; - cacheControl.decorate(request, response, this); + /** Dekoration nur beim ersten Schreib-Schub anstoßen */ + if (pos == size) { + if (!cacheControl.decorate(request, response)) { + zipped = false; + os = null; + pos = 0; + throw new NotModifiedException(); + } + } + pos = 0; } buffer[pos++] = (byte) i; size++; @@ -663,7 +667,15 @@ public class AcceleratorFilter implements Filter { return; committed = true; - cacheControl.decorate(request, response, this); + /** Dekoration nur beim ersten Schreib-Schub anstoßen */ + if (pos == size) { + if (!cacheControl.decorate(request, response)) { + zipped = false; + os = null; + pos = 0; + throw new NotModifiedException(); + } + } out().write(buffer, 0, pos); out().flush(); pos = 0; @@ -674,7 +686,8 @@ public class AcceleratorFilter implements Filter { if (size == 0) { committed = true; zipped = false; - cacheControl.decorate(request, response, this); + if (!cacheControl.decorate(request, response)) + throw new NotModifiedException(); sos.close(); } else { @@ -685,3 +698,5 @@ public class AcceleratorFilter implements Filter { } } } + +class NotModifiedException extends IOException {} \ No newline at end of file