過濾器的生命周期一般都要經過下面三個階段:
初始化
當容器第一次加載該過濾器時,init() 方法將被調用。該類在這個方法中包含了一個指向 Filter Config 對象的引用。
過濾
過濾器的大多數時間都消耗在這里。doFilter方法被容器調用,同時傳入分別指向這個請求/響應鏈中的 Servlet Request、Servlet Response 和 Filter Chain 對象的引用。然后過濾器就有機會處理請求,將處理任務傳遞給鏈中的下一個資源(通過調用 Filter Chain 對象引用上的 doFilter方法),之后在處理控制權返回該過濾器時處理響應。
析構
容器緊跟在垃圾收集之前調用 destroy()方法,以便能夠執行任何必需的清理代碼。
關於chain.doFilter(request,response)
他的作用是將請求轉發給過濾器鏈上下一個對象。這里的下一個指的是下一個filter,如果沒有filter那就是你請求的資源。 一般filter都是一個鏈,web.xml 里面配置了幾個就有幾個。一個一個的連在一起
request -> filter1 -> filter2 ->filter3 -> .... -> request resource.
