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

Struts2 啟動報錯「There is no Action mapped for namespace /」三大排查方向與解決方案

     編輯:Java 綜合教學

Struts2 啟動報錯「There is no Action mapped for namespace /」三大排查方向與解決方案

經典的 HTTP 404 錯誤:There is no Action mapped for namespace / and action name xxx。意味著 Struts2 找不到對應的 Action 映射。本文歸納三大核心排查方向,直擊痛點。

錯誤完整信息

HTTP Status 404 - There is no Action mapped for namespace / and action name first.
type Status report
message There is no Action mapped for namespace / and action name first.
description The requested resource is not available.
Apache Tomcat/6.0.37

排查清單(按可能性排序)

1. struts.xml 文件名或位置錯誤 ⭐ 最常見

  • 拼寫錯誤:sturts.xml、struts2.xml → 必須命名為 struts.xml。
  • 放置位置錯誤:必須放在 src 根目錄(Maven 項目為 src/main/resources),編譯後在 WEB-INF/classes 下。
    ❌ 放在 WEB-INF、WEB-INF/lib、包目錄下均無效。

2. struts.xml 內容配置錯誤

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "https://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!-- package name 唯一,namespace 必須以 / 開頭 -->
    <package name="default" namespace="/" extends="struts-default">
        <action name="first" class="com.example.FirstAction">
            <result>/success.jsp</result>
        </action>
    </package>
</struts>
  • namespace 必須以 / 開頭,且與請求 URL 匹配(如 /user/* 對應 namespace="/user")。
  • action name 不含 .action 後綴(除非配置了 struts.action.extension)。
  • class 全限定名 拼寫錯誤、包路徑錯誤會導致類加載失敗,無映射。
  • extends="struts-default" 繼承默認攔截器棧,缺失會導致參數注入失效。

3. 依賴包缺失或版本衝突

  • 核心包:struts2-core、xwork、ognl、freemarker、commons-logging、commons-fileupload、commons-io、commons-lang3、javassist。
  • 版本必須對應(如 Struts 2.3.x vs 2.5.x 依賴不同),避免傳遞依賴衝突。

快速驗證步驟

  1. 檢查 target/classes/struts.xml 是否存在且內容正確。
  2. 啟動項目,訪問 https://localhost:8080/你的項目/first.action(或配置的 action 名)。
  3. 控制台無錯誤日志但 404 → 99% 是 namespace/action 名不匹配。
  4. 開啟 Struts2 開發模式:struts.devMode=true(struts.properties),控制台會打印詳細映射表。

常見誤區

誤區正確做法
以為 action 名包含 .actionstruts.xml 中 name="first",URL 訪問 first.action
namespace 寫成空字符串根命名空間寫 namespace="/"
以為掃描注解不需要 struts.xml仍需 struts.xml 配置 <package>,或用 convention 插件

一條龍排查腳本

# 1. 確認文件存在
ls -la src/main/resources/struts.xml

# 2. 確認編譯輸出
ls -la target/classes/struts.xml

# 3. 檢查 namespace 和 action name
grep -n "namespace\|action name" src/main/resources/struts.xml

# 4. 檢查核心 jar 包版本
mvn dependency:tree | grep -E "struts2|xwork|ognl"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved