1. 一個簡單的使用者管理系統
需求:完成對使用者的增删改查
①建立web項目,并引入struts開發包
②畫出架構圖(使用MyEclipse提供的struts設計界面來畫)
login.jsp -> LoginAction(UserForm) -> mainFrame.jsp -> GoManage-> manageuser.jsp
③寫好DAO/Service層
2. 分派action(DispatchAction)
為什麼需要DispatchAction?
從上面的設計來看,完成功能沒有問題,但是如果我們每個請求都對應一個Action,勢必造成Action過多,程式顯得比較臃腫。為達到減肥的目的,可以把一類請求寫到一個Action中處理,是以使用分派action,DispatchAction。好處:1.程式簡單 2.利于維護和擴充
快速入門案例:
①建立web工程
②引入struts包
③在struts-config.xml檔案中,增加parameter參數,用于将來區分使用者的不同請求,它的值由使用者指定:
<!-- parameter用于将來區分使用者的不同請求,它的值由使用者指定 -->
<action-mappings >
<action
attribute="userForm"
parameter="flag"
或者直接使用圖形化界面生成DispatchAction,注意要填寫flag:
④使用DispatchAction,往往需要自己從新命名函數,即将Action中的execute方法改名
request.getSession().invalidate();//清除所有session
request.getSession().removeAttribute();//隻清除某一個session
⑤通過flag确定是在DispatchAction中調用哪個函數,往哪裡跳轉
3. 全局跳轉
如果一個forward寫在action的标簽裡面,則說明是局部跳轉,也即隻有這個action才能使用這個跳轉。
全局跳轉就是在action标簽之外使用<global-forward>
配置完成之後,在Action之中直接加入goerr即可:
return mapping.findForward("goerr");
所謂全局跳轉,指的是所有action都可以跳轉到該頁面
所謂局部跳轉,指的是隻有本action才可以跳轉到該頁面
4. 動态表單dynamic form
當我們jsp的表單内的屬性個數和類型不能确定的時候,我們可以使用動态表單來解決問題。
動态表單和普通表單的差別在于:
①普通表單類ActionForm是首先你需要定義這樣一個表單類,然後配置到struts-config.xml中
②動态表單完全依賴反射機制建立,是以不需要去定義ActionForm類,直接在struts-config.xml中配置即可
快速入門:
①手動配置struts-config.xml
<form-beans>
<form-bean name="userForm" type="org.apache.struts.action.DynaActionForm">
<!-- 該表單的屬性是配置出來的 -->
<!-- name是jsp頁面空間的name,type是将來要儲存的資料類型 -->
<form-property name="name" type="java.lang.String"></form-property>
<form-property name="password" type="java.lang.String"></form-property>
<form-property name="email" type="java.lang.String"></form-property>
</form-bean>
</form-beans>
②建立Action
③從動态表單中取出資料
public ActionForward register(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm userForm = (DynaActionForm) form;// TODO Auto-generated method stub
//從動态表單中取出資料
//這裡的名字依照struts-config.xml中配置的name
String name = userForm.getString("name");
String password = userForm.getString("password");
String email = userForm.getString("email");
System.out.println(name+","+password+","+email);
return mapping.findForward("registerok");
}