-
過濾器鏈執行順序:
用戶請求-->過濾器1-->過濾器2-->servlet service-->過濾器2-->過濾器1-->用戶
查看全部 -
項目啟動時 init,
訪問項目時 doFilter,
項目停止時 destroy
查看全部 -
init--->doFilter--->destroy
查看全部 -
@web.xml <filter> <filter-name>FirstFilter</filter-name> <filter-class>com.imooc.filter.FirstFilter</filter-class> </filter> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/main.jsp</url-pattern> <dispatcher>FORWARD</dispatcher> </filter-mapping> @FirstFilter.java public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException{ HttpServletRequest hsreq = (HSReq) req; HttpServletResponse hsres = (HSRes) res; // 重定向:Dispatcher走REQUEST // hsres.sendRedirect(hsreq.getContextPath()+"/main.jsp"); hsres.sendRedirect(hsreq.getContextPath() + "/middle.jsp"); // 轉發:Dispatcher走FORWARD // hsreq.getRequestDispatcher("main.jsp").forward(hsreq, hsres); // hsreq.getRequestDispatcher("main.jsp").include(hsreq, hsres);//同理
查看全部 -
Filter可認為是Servlet的一種“變種”,它主要用于對用戶請求進行預處理,也可以對HttpServletResponse進行后處理,是個典型的處理鏈。它與Servlet的區別在于:它不能直接向用戶生成響應。完整的流程是:Filter對用戶請求進行預處理,接著將請求交給Servlet進行處理并生成響應,最后Filter再對服務器響應進行后處理。
Filter有如下幾個用處。
在HttpServletRequest到達Servlet之前,攔截客戶的HttpServletRequest。
根據需要檢查HttpServletRequest,也可以修改HttpServletRequest頭和數據。
在HttpServletResponse到達客戶端之前,攔截HttpServletResponse。
根據需要檢查HttpServletResponse,也可以修改HttpServletResponse頭和數據。
Filter可負責攔截多個請求或響應;一個請求或響應也可被多個請求攔截。
創建一個Filter只需兩個步驟:
創建Filter處理類(實現Filter接口).
web.xml文件中配置Filter(配置<filter>與<filter-mapping>)每個過濾器都有它對應的<url-pattern>地址.即過濾器關聯的url地址.<url-pattern>標簽是<filter-mapping>下的子標簽. 假如多個過濾器相關聯的地址都不一樣沒有交集,則它們都是相互獨立的.互不相干. 假如多個過濾器相關聯的地址都一樣.則它們便構成過濾器鏈.此時用戶請求就會依次通過所有關聯這個Web資源地址的過濾器. 過濾器鏈就是針對一個客戶的請求,找到匹配的過濾器有多個.用戶請求就會依次通過所有關聯這個Web資源的過濾器.服務器會按照web.xml文件中過濾器定義的先后順序組裝成一條鏈.執行的順序也是沿著這條鏈. 當過濾器的doFilter()方法中的chain調用doFilter(request,response)方法.符合規則則會把請求傳遞給下一個過濾器,下一個過濾器依次調用chain.doFilter(),直到傳遞到Web資源.當Web資源處理完傳遞過來的請求并返回響應后.此時便執行doFilter()方法放行后的方法.過濾器把響應傳遞給用戶,從最接近Web資源的過濾器開始傳遞響應給用戶. 假設定義過濾器的順序為filter1、filter2、filter3.(都關聯同一個web資源或Servlet) 初始化順序(一啟動服務器時加載,根據web.xml的定義過濾器的順序初始化):filter1-->filter2-->filter3 過濾器執行順序:cilent發送request-->filter1-->filter2-->filter3-->Web資源-->Web資源發送響應返回-->通過filter3-->filter2-->filter1-->到達client. 其中doFilter()結束順序filter3-->filter2-->filter1.跟遞歸一樣,因為放行是chain.doFilter(),必須當此方法執行完,即當請求去到Web資源并處理完信息返回響應后,doFilter()方法便執行放行后的語句.然后就結束. 摧毀順序(關閉服務器):filter1-->filter2-->filter3.
查看全部 -
<filter> ? ? ? ?<filter-name>FirstFilter</filter-name> ? ? ? ?<filter-class>com.imooc.filter.FirstFilter</filter-class> ? ?</filter> ? ?<filter-mapping> ? ? ? ?<filter-name>FirstFilter</filter-name> ? ? ? ?<url-pattern>/*</url-pattern> ? ?</filter-mapping> 注意: /index.jsp:只有index.jsp /index*:帶有index前綴的所有URL /*:所有URL “*”代表任意值。
Ps1:<filter>...</filter>:只能有一個;但是<filter-mapping>...</filter-mapping>可以有多個。 Ps2:<filter>...<filter-name>Filter的名字</filter-name>...</filter>必須和<filter-mapping>...<filter-name>Filter的名字</filter-name>...</filter-mapping>一致。
查看全部 -
過濾器的生命周期. 1.實例化階段-->一啟動服務器就會從Web容器的web.xml文件中自動去加載實例化過濾器.且只會實例化一次.即生成了過濾器. 2.初始化階段-->生成過濾器之后便是初始化,加載一些初始化信息.調用init()方法.且只執行一次. 3.過濾階段-->執行過濾器的doFilter()方法進行過濾.執行n次的,凡是過濾器捕獲到用戶的請求,都會執行這個過濾方法. 4.銷毀階段-->當Web容器關閉即服務器關閉的時候,便執行destroy()方法銷毀.
查看全部 -
JAVA過濾機制——過濾簡介 1、過濾器三部分:過濾源(用戶請求)——>過濾規則——>過濾結果 2、過濾器不處理結果,只做輔助性操作 3、定義:過濾器是一個【服務器端】的組件,它可以【截取用戶端的請求和響應信息】,并對這些信息過濾
查看全部 -
同一個URL請求要經過多個過濾器時,過濾器的執行順序按照過濾器在Web.xml中的定義順序來執行。
查看全部 -
查看全部
-
1.一般filter都是一個鏈,web.xml 里面配置了幾個就有幾個。一個一個的連在一起?
request -> filter1 -> filter2 ->filter3 -> …. -> request resource.
2.chain.doFilter將請求轉發給過濾器鏈下一個filter , 如果沒有filter那就是你請求的資源
想當于一個放行方法,之前的請求是到 index.jsp 放行后就會到index.jsp頁面 就會執行里面的代碼
查看全部 -
在過濾器對象的doFilter()方法中,業務邏輯處理完成之后,需要通過FilterChain對象的doFilter()方法將請求傳遞到下一個過濾器或者目標資源,否則將出現錯誤。
查看全部 -
查看全部
-
過濾器鏈執行過程
查看全部 -
過濾器web.xml的配置
查看全部
舉報