項目使用 Spring MVC + Freemarker,IE 可正常訪問登錄頁,Chrome/Firefox/Edge 等現代瀏覽器直接報 **HTTP 400 Bad Request**,無法加載登錄頁。這通常不是 Freemarker 模板語法錯誤(那會拋 500),而是 **請求未能正確到達 Controller,或參數綁定/編碼導致 Spring 拋出 400**。
現代瀏覽器默認發送 UTF-8 編碼請求,若 `web.xml` 中缺少 `CharacterEncodingFilter` 或其位置不在最前,導致參數解析亂碼,Spring 拋 400。
<!-- web.xml 最前面 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
模板頂部必須聲明 HTML5 Doctype 和 charset,否則瀏覽器可能以錯誤編碼渲染導致後續表單提交編碼錯誤。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<!-- ... -->
</head>
提供的代碼片段中 `<@g.htmlDocType />` 應輸出正確的 Doctype,請檢查 `g.htmlDocType` 宏定義。
Freemarker 模板文件 (`.ftl`) **必須以 UTF-8 無 BOM 格式保存**。Windows 記事本保存可能帶 BOM,導致模板引擎解析錯誤,間接引發 400。請用 Notepad++ / VS Code / IDEA 另存為「UTF-8 無 BOM」。
若 `web.xml` 中 `DispatcherServlet` 映射為 `/`,且未正確配置 `
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/style/**" location="/style/" />
<mvc:default-servlet-handler />
登錄表單 `