視圖層核心標簽速查
| 標簽 | 功能 | 關鍵屬性 |
<html:errors> | 顯示框架組件產生的錯誤消息 | 無 |
<html:form> | 創建 HTML 表單,綁定 ActionForm Bean | action、focus 等 |
<html:text> | 表單文本框,綁定 Bean 屬性 | property |
<bean:message> | 輸出國際化文本,從 ResourceBundle 取值 | key |
<bean:write> | 輸出 Bean 屬性值 | name、property |
<logic:present> | 判斷 Bean 在指定範圍存在則輸出體內容 | name、scope |
控制器組件架構
- ActionServlet:框架自帶核心控制器,通常無需擴展。
- Action:開發者擴展點,處理具體 HTTP 請求。
請求處理全流程
- 用戶提交表單 → 框架自動裝配數據到 ActionForm Bean(屬性與字段一一映射)。
- 自動調用
validate() 驗證:
- 返回
null 或空 ActionErrors → 驗證通過。
- 含
ActionMessage → 保存至 request 轉發回輸入頁,<html:errors> 顯示錯誤。
- 驗證通過 → 調用 Action.execute() 核心業務邏輯。
Action.execute() 簽名與參數
public ActionForward execute(
ActionMapping mapping, // struts-config.xml 配置映射
ActionForm form, // 已驗證的表單數據
HttpServletRequest request,
HttpServletResponse response
) throws IOException, ServletException;
- 返回
ActionForward 指定轉發路徑。
- 向 JSP 傳遞數據:
request.setAttribute("personbean", pb);JSP 用 <logic:present name="personbean" scope="request"> 讀取。
struts-config.xml 關鍵配置解讀
<action
path="/HelloWorld"
type="hello.HelloAction"
name="HelloForm"
scope="request"
validate="true"
input="/hello.jsp">
<forward name="SayHello" path="/hello.jsp"/>
</action>
path:請求訪問路徑
type:Action 實現類全限定名
name:傳入的 ActionForm Bean 名稱
scope:Bean 存放範圍(request/session)
validate:是否執行表單驗證
input:驗證失敗轉發頁面
forward:邏輯視圖名稱映射物理路徑