在我的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进行多次调用?
答案 0 :(得分:2)
reset()
仅在尚未提交响应时才有效。它基本上清除了输出缓冲区。您无法在单个请求中发送多个响应。这完全违反了HTTP规范。对于客户端发送的每个请求,服务器只能发回一个完整的响应。当提交响应时,您处于不可逆转的状态。如果您想要发回新的回复,那么您需要让客户端发出一个全新的请求,以便您可以发回新的回复。