From b0edf18ad976ec1908bdbbefd95d253beddff2b5 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Mon, 8 May 2017 15:31:00 +0200 Subject: [PATCH] Issues #1538 #1435 Get base content type directly rather than through Type which maybe null --- .../java/org/eclipse/jetty/http/ResourceHttpContent.java | 4 ++-- .../src/main/java/org/eclipse/jetty/server/Response.java | 3 ++- .../org/eclipse/jetty/servlet/DefaultServletTest.java | 8 ++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java b/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java index 9e57c68753c..0b3ce289276 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/ResourceHttpContent.java @@ -117,7 +117,7 @@ public class ResourceHttpContent implements HttpContent { return _contentType==null?null:MimeTypes.CACHE.get(MimeTypes.getContentTypeWithoutCharset(_contentType)); } - + /* ------------------------------------------------------------ */ @Override public HttpField getLastModified() @@ -227,7 +227,7 @@ public class ResourceHttpContent implements HttpContent @Override public String toString() { - return String.format("%s@%x{r=%s,c=%b}",this.getClass().getSimpleName(),hashCode(),_resource,_precompressedContents!=null); + return String.format("%s@%x{r=%s,ct=%s,c=%b}",this.getClass().getSimpleName(),hashCode(),_resource,_contentType,_precompressedContents!=null); } /* ------------------------------------------------------------ */ diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java index 3f9940c8e89..357499546f1 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java @@ -1430,9 +1430,10 @@ public class Response implements HttpServletResponse { if (_characterEncoding!=null && content.getCharacterEncoding()==null && + content.getContentTypeValue()!=null && __explicitCharset.contains(_encodingFrom)) { - setContentType(content.getMimeType().getBaseType().asString()); + setContentType(MimeTypes.getContentTypeWithoutCharset(content.getContentTypeValue())); } else { diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java index 8ae1d85f75a..9aa5bbf123d 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java @@ -791,6 +791,8 @@ public class DefaultServletTest FS.ensureDirExists(resBase); File file0 = new File(resBase, "data0.txt"); createFile(file0, "Hello Text 0"); + File image = new File(resBase, "image.jpg"); + createFile(image, "not an image"); String resBasePath = resBase.getAbsolutePath(); @@ -817,6 +819,11 @@ public class DefaultServletTest assertResponseNotContains("Content-Length: 12", response); assertResponseContains("Content-Type: text/plain;charset=utf-8", response); + response = connector.getResponse("GET /context/image.jpg HTTP/1.0\r\n\r\n"); + assertResponseContains("Content-Length: 2", response); // 20 something long + assertResponseContains("Extra Info", response); + assertResponseContains("Content-Type: image/jpeg;charset=utf-8", response); + server.stop(); context.getServletHandler().setFilterMappings(new FilterMapping[]{}); context.getServletHandler().setFilters(new FilterHolder[]{}); @@ -827,6 +834,7 @@ public class DefaultServletTest assertResponseContains("Content-Length: 2", response); // 20 something long assertResponseContains("Extra Info", response); assertResponseNotContains("Content-Length: 12", response); + }