2013-10-09 14 views
1

這是一種用於處理ajax請求的方法。所以輸出寫入responseIllegalStateException:調用response.getWriter時發生STREAM

public ModelAndView myAction(HttpServletRequest request, HttpServletResponse response, BindException errors) throws Exception 
{ 
    //call other methods and send the response as arg 
    //call getWriter on the response 
} 

this doc,我一定會有一個IllegalStateException如果我叫的getWriter在已經叫的getOutputStream(),所以我懷疑方法我傳給這樣做,雖然我的反應不真的看到他們這樣做... 唯一可以肯定的是,在某些時候,其中一種方法可能會做response.sendError()。 這是否有一些如何調用getOutputStream()?

+0

向我們展示您返回的'ModelAndView',並且如果它映射到其他資源,例如'jsp'。 –

+0

我認爲它不一定是'ModelAndView'。我可以很好地用'void'來代替它。 – 0x56794E

回答

1

HttpServletResponse#sendError()提交響應併發送錯誤狀態碼。 Javadoc中說明

如果響應已經提交,此方法將引發 IllegalStateException異常。使用此方法後,響應應爲 認爲已提交且不應寫入。

換句話說,在您調用該方法之後,HTTP響應基本上已發送。調用任何getOutputStream()getWriter()方法是沒有意義的。您的Servlet容器如果您嘗試拋出異常,則可以進一步提高安全性。

0

我有類似的問題,但我沒有調用sendError(),只是setContentType()之前。按照this source,它可以觸發相同的行爲:

我猜測它的,因爲你已經通過 打開流調用resp.setContentType(「text/plain的」);方法,然後 試圖獲得一個Writer對象。您可以使用基於流的 類或基於Writer的類 - 不能同時使用。

要麼刪除setContentType(),要麼使用 response.getOutputStream()方法發送響應。這應該可以解決問題。

事實上,它爲我解決了類似的錯誤。

相關問題