1

私のフィルターは、応答の HTML を編集することになっています。しかし、ページに移動しても何もしません。

newResponse.toString();

戻りますnull

さらにデバッグすると、そのtoStringメソッド内writerで、null

問題と思われるセクションは次のとおりです。

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;
  }
}

完全なコードは次のとおりです。

応答ラッパーを使用してすべての出力を大文字に変換するフィルター

4

2 に答える 2

1

私の知る限り、サーブレット フィルター チェーンは、宛先に到達するに HTTP 要求で呼び出されます(たとえば、サーブレット)。Filter を使用してリクエスト先ポイントで生成されたコンテンツを取得すると、nullそれは未来にしか存在しないため取得されます。しかし、ドキュメント ( http://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/Filter.html ) に記載されている適切な解決策があります。応答ラッパーが HttpServletResponse のコンテンツへのアクセスを装飾するようにするだけです。たとえば、デフォルトのライターをカスタムでオーバーライドします。これにより、文字が検出され、write() メソッドで大文字になります。

于 2013-10-01T12:48:44.917 に答える
0

フィルタリングしようとしていたページは でしたindex.html

フィルターは で終わるページの応答のみを編集できるようです.jsp

于 2013-10-01T14:10:29.830 に答える