Struts 可運行於任何支援 JSP 1.2 / Servlet 2.3 的 Web 容器。所有請求統一提交至核心控制器 org.apache.struts.action.ActionServlet。
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern> <!-- 或 /do/* -->
</servlet-mapping>
兩種常用 URL 模式:
https://host/context/actionName.dohttps://host/context/do/actionName容器啟動時調用 ActionServlet.init(),讀取 struts-config.xml 初始化配置。標準結構:
<struts-config>
<data-sources /> <!-- 數據源 -->
<form-beans /> <!-- ActionForm 定義 -->
<global-exceptions /> <!-- 全局異常處理 -->
<global-forwards /> <!-- 全局轉向 -->
<action-mappings /> <!-- Action 映射 -->
<controller /> <!-- 控制器參數 -->
<message-resources /> <!-- 國際化資源 -->
</struts-config>
核心組件為 Action 與 Form。
ActionServletaction-mappings 尋找對應 Form 與 Actionrequest 參數自動映射填充至 Form BeanForm 傳遞給 ActionAction 獲得 mapping、form、request、response,調用 execute() 處理業務Action 返回 ActionForward(邏輯視圖名)ActionServlet 根據轉向配置導向對應 JSP,響應客戶端
<form method="post" action="/example.do">
請輸入值: <input type="text" name="test"/>
<input type="submit" name="Submit" value="提交">
<input type="reset" name="reset" value="重置">
</form>
<struts-config>
<form-beans>
<form-bean name="exampleActionForm"
type="com.zotn.struts.example1.ExampleActionForm" />
</form-beans>
<action-mappings>
<action name="exampleActionForm" path="/example"
type="com.zotn.struts.example1.ExampleAction">
<forward name="forward" path="/forward.jsp" />
</action>
</action-mappings>
</struts-config>
public class ExampleAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
ExampleActionForm myForm = (ExampleActionForm) form;
String input = myForm.getTest();
if (input == null || input.trim().isEmpty()) {
return mapping.findForward("empty"); // 需在配置中定義
}
// 業務處理...
return mapping.findForward("forward");
}
}
public class ExampleActionForm extends ActionForm {
private String test;
public String getTest() { return test; }
public void setTest(String test) { this.test = test; }
public void reset(ActionMapping mapping, HttpServletRequest request) {
test = null; // 重置表單
}
}
ActionServlet 為單例,多線程共享 → Action 類必須線程安全(僅用局部變量)struts-config.xml 為核心配置,所有映射關係集中定義ActionForm 負責數據承載與簡單驗證,業務邏輯置於 Action 或業務 Beanforward)解耦 Action 與具體 JSP 路徑