簡體   English   中英

使用ResposeWrapper的響應篩選器

[英]Response Filters using ResposeWrapper

我遇到了一部分代碼,在將servlet輸出返回給用戶之前先對其進行了ServletResponseWrapper ,它使用了自定義的ServletResponseWrapper如果您知道我在說什么,這就是很有名的-,我的問題是:

1-現在攔截響應的功能完全是響應包裝器的責任-通過覆蓋返回的輸出流-過濾器對這種行為沒有影響嗎? 我對么 ?

2-如果過濾器攔截其請求的任何servlet封閉了輸出流,chain.doFilter()之后的代碼將能夠再次使用該流嗎? 過濾器會工作嗎?

3為什么包裝的響應解決了“輸出在被過濾器攔截之前直接返回到容器”的問題……我的意思是為什么對響應的控制然后又返回到過濾器?

我最近在我的項目中使用了本書中的示例代碼: Web應用程序的Professional Java 第9章提供了一個很好的壓縮過濾器示例。

我沒有參與這本書背后的公司。

這些是您的問題的答案:

  1. 是的,你是對的。 過濾器使用包裝器包裝原始HttpServletResponse ,從此刻開始,包裝器將負責管理輸出流(但不負責關閉流)。
  2. 無論您是否使用包裝的HttpServletResponse ,關閉自己代碼中的輸出流都不是一個好主意。
  3. 對輸出流的控制不會返回到過濾器。 繼續在chain.doFilter()之后的一行中繼續執行Web應用程序,並且如有必要,您可以將一些數據寫入到包裝的響應中。 但是,無論是在過濾器中還是在Servlet中,都不要關閉流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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