| 優點 | 缺點 |
|---|---|
| 良好架構設計、可重用模塊化、開源、豐富標籤庫 | 強依賴Web容器(改配置需重啟)、配置文件複雜、ActionForm難測試、Action測試依賴Servlet API需Mock |
initInternal():載入國際化資源(MessageResources工廠模式)initOther():解析web.xml中config/convertNull參數,默認配置WEB-INF/struts-config.xmlinitServlet():載入ActionServlet初始化參數、DTD緩存至HashMap、解析web.xml、將自身壓入Digester棧initChain():讀取責任鏈配置(默認org/apache/struts/chain/chain-config.xml)ServletContextModuleConfig實例(MessageResource/PlugIn/DataSource/FormBean/Forward/Exception/Action統一管理入口)moduleConfig.freeze():凍結配置,不可變config/前綴參數,初始化多模塊配置initModulePrefixes():初始化其他模塊前綴映射核心組件:commons-digester(XML↔對象轉換)、commons-chain(責任鏈模式組織復雜流程)
*.do攔截 → service() → doGet/doPost()process() → 獲取RequestProcessor實例RequestProcessor.process()核心處理:processMultipart()處理文件上傳processPath()獲取路徑映射execute() → 返回ActionForwardActionForward → 轉發JSP生成HTML響應全程採用責任鏈模式,各Command節點處理特定職責,異常即時中斷鏈路。
struts-config.xmlexecute()FormBean.validate() + 客戶端validator-rules.xml/validation.xmlinit()初始化jsp-api.jar/servlet-api.jar與Tomcat衝突 → 獨立lib目錄引用ValidatorForm| 標籤庫 | 核心用途 |
|---|---|
| HTML | 表單標籤與ActionForm綁定,HTML標籤一一映射 |
| Bean | 輸出文本信息(國際化、屬性訪問) |
| Logic | 邏輯判斷/循環,消除JSP腳本代碼 |
| Nested | 巢狀屬性訪問 |
| Tiles | 視圖佈局模板化 |
SimpleTagSupport,實現doTag().tld文件配置URI、屬性、標籤類<%@ taglib uri="" prefix="" %>引入使用<form-bean name="LoginForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="userName" type="java.lang.String"/>
<form-property name="password" type="java.lang.String"/>
</form-bean>
Action中使用:DynaValidatorForm form = (DynaValidatorForm) formParam;
鐵律:客戶端驗證為體驗優化,服務端驗證為安全底線,絕不可僅依賴客戶端驗證。