jquery ajax请求导致IllegalStateException:getOutputStream()

时间:2012-09-18 10:37:39

标签: jquery ajax spring jackson

我有一个spring portlet mvc应用程序。我有一个jsp,它使用Ajax请求向资源URL发出GET请求,然后使用Spring Jackson映射器(MappingJacksonJsonView)类返回json。 GET请求非常慢,可能需要几秒钟才能执行。我注意到了一个用例;

  1. 我点击了我的应用程序中的AJAX提交链接
  2. 我在请求完成之前刷新页面
  3. 我重复上一步
  4. 我的服务器记录开始抛出illegalstatexception

    引起:java.lang.IllegalStateException:已经为此响应调用了getOutputStream() 在org.apache.catalina.connector.Response.getWriter(Response.java:611) 在org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:198) 在javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)

  5. 因为Spring负责创建和删除输出读取器和编写器,所以我无法捕捉到非法行为,所以我发现很难找出确切问题发生的地方。

    任何建议或帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:1)

答案 - 以下情况正在发生。我想我可以把它归结为一个影响很小的问题。

当浏览器打开Socket并发出Ajax请求时会发生这种情况,然后它会在收到服务器的响应之前终止打开的Socket(通过关闭浏览器或移动到另一个页面)。同时服务器正在处理请求并尝试将输出写回浏览器,但浏览器已关闭Socket并继续运行。