Joshua Bloch taught us to use these explicit termination methods. The tricky things is, its unclear whether getWriter actually opens a stream or is simply an accessor/property to one. I admit to always closing it explicitly, since a second call to getWriter usually results in "java.lang.IllegalStateException: getWriter() has already been called" suggesting I was the one who opened it. Certainly I would expect filter chain hooks beneath to simply override close() in a normal decorator fashion and do their post-processing? Perhaps this is container specific and an ugly corner of the Servlet API.
/Casper On May 25, 2:21 pm, Brian <[email protected]> wrote: > It seems about a 50/50 split in hello world examples of HttpServlet > out on the 'internets' as to whether or not to close the > ServletOutputStream or PrintWriter. NetBeans for example will put the > close() call in their new Servlet wizard by default. So does Oracle's > JDeveloper. But other tutorials/examples do not close > it.http://edocs.bea.com/wls/docs70/servlet/progtasks.html > > In my particular case not closing the ServletOutputStream solved an > 'odd behavior' bug in an application when running on HTTPS on a > somewhat 'black box' production environment that was using Oracle Web > Cache and several other pre and post processing technologies on each > request. But I have not been successful at articulating why not > closing the outputstream is the fix or verifying there are no other > consequences as a result of not closing the output stream. 99% of the > time it seems to matter little whether the close is there are not (e.g > every J2EE IDE I have tried), but in this case it did Any thoughts? > > public class HelloWorldServlet extends HttpServlet { > public void service(HttpServletRequest req, > HttpServletResponse res) > throws IOException > { > // Must set the content type first > res.setContentType("text/html"); > // Now obtain a PrintWriter to insert HTML into > PrintWriter out = res.getWriter(); > out.println("<html><head><title>" + > "Hello World!</title></head>"); > out.println("<body><h1>Hello World!</h1></body></html>"); > //QUESTION: close or not close: > //out.close(); > } > > } --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
