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

Struts 2 學習筆記(四):核心配置與 Action 基礎——常量載入順序、命名空間、Servlet API 存取、動態方法調用

     編輯:Java 相關知識

奠基 Struts 2 核心配置知識:常量載入優先級、package namespace 對應模組概念、Action 類型選擇、Servlet API 存取三種方式、動態方法調用兩種機制、method 屬性配置優缺點。

常量載入順序(後載入覆蓋前載入)

  1. struts-default.xml
  2. struts-plugin.xml
  3. struts.xml
  4. web.xml

強烈不建議在 web.xml 配置 Struts 2 常量。

ForwardAction 等價配置

Struts 1 ForwardAction → Struts 2:

<action name="Showcase">
  <result>/showcase.jsp</result>
</action>

Showcase.action 直接映射 /showcase.jsp。

Package Namespace:模組化關鍵

<package namespace="/book"> 相當於 Struts 1 模組,但切換更便利。Action GetBooks 需用 /book/GetBooks.action 映射。

  • 未指定或 "" → 預設命名空間(全域 Action,類似 Struts 1 <global-action>)
  • "/" → 根命名空間,URL 為 /GetBooks.action
  • 找不到指定 namespace 時回退至預設命名空間

Action 屬性平等性

系統不區分封裝請求參數的屬性與封裝處理結果的屬性,兩者完全平等。

Action 類型選擇

  • POJO(無介面)
  • 實作 Action 介面
  • 繼承 ActionSupport(預設處理類,未指定 class 時自動使用)

存取 Servlet API 三種方式

1. ActionContext(推薦,解耦)

操作 Map 實例,Struts 2 自動映射至真實 Servlet API:

  • ActionContext.getContext().getSession() → HttpSession attributes
  • getRequest()、getApplication() 同理
  • get()/put() 針對 Request attributes
  • 無直接操作 HttpServletResponse 方法

2. 實作 Aware 介面(耦合 Servlet API)

  • ServletContextAware、ServletRequestAware、ServletResponseAware
  • 實作對應 setXxx() 方法獲取真實實例

3. ServletActionContext 靜態方法(強耦合)

直接獲取各 Servlet API 實例,讓 Action 與 Servlet API 耦合。

關於 HttpServletResponse 的特殊說明

即使獲取 HttpServletResponse,**不要在 Action 直接輸出響應**(無效果)。Action 僅為控制器,不直接生成響應。這就是 ActionContext 不提供 Response 操作的原因(僅操作 Cookie 需用到)。Struts 1 中 Action 返回 null 可用 response.getWriter().println() 輸出,Struts 2 不可。

動態方法調用(DMI)

1. 表單指定:action="ActionName!methodName.action"

<form action="Login!regist.action"> → 呼叫 LoginAction.regist() 而非 execute()

一個 Action 可包含多邏輯,無需配置檔額外設定,比 Struts 1 更便利。

2. Action 配置 method 屬性

<action name="Login" class="com.unmi.LoginAction" method="regist">

同樣一個 Action 類定義多邏輯,每個映射成邏輯 Action。缺點:

  • 分開的邏輯 Action 無法共享 <result> 配置
  • class 屬性值產生冗余
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved