使用 SpringMVC 自帶 MockMvc 進行 Controller 單元測試時,控制台噴紅 Can't find bundle for base name javax.servlet.LocalStrings, locale zh_CN,雖不影響測試結果,但干擾日誌閱讀、掩蓋真實錯誤。本文記錄排查過程,給出 MyEclipse/IDEA 通用解決方案:補全 Servlet API 運行時依賴。
Can't find bundle for base name javax.servlet.LocalStrings, locale zh_CN
java.util.MissingResourceException: Can't find bundle for base name javax.servlet.LocalStrings, locale zh_CN
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:1082)
at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:123)
...
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:xxx)
javax.servlet.LocalStrings 是 Servlet API 內部用於國際化提示信息的資源包(包含中文等語言的錯誤消息)。MockMvc 模擬 Servlet 容器環境時,GenericServlet 初始化嘗試加載該資源包,但測試類路徑缺少 Servlet API 實現包(如 servlet-api.jar 或 javax.servlet-api.jar),導致 ResourceBundle 找不到 LocalStrings_zh_CN.properties。
Apache Tomcat 9.0) → Finish

現代項目建議在 pom.xml 顯式聲明 Servlet API 依賴(provided 作用域,避免與容器衝突):
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version> <!-- Spring 5 / Servlet 4.0 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
執行 mvn test-compile 刷新類路徑,問題解決。
javax.servlet:javax.servlet-api:4.0.1 添加,Scope 選 Provided。pom.xml 添加依賴,Maven Reload。MissingResourceException 被 Servlet 內部捕獲並忽略,僅打印堆疊,不拋出中斷流程。MockMvc 需要 Servlet API 運行時類來模擬容器行為。核心修復:確保測試類路徑包含 javax.servlet-api (provided)。MyEclipse 用戶通過 Add Library → Server Runtime 快速解決;Maven 項目直接加依賴更規範、可移植。養成「測試編譯零警告、零異常堆疊」的潔癖,能省下無數排查時間。