RequestProcessor。execute())。<result>,實例化對應 Result 類型(JSP、FreeMarker、Velocity、Stream 等)。關鍵差異:無 FormBean 作用域封裝,Action 直接獲取請求參數。
<filter>
<filter-name>controller</filter-name>
<filter-class>org.apache.struts.action2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>controller</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
.action(struts.action.extension 配置)。.do) 可共存。<package name="default" extends="struts-default">
<action name="myAction" class="com.example.MyAction">
<result name="success">/success.jsp</result>
<result name="input">/form.jsp</result>
</action>
</package>
public class MyAction {
public String execute() throws Exception {
// 業務邏輯
return "success";
}
}
String 的公共方法均可作為 Action 入口(通過配置指定)。Struts 2 利用 控制反轉 (IoC) 將請求參數、Servlet API 對象注入 Action:
private HttpServletRequest request; setServletRequest())。ServletRequestAware、SessionAware、ParameterAware 等)。public class MyAction implements ServletRequestAware {
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request) { this.request = request; }
public String execute() { /* 直接使用 request */ return Action.SUCCESS; }
}
攔截器基於 Proxy 模式 實現 AOP(面向切面編程):
defaultStack)包含:params(參數注入)、validation、workflow、servletConfig 等。Struts 1 Action 單例,需開發者自行保證線程安全。Struts 2 每請求創建新 Action 實例,天然線程安全,開發者可放心使用實例字段。
Struts 2 通過 IoC 和 AOP 徹底解耦 Action 與框架,Action 成為純 POJO。這兩種思想已滲透現代框架(Spring 更徹底體現)。理解 Proxy 模式與控制反轉本質,比記憶配置細節更重要。