tomcat5下jsp出現(xiàn)getOutputStream() has already been called for this response異常的原因和解決方法
在tomcat5下jsp中出現(xiàn)此錯(cuò)誤一般都是在jsp中使用了輸出流(如輸出圖片驗(yàn)證碼,文件下載等),沒(méi)有妥善處理好的原因。
具體的原因就是在tomcat中jsp編譯成servlet之后在函數(shù)_jspService(HttpServletRequest request, HttpServletResponse response)的最后有一段這樣的代碼
finally {
if (_jspxFactory != null)
_jspxFactory.releasePageContext(_jspx_page_context);
}
這里是在釋放在jsp中使用的對(duì)象,會(huì)調(diào)用response.getWriter(),因?yàn)檫@個(gè)方法是和response.getOutputStream()相沖突的!所以會(huì)出現(xiàn)以上這個(gè)異常。然后當(dāng)然是要提出解決的辦法,其實(shí)挺簡(jiǎn)單的(并不是和某些朋友說(shuō)的那樣--將jsp內(nèi)的所有空格和回車符號(hào)所有都刪除掉),在使用完輸出流以后調(diào)用以下兩行代碼即可:
out.clear();
out = pageContext.pushBody();