转:getOutputStream() has already been called for this response的解决方法

查看Servlet的API发现问题: 

public java.io.PrintWriter getWriter()
throws java.io.IOException
Returns a  PrintWriter object that can send character text to the client. The  PrintWriter uses the character encoding returned by  getCharacterEncoding(). If the response's character encoding has not been specified as described in  getCharacterEncoding (i.e., the method just returns the default value  ISO-8859-1),  getWriter updates it to  ISO-8859-1.

Calling flush() on the PrintWriter commits the response.

Either this method or getOutputStream() may be called to write the body, not both.

 

Returns:
PrintWriter object that can return character data to the client
Throws:
UnsupportedEncodingException - if the character encoding returned by  getCharacterEncoding cannot be used
java.lang.IllegalStateException - if the getOutputStream method has already been called for this response object
java.io.IOException - if an input or output exception occurred
See Also:
getOutputStream()setCharacterEncoding(java.lang.String)
如API所言,由于ServletResponse.getOutputStream()方法和该方法都有可能被调用,来输出JSP页面的内容,如果其中的一个方法被调用了,再调用另一个方法就会抛出异常。

 

 

解决方案:

加入如下代码:

out.clear();

out = pageContext.pushBody();

 

代码作用:

out.clear():清空缓存的内容。

pageContext.pushBody():参考API

public BodyContent pushBody()

Return a new BodyContent object, save the current "out" JspWriter, and update the value of the "out" attribute in the page scope attribute namespace of the PageContext.

 

Returns:
the new BodyContent

·返回一个新的BodyContent(代表一个HTML页面的BODY部分内容)
·保存JspWriter实例的对象out
·更新PageContext的out属性的内容

你可能感兴趣的:(java,html,jsp,servlet)