Filter 為 Servlet 變體,預處理請求、後處理回應,形成處理鏈。不能直接產生回應。
javax.servlet.Filter 介面web.xml 註冊 <filter> 與 <filter-mapping><filter-name>:過濾器名稱<filter-class>:完整類別名<init-param>:初始化參數,透過 FilterConfig 取得攔截資源指定方式:<url-pattern> 或 <servlet-name>。<dispatcher> 指定攔截觸發時機:
| 值 | 觸發條件 |
|---|---|
| REQUEST | 用戶直接存取(預設) |
| INCLUDE | RequestDispatcher.include() |
| FORWARD | RequestDispatcher.forward() |
| ERROR | 聲明式異常處理 |
<filter>
<filter-name>URIFilter</filter-name>
<filter-class>org.cjj.filter.URIFilter</filter-class>
<init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping>
<filter-name>URIFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
多個 Filter 依 web.xml 宣告順序形成鏈,FilterChain.doFilter() 控制傳遞下一環或目標資源。