Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Wilkins2013-06-03 04:15:55 +0000
committerGreg Wilkins2013-06-03 04:22:24 +0000
commit952f8442e5f07bde3f747a799d4bc56a42a1a0bf (patch)
tree7cac475855b8020dd0dcd4bdea93e5db3524b5a2 /jetty-servlet
parentd581dac2872e7dbb81462559f157ffba7fb8a474 (diff)
downloadorg.eclipse.jetty.project-952f8442e5f07bde3f747a799d4bc56a42a1a0bf.tar.gz
org.eclipse.jetty.project-952f8442e5f07bde3f747a799d4bc56a42a1a0bf.tar.xz
org.eclipse.jetty.project-952f8442e5f07bde3f747a799d4bc56a42a1a0bf.zip
408529 Etags set in 304 response
Improved default servlet setting of etags
Diffstat (limited to 'jetty-servlet')
-rw-r--r--jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java84
1 files changed, 29 insertions, 55 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java
index b5855333a0..e09cbcf2e7 100644
--- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java
+++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java
@@ -658,7 +658,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory
if (ifm!=null)
{
boolean match=false;
- if (content!=null && content.getETag()!=null)
+ if (content.getETag()!=null)
{
QuotedStringTokenizer quoted = new QuotedStringTokenizer(ifm,", ",false,true);
while (!match && quoted.hasMoreTokens())
@@ -671,48 +671,39 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory
if (!match)
{
- Response r = Response.getResponse(response);
- r.reset(true);
- r.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED);
+ response.setStatus(HttpServletResponse.SC_PRECONDITION_FAILED);
return false;
}
}
- String ifnm=request.getHeader(HttpHeader.IF_NONE_MATCH.asString());
- if (ifnm!=null && content!=null && content.getETag()!=null)
+ String if_non_match_etag=request.getHeader(HttpHeader.IF_NONE_MATCH.asString());
+ if (if_non_match_etag!=null && content.getETag()!=null)
{
// Look for GzipFiltered version of etag
if (content.getETag().toString().equals(request.getAttribute("o.e.j.s.GzipFilter.ETag")))
{
- Response r = Response.getResponse(response);
- r.reset(true);
- r.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
- r.getHttpFields().put(HttpHeader.ETAG,ifnm);
+ response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+ response.setHeader(HttpHeader.ETAG.asString(),if_non_match_etag);
return false;
}
-
// Handle special case of exact match.
- if (content.getETag().toString().equals(ifnm))
+ if (content.getETag().toString().equals(if_non_match_etag))
{
- Response r = Response.getResponse(response);
- r.reset(true);
- r.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
- r.getHttpFields().put(HttpHeader.ETAG,content.getETag());
+ response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+ response.setHeader(HttpHeader.ETAG.asString(),content.getETag());
return false;
}
// Handle list of tags
- QuotedStringTokenizer quoted = new QuotedStringTokenizer(ifnm,", ",false,true);
+ QuotedStringTokenizer quoted = new QuotedStringTokenizer(if_non_match_etag,", ",false,true);
while (quoted.hasMoreTokens())
{
String tag = quoted.nextToken();
if (content.getETag().toString().equals(tag))
{
- Response r = Response.getResponse(response);
- r.reset(true);
- r.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
- r.getHttpFields().put(HttpHeader.ETAG,content.getETag());
+ response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+ response.setHeader(HttpHeader.ETAG.asString(),content.getETag());
return false;
}
}
@@ -727,50 +718,33 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory
if (ifms!=null)
{
//Get jetty's Response impl
- Response r = Response.getResponse(response);
-
- if (content!=null)
+ String mdlm=content.getLastModified();
+ if (mdlm!=null && ifms.equals(mdlm))
{
- String mdlm=content.getLastModified();
- if (mdlm!=null)
- {
- if (ifms.equals(mdlm))
- {
- r.reset(true);
- r.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
- if (_etags)
- r.getHttpFields().add(HttpHeader.ETAG,content.getETag());
- r.flushBuffer();
- return false;
- }
- }
+ response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+ if (_etags)
+ response.setHeader(HttpHeader.ETAG.asString(),content.getETag());
+ response.flushBuffer();
+ return false;
}
long ifmsl=request.getDateHeader(HttpHeader.IF_MODIFIED_SINCE.asString());
- if (ifmsl!=-1)
- {
- if (resource.lastModified()/1000 <= ifmsl/1000)
- {
- r.reset(true);
- r.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
- if (_etags)
- r.getHttpFields().add(HttpHeader.ETAG,content.getETag());
- r.flushBuffer();
- return false;
- }
+ if (ifmsl!=-1 && resource.lastModified()/1000 <= ifmsl/1000)
+ {
+ response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
+ if (_etags)
+ response.setHeader(HttpHeader.ETAG.asString(),content.getETag());
+ response.flushBuffer();
+ return false;
}
}
// Parse the if[un]modified dates and compare to resource
long date=request.getDateHeader(HttpHeader.IF_UNMODIFIED_SINCE.asString());
-
- if (date!=-1)
+ if (date!=-1 && resource.lastModified()/1000 > date/1000)
{
- if (resource.lastModified()/1000 > date/1000)
- {
- response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED);
- return false;
- }
+ response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED);
+ return false;
}
}

Back to the top