繁体   English   中英

Servlet过滤器坚持没有响应文本

[英]Servlet filter insists that there's no response text

我的过滤器应该用于编辑响应的HTML。 但是,当我导航到页面时,它什么都不做,因为

newResponse.toString();

返回null

进一步的调试显示,在该toString方法中, writernull

这部分似乎是问题所在:

public ServletOutputStream getOutputStream() throws IOException {
    if (getWriterCalled) {
      throw new IllegalStateException("getWriter already called");
    }

    getOutputStreamCalled = true;
    return super.getOutputStream();
  }

  public PrintWriter getWriter() throws IOException {
    if (writer != null) {
      return writer;
    }
    if (getOutputStreamCalled) {
      throw new IllegalStateException("getOutputStream already called");
    }
    getWriterCalled = true;
    writer = new PrintWriter(charWriter);
    return writer;
  }

  public String toString() {
    String s = null;

    if (writer != null) {
      s = charWriter.toString();
    }
    return s;
  }
}

完整的代码在这里:

使用响应包装器将所有输出转换为大写的过滤器

据我所知,servlet过滤器链到达目的地之前 (例如-servlet)在HTTP请求上被调用。 当您使用筛选器获取由请求目标点生成的内容时,您将获得null因为它仅在将来存在。 但是有一个适当的解决方案,在文档( http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Filter.html )中提到。 进行适当的设置,以便您的响应包装器装饰对HttpServletResponse内容的访问。 例如-用您的自定义覆盖默认的writer,它将检测字母并在他的write()方法中将它们大写。

我试图过滤的页面是index.html

看来过滤器只能编辑以.jsp结尾的页面的响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM