容器啟動時,自定義 EncodingFilter 的構造函數與 init() 被調用**兩次**,且 FilterConfig 名稱不同:
創建過濾器 EncodingFilter
Encoding Filter init, config: ApplicationFilterConfig[name=encodingFilter, ...]
創建過濾器 EncodingFilter
Encoding Filter init, config: ApplicationFilterConfig[name=filter.EncodingFilter, ...]
在 web.xml 中為同一過濾器類配置了兩個 <filter> 節點(名稱不同,類相同):
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>filter.EncodingFilter</filter-class>
</filter>
<filter>
<filter-name>filter.EncodingFilter</filter-name> <!-- 第二個節點 -->
<filter-class>filter.EncodingFilter</filter-class>
</filter>
容器按**配置節點**實例化過濾器,而非按類。兩個節點 → 兩個實例 → 兩次初始化。
<filter> 定義,<filter-mapping> 可映射多個 URL 模式。<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/login.jsp</url-pattern>
</filter-mapping>
web.xml 中**只定義一次**。<filter> 內配置多個 <init-param>,或編寫多個子類。@WebFilter)時同理:不要在同一類上重複標註,或確保 servletNames/urlPatterns 合併。Filter 重複初始化 99% 由 **web.xml 重複配置** 引起。檢查 <filter> 節點數量,保留一個即可解決。