當前位置:編程學習大全網 - 編程語言 - filter跟攔截器的區別和執行順序

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

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

1.Filter過濾器只過濾jsp文件不過濾action請求解決方案

解決辦法:在web.xml中將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,是按照其在web.xml中配置的順序 來執行的。

所以這也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的 DispatcherFilter的前面的原因。因為,它們需要在請求被Struts2框架處理之前,做壹些前置的工作。

當Filter被調用,並且進入了Struts2的DispatcherFilter中 後,Struts2會按照在Action中配置的Interceptor Stack中的Interceptor的順序,來調用Interceptor。

  • 上一篇:計算機等級考試二級哪個比較好考過
  • 下一篇:VC的MFC和ATL具體是指什麽嘛?
  • copyright 2024編程學習大全網