A JSP page is compiled into a Servlet; therefore, it can do everything that a Servlet can do. If the above statement is TRUE, then why is an IllegalStateException thrown when opening a Binary Stream output to the client from a JSP page but NOT to a Servlet? Choice 1,JSP pages can write a Binary Stream using its implicit out stream. Choice 2,JSP has already opened the stream as a JspWriter. Choice 3,JSP pages must flush their buffers before changing the stream type; Servlets do not have this limitation.
The reason is choice 2. The signature of JspWriter class is public abstract class JspWriter extends java.io.Writer, and the implicit variable out is an JspWriter. As the translated servlet opens an JspWriter it throws an IllegalStateException.