當前位置:聚美館>智慧生活>心理>

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

心理 閱讀(2.51W)
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。