【发布时间】:2013-10-01 11:35:38
【问题描述】:
我的过滤器应该编辑响应的 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;
}
}
完整代码在这里:
Filter that uses a response wrapper to convert all output to uppercase
【问题讨论】:
-
您已经包裹了
Writer,但没有包裹OutputStream。您的 servlet 可能正在直接写入OutputStream。使用调试器。
标签: java tomcat servlets servlet-filters