首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Struts2 入門:解決 404 錯誤的 Action 路徑配置不匹配問題

     編輯:程式設計疑難解答

錯誤現象

初學 Struts2 框架時,JSP 頁面提交表單後瀏覽器直接報 404 錯誤,Tomcat 控制台無異常信息。經排查,核心原因是 JSP 表單 action 路徑與 struts.xml 中 Action 配置的 name 屬性不一致。

典型錯誤配置對比

JSP 頁面(錯誤)

<form action="Can/user_save" method="post">
    <!-- 表單字段 -->
</form>

struts.xml 配置(錯誤)

<action name="C_method" class="com.example.UserAction" method="save">
    <result name="success">/success.jsp</result>
</action>

問題分析

  • 瀏覽器請求路徑:`/項目名/Can/user_save`
  • Struts2 攔截器尋找 `name="Can/user_save"` 的 Action
  • 實際配置的 Action name 為 `C_method`,導致找不到處理器 → 404

解決方案

方案一:統一路徑命名(推薦)

<!-- JSP -->
<form action="userSave" method="post">

<!-- struts.xml -->
<action name="userSave" class="com.example.UserAction" method="save">
    <result name="success">/success.jsp</result>
</action>

方案二:使用命名空間

<package name="user" namespace="/user" extends="struts-default">
    <action name="save" class="com.example.UserAction" method="save">
        <result name="success">/success.jsp</result>
    </action>
</package>

<!-- JSP -->
<form action="user/save" method="post">

Struts2 請求處理流程圖解

HTTP Request
     ↓
StrutsPrepareAndExecuteFilter
     ↓
ActionMapping (根據 URL 匹配 Action name)
     ↓
ActionProxy → ActionInvocation
     ↓
Interceptor 堆棧執行 (params, validation, workflow...)
     ↓
Action 實例方法調用 (execute() 或指定 method)
     ↓
Result 處理 (JSP, FreeMarker, JSON, Redirect...)
     ↓
HTTP Response

常見 404 排查清單

  1. Action name 與請求路徑匹配:去除項目上下文路徑後的路徑必須與 `name` 一致
  2. Namespace 配置:`` 會影響最終匹配路徑
  3. struts.xml 加載:確認文件在 `src` 根目錄,編譯後在 `classes` 根目錄
  4. Action 類方法:`method` 屬性指定的方法必須存在,返回 `String` 類型
  5. Result 路徑:結果頁面路徑相對 WebContent 根目錄

調試技巧

  • 啟用 Struts2 開發模式:`struts.devMode=true` 在 `struts.properties` 中
  • 查看控制台輸出的「Could not find action or result」詳細信息
  • 使用瀏覽器 Network 面板確認實際請求 URL

Struts2 基於約定優於配置,但核心映射關係必須精確對應。初學階段建議採用簡單扁平化命名,避免過早使用複雜命名空間導致調試困難。

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