簡體   English   中英

Servlet過濾器堅持沒有響應文本

[英]Servlet filter insists that there's no response text

我的過濾器應該用於編輯響應的HTML。 但是,當我導航到頁面時,它什么都不做,因為

newResponse.toString();

返回null

進一步的調試顯示,在該toString方法中, writernull

這部分似乎是問題所在:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM