2013-02-04 40 views
3

我繼承了大量使用FilterChain的Struts 1應用程序,我不明白這個極其模糊的代碼的好處。javax.servlet.FilterChain的目的是什麼?

「在Servlet API中,當您想要控制,預處理和/或後處理特定請求時,通常使用Servlet,但是當您想根據特定條件過濾/修改常見請求和/或響應時,過濾器更合適。「

我的應用中的每個請求都基於特定條件,例如商家ID或搜索字詞。但是,似乎將一個請求放在整個鏈中,完全隱藏了開發人員試圖追查錯誤原因的事情,這實在太瘋狂了。

+4

有無你讀過這個嗎? http://www.oracle.com/technetwork/java/filters-137243.html –

+0

你是在問一個FilterChain是用來做什麼的,或者它爲什麼用在你的應用中。如果前者,則閱讀文檔。如果是後者,我們如何在不知道應用程序的情況下回答問題? –

+2

+1;總的來說,我同意你的看法,一個過濾器隱藏了許多細節。事實上,它只是一個幫助您設計應用程序的抽象(當然,如果您構建像servlet引擎這樣的平臺,它會變得更加有趣)。我個人的選擇是,你應該*不*放置任何類型的業務邏輯過濾器(如商家)。在過濾器中實現某些非功能性方面,如日誌記錄,認證等。 – home

回答

5

我的同事(誰是不是在如此登記)解釋說,它是應用全局的功能,你不希望在每一個控制器做的,例如,如果用戶在登錄檢查的應用程序。

5

FilterChain#doFilter()只調用繼續到目的地的HTTP請求,遵循完全相同的路徑,如果您沒有首先使用過濾器。這通常是一個servlet類,甚至是一個JSP文件。因此,爲了調試有問題的代碼,最好在目標代碼中放置一個斷點,而不是在過濾器中放入任何感興趣的代碼。

+0

我很想去,除非我不能在本地再現這個錯誤,只能在我的產品環境中。不過謝謝。 – barclay