Taking it a step further, the HTTP response that you send back to the client is made up of a HTTP header and a HTTP body. Note we're talking about HTTP, not HTML. The HTTP body is typically but not necessarily text/html content.
So as I just said, the page information goes in the HTTP body, but in order to perform a sendRedirect operation, the servlet container needs to write information to the HTTP header.
If you start writing to the HTTP body, then the container can buffer the response and hold off sending to the client in case you change your mind, but at some stage the buffer will fill and it will be too late to change your mind. Trigger an
IllegalStateException. I have seen people increase the size of the buffer but this is hiding the problem, not solving it. It is better to get out of the habit beforehand. Also, increasing the size of the buffer will increase the memory that the application will need to run without any real benefit.