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

Struts2 Convention 插件:Action 映射規則與自定義結果路徑

     編輯:程式設計綜合問答

使用 struts2-convention-plugin 時,Action 類 action.a.b.LoginAction 預設映射到 /a/b/login.action,但實測發現 /login、/xxx/xxxx/login 等路徑皆可訪問,且想將結果頁指向 WEB-INF/content/a/b/login-success.jsp。

預設映射規則

  • 包名路徑 → URL 路徑:action.a.b → /a/b/
  • 類名移除 Action 後缀 → Action 名:LoginAction → login
  • 預設結果頁:WEB-INF/content/a/b/login-success.jsp(對應 success 結果)

為什麼多層路徑都能訪問?

Convention 插件採用 命名空間前綴匹配,只要尾部符合 /login 即會路由到該 Action,導致 /xxx/login 也命中。

限制路徑層級

在 struts.xml 設定嚴格命名空間:

<constant name="struts.convention.action.suffix" value="Action"/>
<constant name="struts.convention.action.mapAllMatches" value="false"/>
<constant name="struts.convention.default.parent.package" value="convention-default"/>

自定義結果路徑

使用註解精確控制:

@Namespace("/a/b")
@Action(value = "login", results = {
    @Result(name = "success", location = "/WEB-INF/content/a/b/login-success.jsp")
})
public class LoginAction extends ActionSupport { ... }

或在 struts.xml 覆寫:

<package name="custom" extends="convention-default">
  <action name="login" class="action.a.b.LoginAction">
    <result name="success">/WEB-INF/content/a/b/login-success.jsp</result>
  </action>
</package>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved