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

Struts2 基礎核心:請求響應處理與 Web 資源獲取全解析

     編輯:Java 綜合教學

Struts2 基礎核心:請求響應處理與 Web 資源獲取全解析

Struts2 作為經典的 MVC 框架,其核心機制圍繞「請求處理」與「響應結果」展開。本文將系統梳理 Action 處理流程、Result 類型機制、通配符映射、動態方法調用,以及 Web 資源獲取的兩種模式,幫助開發者建立清晰的知識體系。

一、 請求與響應核心機制

1. Action:請求處理的核心控制器

在 Struts2 中,Action 扮演雙重角色:既是 struts.xml 中定義的 <action> 元素,也是表單提交的 action 屬性指向的目標,本質上代表一個 Struts2 請求的處理入口。

Action 類的規範要求
  • 屬性驅動:通過 setXxx() 接收請求參數,getXxx() 供頁面顯示數據。
  • 構造器:必須提供無參構造器。
  • 處理方法:至少包含一個供框架調用的公共方法(預設為 execute())。
  • 多方法支援:單一 Action 類可包含多個處理方法,對應不同請求。
  • 非單例模式:Struts2 為每個請求創建獨立的 Action 實例,保證線程安全。
ActionSupport:預設基礎類別

ActionSupport 實現了多個關鍵接口,提供開箱即用的功能:

接口核心功能
Action提供 SUCCESS、INPUT 等結果常量與 execute() 抽象方法
Validateable支援程式化輸入驗證
ValidationAware管理類級別與字段級別錯誤訊息
TextProvider從資源檔讀取屬性值,實現國際化
LocaleProvider獲取 Locale 物件,支援國際化
Serializable使 Action 可序列化

2. 請求擴展名與攔截規則

Struts2 根據請求路徑中的 ServletPath 後綴(如 .action、.do)判斷是否由框架處理。預設支援 .action 和無後綴兩種模式。可透過 struts.xml 中的 <constant> 元素自訂:

<constant name="struts.action.extension" value=".action,,.do"/>

所有預設常量定義於 default.properties,採用「約定優於配置」原則。

3. Result:響應結果的多態呈現

每個 <action> 可包含多個 <result>,核心屬性包括:

  • name:對應 Action 方法返回的字串值(預設 success)
  • type:結果類型,決定跳轉方式
五大常用結果類型詳解
類型類別適用場景
dispatcher(預設)ServletDispatcherResult內部轉發至 JSP/HTML,無法轉發至另一 Action(攔截器不會再次執行)
chainActionChainResult轉發至另一 Action,攔截器鏈重新執行,共享請求數據
redirectServletRedirectResult客戶端重定向,目標可為 JSP 或 Action,需使用虛擬路徑(不含應用上下文)
redirectActionServletActionRedirectResult重定向至指定 Action,支援傳遞參數與命名空間
streamStreamResult以輸出流響應,適用於檔案下載、AJAX 回應
chain 範例:
<action name="hello" class="com.example.HelloWorld" method="secondMethod">
  <result type="chain">
    <param name="actionName">worldhello</param>
    <param name="namespace">/</param>
  </result>
</action>
redirectAction 範例:
<action name="helloworld_*" class="com.example.HelloWorld" method="{1}">
  <result>/success.jsp</result>
  <result type="redirectAction" name="redirectAction">
    <param name="actionName">redirect2Action</param>
  </result>
</action>

4. 通配符映射與動態方法調用

  • 映射優先級:精確匹配 > 先聲明的通配符匹配
  • 動態方法調用:URL 格式 actionName!methodName.action,預設關閉,需設定 struts.enable.DynamicMethodInvocation=true 啟用

二、 Web 資源獲取:解耦與耦合兩種範式

Struts2 將 Servlet API 封裝為 Map 物件:RequestMap、SessionMap、ApplicationMap、ParameterMap。

1. 與 Servlet 解耦(推薦)

  • ActionContext:ActionContext.getContext().getSession() 等獲取 Map 物件
  • 實現 XxxAware 接口:RequestAware、SessionAware、ApplicationAware、ParameterAware,框架自動注入對應 Map

2. 與 Servlet 耦合(特殊需求時使用)

  • ServletActionContext:直接獲取 HttpServletRequest、HttpServletResponse、ServletContext
  • 實現 ServletXxxAware 接口:ServletRequestAware、ServletResponseAware、ServletContextAware

最佳實踐:優先採用解耦方式,僅在需直接操作 Servlet API(如檔案上傳、Cookie 處理)時使用耦合模式。

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