I think that the errata is wrong. Because if you just do a write and then forward, the container will just clear the response buffer and then forward to the resource so that the forwarded resource can start with a fresh response buffer. So whatever you write would be gone if you do a forward. Only when you flush, you commit the response and an IllegalStateException would be caused. This will become more clear in one of the JSP chapters, where the book explains what will happen when you write to the response and then use jsp:forward (which basically does a RequestDispatcher forward)
I think option C is also correct. The question is a tricky one. If we observe the wording "the use of which methods can often lead to an IllegalStateException" - that means it MAY lead, not MUST lead. When we call the write() method, if the buffer gets full, it is flushed and the response gets committed. The write() method MAY lead to IllegalStateException sometimes.
Yes you can trust the errata. Why? well the write method will send bytes to the OutputStream or the PrintWriter. These will store the bytes in a buffer before they are flushed to the client. But think about what happens if there is no buffer, they get sent straight to the client, and at that stage the response is committed, thus an IllegalStateException is thrown.
The question states "which method may lead to ISE". The forward mechanism is defined as : Forwarding servlet does not output anything to the client, but may do some processing, and even set headers.
With this in mind, using a write method on an outputstream (pw or sos) is a bad idea before a forward. The case where an exception is thrown is when the output written with the write method IS commited (ie sent to client) with the flush() method. If you don't flush buffer then clear buffer and forward, then the output you attempted to send with the write method may not bother you, so no exception occurs. If output has been committed/flushed (ie committed flag set to true) then the exception occurs.
So, as a conclusion, if you use write() method before a forward() AND you commit response, you surely get an Exception. Which means that the write method used with a RD MAY lead to an Exception.
Hence, answer C is correct.
EDIT : The goal of this question is obviously to make sure you understood that a forwarding servlet should NOT write anything to the response, as its goal is only a pre-processing role. Burn this in your mind, and SCWCD exam questions about this will be obvious. [ March 20, 2006: Message edited by: Frederic Esnault ]