IllegalStateException:调用response.getWriter时的STREAM

时间:2013-10-09 20:31:01

标签: servlets spring-mvc httpresponse illegalstateexception

这是一个用于处理ajax请求的方法。因此输出将写入response

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,如果我调用getWriter已经调用了getOutputStream(),我肯定会有一个IllegalStateException,所以我怀疑我传递响应的方法是这样做的,尽管我没有看到他们这样做... 唯一可以肯定的是,在某些时候,其中一个方法可能会执行response.sendError()。 这有关如何调用getOutputStream()?

2 个答案:

答案 0 :(得分:1)

HttpServletResponse#sendError()提交响应并发送错误状态代码。 javadoc陈述

  

如果响应已经提交,则此方法抛出一个   IllegalStateException异常。使用此方法后,响应应该是   被认为是承诺,不应写入。

换句话说,在调用该方法之后,基本上已经发送了HTTP响应。调用任何getOutputStream()getWriter()方法都没有意义。如果您尝试,则Servlet容器通过抛出异常来进一步使其变得万无一失。

答案 1 :(得分:0)

我有类似的问题,但我之前没有调用sendError(),只是setContentType()。根据{{​​3}},它可以触发相同的行为:

  

我猜它是因为你已经打开了流   调用resp.setContentType(“text / plain”);方法,然后   试图获得一个Writer对象。您可以使用基于流的   类或基于Writer的类 - 不是两者都有。

     

删除setContentType(),或使用发送响应   response.getOutputStream()方法。这应该可以解决问题。

事实上,它为我解决了类似的错误。