Spring - filter和攔截器的區別和執行順序

來源:魅力女性吧 2.46W
Spring filter和攔截器的區別和執行順序

filter和攔截器的區別和執行順序er過濾器只過濾jsp文件不過濾action請求解決方案解決辦法:在中將filter的配置放在struts2配置的前面。2.攔截器與Filter的區別Spring的攔截器與Servlet的Filter有相似之處,比如二者都是AOP編程思想的體現,都能實現權限檢查、日誌記錄等。不同的是:使用範圍不同:Filter是Servlet規範規定的,只能用於Web程序中。而攔截器既可以用於Web程序,也可以用於Application、Swing程序中。規範不同:Filter是在Servlet規範中定義的,是Servlet容器支持的。而攔截器是在Spring容器內的,是Spring框架支持的。使用的資源不同:同其他的代碼塊一樣,攔截器也是一個Spring的組件,歸Spring管理,配置在Spring文件中,因此能使用Spring裏的任何資源、對象,例如Service對象、數據源、事務管理等,通過IoC注入到攔截器即可而Filter則不能。深度不同:Filter在只在Servlet前後起作用。而攔截器能夠深入到方法前後、異常拋出前後等,因此攔截器的使用具有更大的彈性。所以在Spring構架的程序中,要優先使用攔截器。實際上Filter和Servlet極其相似,區別只是Filter不能直接對用户生成響應。實際上Filter裏doFilter()方法裏的代碼就是從多個Servlet的service()方法裏抽取的通用代碼,通過使用Filter可以實現更好的複用。filter是一個可以複用的代碼片段,可以用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。JSR中説明的是,按照多個匹配的Filter,是按照其在中配置的順序來執行的。所以這也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的DispatcherFilter的前面的原因。因為,它們需要在請求被Struts2框架處理之前,做一些前置的工作。當Filter被調用,並且進入了Struts2的DispatcherFilter中後,Struts2會按照在Action中配置的InterceptorStack中的Interceptor的順序,來調用Interceptor。

熱門標籤