If you're asking why its done that way everytime (I agree that it is repetitive), its because java is not a pure web language. Most of the use of java in servlet/jsps are extensions of the language in order to make it more accessible to web programmers.
Its why PHP is often a lot faster than writing in JSP/Servlets, but with the added work comes more power and more control. For example, you can have servlets that perform work and never use the print writer.
For servlets to work, it must be possible to configure the response output stream for binary output (images, etc) or character output (HTML) under the programmers control. Therefore we have getWriter() and getOutputStream() - the programmer must choose the appropriate one. Bill