[英]Servlet filter insists that there's no response text
我的过滤器应该用于编辑响应的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;
}
}
完整的代码在这里:
据我所知,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.