I posted this question to MR.Hanumant Deshmukh, see below for his reply... The idea is if the client receives any data other than the redirect header from the server, you cannot redirect it to another location. Now, servers usually buffer the data that you write using out.print(). So if you print a lot of data to out, it will be sent to sent to the client as soon as the buffer is full. You may not even need out.flush() to "commit" the response. In some cases, if you write very little data, even out.flush() may not immediately send the data (usually it does though). It is implementation dependent. So, you should not write to the output if you want to redirect the client. BTW, as per the API, res.sendRedirect() commits the response. I.e. it probably sets a committed flag (no matter whether any of the output has been sent to the client or not). =================== I'm just a programmer!