接收到IllegalStatException的servlet上的Maven测试:无法重置缓冲区 - 已经提交的响应

时间:2010-09-21 13:57:37

标签: java servlets tomcat6

在我的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进行多次调用?

1 个答案:

答案 0 :(得分:2)

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