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

时间:2013-10-01 11:35:38

标签: java tomcat servlets servlet-filters

我的过滤器应该编辑响应的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;
  }
}

完整的代码在这里:

Filter that uses a response wrapper to convert all output to uppercase

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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