gpt4 book ai didi

java - 检查ServletResponse是否有内容

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:17 27 4
gpt4 key购买 nike

如何在不调用 getWriter() 方法的情况下检查响应 (ServletResponse) 是否包含任何内容,例如G。在过滤器中?或者换句话说:过滤器应该只修改内容,如果已经有东西写入流中:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// Only do that if there is really some content
PrintWriter out = response.getWriter();

可能会发生 response.getWriter() - 方法稍后可能会在代码中的其他地方调用(不在这个过滤器中,例如用于文件下载)。在这种情况下,第二次调用将失败,因为流已经打开......

最佳答案

一种方法是扩展 ServletResponseWrapper 并在内部使用 CharArrayWriter 来写入响应。 CharArrayWriter 有一个 size() 方法,该方法将返回缓冲区的大小。确保您将包装的响应传递到过滤器链,并且您应该能够在程序中的任何点获取大小。

public class LengthAwareServletResponseWrapper extends ServletResponseWrapper {

private final CharArrayWriter out = new CharArrayWriter();

public LengthAwareServletResponseWrapper(final ServletResponse response) {
super(response);
}

public int getWrittenContentLength() {
return out.size();
}

@Override
public PrintWriter getWriter() throws IOException {
return new PrintWriter(out);
}
}

关于java - 检查ServletResponse是否有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842848/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com