【问题标题】:Maven Test on servlet receiving an IllegalStatException: Cannot reset buffer - response already committedMaven 测试 servlet 接收 IllegalStatException:无法重置缓冲区 - 响应已提交
【发布时间】:2010-09-21 13:57:37
【问题描述】:

在我的 maven 构建的测试阶段,我在一个 @test 方法中保存了以下代码:

        request.clearAttributes();
        response.reset();
        String story_uuid = qit.getQI().getStory_uuid();
        assertNotNull(story);
        request.setParameter("story_uuid", story_uuid);
        request.setParameter("activity", "get");
        queue.doPost(request, response);
        assertEquals(response.getErrorMessage(), HttpServletResponse.SC_OK, response.getStatus());


        request.clearAttributes();
        response.reset();    //**THIS RESET HERE**//
        request.setParameter("story", story_uuid);
        request.setParameter("activity", "revert");
        queue.doPost(request, response);
        assertEquals(response.getErrorMessage(), HttpServletResponse.SC_OK, response.getStatus());

response.reset()//**THIS RESET HERE**// 的行会导致以下错误:

java.lang.IllegalStateException: Cannot reset buffer - response is already committed

我不应该使用一种方法来多次调用我的 servlet 吗?

【问题讨论】:

    标签: java servlets tomcat6


    【解决方案1】:

    reset() 仅在响应尚未提交时有效。它基本上清除了输出缓冲区。您不能对单个请求发送多个响应。这完全违反了 HTTP 规范。对于客户端发送的每个请求,服务器只能发回一个完整的响应。提交响应后,您将处于不归路。如果您想发回一个新的响应,那么您需要让客户端触发一个全新的请求,以便您可以发回一个新的响应。

    【讨论】:

    • 我认为我可以重用请求和响应对象。现在我每次测试时都创建一个新的,我不再收到错误。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2019-01-12
    • 2013-08-15
    • 2013-06-25
    • 2013-05-13
    • 2020-09-30
    • 2023-04-10
    相关资源
    最近更新 更多