2012-12-03 26 views
3

我寫了一個servlet過濾器,它被配置爲爲每個url調用(/ *)。在某些條件的基礎上,如果條件通過,我想繼續正常執行chain.doFilter(request,response),我也想打開相同的請求URL並顯示錯誤消息。servlet過濾器如何在請求頁面上發送錯誤消息?

「say value in input in specific textbox is incorrect」 。這可能嗎?

我必須使用response.sendRedirect(request.getURL())嗎?我希望我不會在無限循環中結束,因爲我已經在每個URL上配置了過濾器。我正在對請求參數進行驗證檢查。

+1

我不會在'過濾器'中進行驗證,尤其是映射到'/ *'的一個驗證,我會盡量多做一點目標。 – Qwerky

+0

好..有一些驗證需要完成每個請求..因此,我爲什麼要嘗試使用過濾器 – Rajesh

回答

4

就像你在servlet中做的一樣:執行前進。

request.getRequestDispatcher("/WEB-INF/some.jsp").forward(request, response); 

默認情況下,過濾器不在重新調用前向。另外一個好處是JSP可以重用相同的請求,因此您可以將驗證錯誤消息設置爲請求屬性,而無需基於會話或基於cookie的變通辦法/黑客行爲。


無關到具體的問題,這是不完全正確的方法。特定於表單的驗證作業應在servlet中執行,而不是在filter中執行。如果你想保持你的servlet乾燥,那麼看看前端控制器模式,或者只是採用一個MVC框架,該框架已經提供了一個前端控制器servlet和體外驗證,例如JSFSpring MVC

+0

謝謝..只是一個更多的幫助,..你能告訴我有什麼辦法知道這個請求在這個過濾器來自哪個jsp?注意我的httpRequest.getUri()給出了一個動作字符串,而不是jsp ..它映射到了控制器的彈簧 – Rajesh

+0

這就是爲什麼你應該在前端控制器中執行它的原因之一。通常一個前端控制器確切地知道它是哪個JSP。但是,正如你顯然使用Spring的前端控制器,爲什麼你不使用它的驗證工具? – BalusC

+0

,因爲它是所有請求的通用檢查,所以想到在請求filter.can你可以讓我知道,如果我寫一個彈簧攔截器,那麼任務會更容易..因爲我想檢查所有請求 – Rajesh

相關問題