大家。
如果在将部分数据提交给HttpServletResponse后发生错误, 我可以发送错误消息或替换http状态代码吗? 我研究了一些函数(sendError,sendStatus等),但我无法找到解决方案。 通常,不是吗?
如果是这样,服务器需要在发送大量数据之前存储所有数据。 我认为服务器永远不会有足够的记忆。
P.S。 我必须发送很多数据,如视频数据。这是如此之大的数据,所以我不希望在发送之前存储大量数据。嗯: - (
答案 0 :(得分:0)
如果发生错误,您可以尝试增加缓冲区并重置缓冲区。这可以帮助您“修补”您的代码。但对于视频内容,它可能很难。
您可以尝试使用以下代码。
Servlet:
package testingThings;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/BufferedResponse")
public class BufferedResponse extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("buffer size: " + response.getBufferSize());
response.setStatus(HttpServletResponse.SC_OK);
String flash = request.getParameter("flash");
if (flash != null) {
response.flushBuffer();
}
if (response.isCommitted()) {
response.getWriter().println("buffer was commited.");
response.getWriter().println("it is too late change the response");
}
else {
response.resetBuffer();
response.getWriter().println("buffer reseted.");
response.getWriter().println("response and status code were changed");
response.setStatus(HttpServletResponse.SC_FOUND);
}
}
}
或者像其他建议一样,将逻辑从视图中分离出来。
至少你可以处理数据,写“log”(作为响应的准备)。如果一切正常并且没有发生错误,请在响应中写下“log”。