首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts2 Action 命名大小寫導致找不到映射的問題分析

     編輯:Java 相關知識

Struts2 Action 類命名陷阱:大小寫敏感導致「No Action mapped」錯誤

在 Struts2 開發中,遇到 There is no Action mapped for namespace [/] and action name [MainPage] 錯誤時,開發者往往優先檢查 struts.xml 配置、URL 路徑、命名空間等常見問題。但有一個極易被忽視的陷阱——Action 類名稱的大小寫規範。

常見排查方向(均非本文核心原因)

  1. struts.xml 中 package 的 namespace 配置錯誤
  2. JSP 頁面調用 Action 的 URL 路徑拼寫錯誤
  3. JSP 頁面未設定基準 URL(<base> 標籤)
  4. struts.xml 檔案放置路徑不正確(應置於 src 根目錄)
  5. struts.xml 的 DTD 宣告版本不匹配
  6. web.xml 未配置歡迎頁面

真兇:Action 類命名不規範

經過數小時排查,發現問題源於 Action 類命名:

  • 錯誤命名:MainPageAction.java(含大小寫混合的 "Page")
  • 正確命名:MainpageAction.java 或 MainPageAction.java(但需對應正確的 action name)

核心規則:Struts2 將 Action 類名稱(去除 "Action" 後綴)轉為小寫作為預設的 action name。若類名為 MainPageAction,預設 action name 為 mainpage(全小寫),而非 mainPage 或 MainPage。

驗證與解決方案

<!-- struts.xml 顯式指定 action name 避免歧義 -->
<action name="MainPage" class="com.example.MainPageAction">
    <result>/success.jsp</result>
</action>

或統一遵循命名慣例:

  • 類名:XxxYyyAction(駝峰式)
  • 對應 action name:xxyy(全小寫)
  • JSP 呼叫:<s:url action="xxyy"/>

最佳實踐建議

  1. 顯式指定 action name:在 struts.xml 中明確配置 name 屬性,不依賴預設命名轉換
  2. 統一命名規範:團隊協定 Action 類命名與 action name 映射規則
  3. 啟用開發模式:struts.devMode=true 可獲得更詳細錯誤堆疊
  4. 使用約定優於配置插件:struts2-convention-plugin 可減少 XML 配置錯誤

這個看似微不足道的命名細節,實際上折射出框架約定優於配置機制的運作邏輯。養成良好命名習慣,能避免 90% 的映射找不到問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved