这是一个用于处理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()?
答案 0 :(得分:1)
HttpServletResponse#sendError()
提交响应并发送错误状态代码。 javadoc陈述
如果响应已经提交,则此方法抛出一个 IllegalStateException异常。使用此方法后,响应应该是 被认为是承诺,不应写入。
换句话说,在调用该方法之后,基本上已经发送了HTTP响应。调用任何getOutputStream()
或getWriter()
方法都没有意义。如果您尝试,则Servlet
容器通过抛出异常来进一步使其变得万无一失。
答案 1 :(得分:0)
我有类似的问题,但我之前没有调用sendError(),只是setContentType()。根据{{3}},它可以触发相同的行为:
我猜它是因为你已经打开了流 调用resp.setContentType(“text / plain”);方法,然后 试图获得一个Writer对象。您可以使用基于流的 类或基于Writer的类 - 不是两者都有。
删除setContentType(),或使用发送响应 response.getOutputStream()方法。这应该可以解决问题。
事实上,它为我解决了类似的错误。