[英]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.