Having written my own response compression filter, I'd have to say that 
it is a mistake to rely upon anyone (other than the container) calling 
close on the output.  You should allow for it, but not rely upon it.

Reinier Zwitserloot wrote:
> IIRC, when you close a Servlet, the ServletIn/OutputStreams get closed
> for you as well. However, that's not good enough if you're wrapping
> those into a non-direct-writethrough stream, such as GzipOutputStream,
> as Christian Catchpole mentioned.
>
> Therefore, close em. Be aware that the close calls, especially on the
> ServletOutputStream, can generate exceptions; the servlet container
> and the network can both simply be buffering your output, and the close
> () then exceptions when the resulting flush down the pipe runs into an
> I/O issue. Remember the mantra:
>
> InputStream.close(): stupid.
>
> OutputStream.close(): Even more important that .write()'s IOExceptions
> - assume the entire write operation failed if you get one.
>
> On May 26, 1:37 am, Michael Neale <[email protected]> wrote:
>   
>> You know it has been many years, but I still find that joke funny -
>> everytime I write "flush()" I have a little smile.
>>
>> On May 26, 8:16 am, Viktor Klang <[email protected]> wrote:
>>
>>     
>>> I'd agree that flushing is a rather good practice, and while one's at it,
>>> the mrs' generally appreciate having the toilet seat lid down.
>>>       
>>> On Tue, May 26, 2009 at 12:12 AM, Christian Catchpole <
>>>       
>>> [email protected]> wrote:
>>>       
>>>> My expectation would be to close() as it should be abstracted from any
>>>> real IO stream and closing should do no harm.  In fact there can be
>>>> cases where harm is done if you don't close, or at least flush.  I
>>>> wrote a method to wrap the OutputStream with a compressing stream if
>>>> the client would accept it.  This would be the same for any buffered
>>>> stream that you wrap around the OutputStream.  You will have to flush
>>>> it as the container closing the stream it handed you is not going to
>>>> flush your wrapper stream.  And a close is as good as a flush.
>>>>         
>>>> I do accept that I've often never closed on non-wrapped streams and
>>>> it's done no harm.
>>>>         
>>>> As for Brian's case, I would expect that closing the stream has "gone
>>>> too far" closing some underlying stream prematurely.
>>>>         
>>> --
>>> Viktor Klang
>>> Rockstar Developer
>>>       
> >
>
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to