private void flushHeadersIfPossible() throws IOException { if (!response.isCommitted()) { response.flushHeaders(); } }
@Test public void shouldFlushHeadersOnFirstUseForByteSection() throws IOException { OutputStream out = mock(OutputStream.class); byte[] data = "Hello World".getBytes(Charset.defaultCharset()); HttpServletResponseImpl response = mock(HttpServletResponseImpl.class); ServletOutputStreamImpl outW = new ServletOutputStreamImpl(out, response); try { when(response.isCommitted()).thenReturn(false); outW.write(data, 0, 1); when(response.isCommitted()).thenReturn(true); outW.write(data, 0, 1); verify(out, times(2)).write(data, 0, 1); verify(response, times(1)).flushHeaders(); } finally { outW.close(); } }
@Test public void shouldFlushHeadersOnFirstUseForBytes() throws IOException { OutputStream out = mock(OutputStream.class); byte[] data = "Hello World".getBytes(Charset.defaultCharset()); HttpServletResponseImpl response = mock(HttpServletResponseImpl.class); ServletOutputStreamImpl outW = new ServletOutputStreamImpl(out, response); try { when(response.isCommitted()).thenReturn(false); outW.write(data); when(response.isCommitted()).thenReturn(true); outW.write(data); verify(out, times(2)).write(data); verify(response, times(1)).flushHeaders(); } finally { outW.close(); } }
/** * Flushes the output. * * @throws IOException */ public void flush() throws IOException { // It makes no sense to set chunked encoding if there is no print writer if (printWriter != null && printWriter instanceof ChunkedPrintWriter) { getHeaders().setHeader(Headers.HEADER_TRANSFER_ENCODING, TRANSFER_ENCODING_CHUNKED); } if (!isCommitted()) { flushHeaders(); } if (printWriter != null) { printWriter.writeEnd(); printWriter.flush(); } outputStream.flush(); } }
@Test public void shouldFlushHeadersOnFirstUseForInts() throws IOException { OutputStream out = mock(OutputStream.class); int data = 1; HttpServletResponseImpl response = mock(HttpServletResponseImpl.class); ServletOutputStreamImpl outW = new ServletOutputStreamImpl(out, response); try { when(response.isCommitted()).thenReturn(false); outW.write(data); when(response.isCommitted()).thenReturn(true); outW.write(data); verify(out, times(2)).write(data); verify(response, times(1)).flushHeaders(); } finally { outW.close(); } }
/** * Terminates servlet. Sets all necessary headers, flushes content. * * @param request * @param response * @throws IOException */ private void terminate(final HttpServletRequestImpl request, final HttpServletResponseImpl response) throws IOException { freeUploadedUnprocessedFiles(request.getUploadedFiles()); HttpSessionImpl session = (HttpSessionImpl) request.getSession(false); if (session != null) { try { ((ServletContextImpl) request.getServletContext()).handleSession(session, response); } catch (IOException e) { LOGGER.log(Level.WARNING, "Unable to persist session", e); } } if (!response.isCommitted()) { if (response.getContentType() == null) { response.setContentType(DEFAULT_RESPONSE_CONTENT_TYPE); } response.getHeaders().setHeader(Headers.HEADER_CACHE_CONTROL, HEADER_VALUE_NO_CACHE); response.getHeaders().setHeader(Headers.HEADER_PRAGMA, HEADER_VALUE_NO_CACHE); } response.flush(); }