2

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

  1. 我在我的应用程序中单击 AJAX 提交链接
  2. 我在请求完成之前刷新页面
  3. 我重复上面的步骤
  4. 我的服务器日志开始抛出非法状态异常

    原因:java.lang.IllegalStateException: getOutputStream() 已经在 org.apache.catalina.connector.Response.getWriter(Response.java:611) at org.apache.catalina.connector.ResponseFacade.getWriter (ResponseFacade.java:198) 在 javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:112)

因为 Spring 负责创建和删除输出读取器和写入器,所以我无法捕获非法异常,所以我发现很难隔离确切问题发生的位置。

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

4

1 回答 1

1

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

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

于 2012-09-18T12:56:24.010 回答