Author: markt Date: Thu Mar 27 18:50:05 2014 New Revision: 1582440 URL: http://svn.apache.org/r1582440 Log: Restore optimisation removed in r1549711 Refactor so InputStream is never opened if sendfile is used Add lots of comments
Modified: tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java Modified: tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java?rev=1582440&r1=1582439&r2=1582440&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java (original) +++ tomcat/trunk/java/org/apache/catalina/servlets/DefaultServlet.java Thu Mar 27 18:50:05 2014 @@ -898,34 +898,48 @@ public class DefaultServlet extends Http } } - InputStream renderResult = null; if (serveContent) { - if (resource.isDirectory()) { - // Serve the directory browser - renderResult = render(getPathPrefix(request), resource); - } else { - renderResult = resource.getInputStream(); - } - - // Copy the input stream to our output stream try { response.setBufferSize(output); } catch (IllegalStateException e) { // Silent catch } - if (ostream != null) { - if (checkSendfile(request, response, resource, - contentLength, null)) { - try { - renderResult.close(); - } catch (IOException ioe) { - // Ignore - } + InputStream renderResult = null; + if (ostream == null) { + // Output via a writer so can't use sendfile or write + // content directly. + if (resource.isDirectory()) { + renderResult = render(getPathPrefix(request), resource); } else { - copy(resource, renderResult, ostream); + renderResult = resource.getInputStream(); } - } else { copy(resource, renderResult, writer, encoding); + } else { + // Output is via an InputStream + if (resource.isDirectory()) { + renderResult = render(getPathPrefix(request), resource); + } else { + // Output is content of resource + if (!checkSendfile(request, response, resource, + contentLength, null)) { + // sendfile not possible so check if resource + // content is available directly + byte[] resourceBody = resource.getContent(); + if (resourceBody == null) { + // Resource content not available, use + // inputstream + renderResult = resource.getInputStream(); + } else { + // Use the resource content directly + ostream.write(resourceBody); + } + } + // If a stream was configured, it needs to be copied to + // the output (this method closes the stream) + if (renderResult != null) { + copy(resource, renderResult, ostream); + } + } } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org