我的過濾器應該編輯響應的HTML。但是,當我瀏覽到一個頁面什麼都不做,因爲Servlet過濾器堅持沒有響應文本
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;
}
}
完整的代碼是在這裏:
Filter that uses a response wrapper to convert all output to uppercase
你已經封裝了'Writer'而不是'OutputStream'。你的servlet可能直接寫入'OutputStream'。使用調試器。 –