基於Spring例子的JPetStore分析

elevenxl發表於2008-03-18

這幾天一直在學習JPetStore這個基與輕量級j2EE架構的寵物電子商務網站,下面來分析一下基於Struts+Spring+Ibatis架構的使用者管理模組.
  
  首先分析一下jpetstore的使用者登入介面,看struts-config.xml檔案,
  
  使用者資訊Bean,使用者資訊Bean為AccountActionForm配置兩個不同的例項。accountForm使用者存放使用者登入資訊。workingAccountForm用於使用者註冊,以及賬號修改時存放資訊。
  
  <form-beans>
  <!--存放使用者登陸的賬號資訊-->
  <form-bean name="accountForm" type="org.springframework.samples.jpetstore.web.struts.AccountActionForm"/>
  <form-bean name="cartForm" type="org.springframework.samples.jpetstore.web.struts.CartActionForm"/>
  <form-bean name="emptyForm" type="org.springframework.samples.jpetstore.web.struts.BaseActionForm"/>
  <!--用於使用者註冊和個人資料修改時存放使用者資訊-->
  <form-bean name="workingAccountForm" type="org.springframework.samples.jpetstore.web.struts.AccountActionForm"/>
  <form-bean name="workingOrderForm" type="org.springframework.samples.jpetstore.web.struts.OrderActionForm"/>
  </form-beans>
  
  1.使用已有帳號登陸
  
  <action path="/shop/signonForm" type="org.springframework.samples.jpetstore.web.struts.DoNothingAction"
  validate="false">
  <forward name="success" path="/WEB-INF/jsp/struts/SignonForm.jsp"/>
  </action>
  
  <action path="/shop/signon" type="org.springframework.samples.jpetstore.web.struts.SignonAction"
  name="accountForm" scope="session" validate="false">
  <forward name="success" path="/shop/index.do"/>
  </action>
  
   <!-- 使用者點選登陸,系統呼叫 shop/signonForm 直接將使用者的登陸請求,轉向到SignonForm.jsp頁面(登陸介面),輸入使用者名稱,密碼,點選登入,系統將呼叫 shop/signon Action來處理使用者登入請求,如果登陸失敗,頁面返回到SignonForm.jsp頁面(登陸介面),登陸成功,shop/signon 轉到主頁面shop/index.do。--〉
  
  2.建立新帳號
  
  <!-- 如果使用者在當前登入頁面(SigonForm.jsp)中選擇“建立新帳號”,系統將呼叫“shop/newAccountForm”在 NewAccountFormAction 的execute中為httpsession建立AccountActionForm使用者存放使用者的註冊資訊,然後轉向到使用者註冊介面 NewAccountForm.jsp -->
  
  <action path="/shop/newAccountForm" type="org.springframework.samples.jpetstore.web.struts.NewAccountFormAction"
  name="workingAccountForm" scope="session" validate="false">
  <forward name="success" path="/WEB-INF/jsp/struts/NewAccountForm.jsp"/>
  </action>
  
  <!--使用者在填寫完註冊資訊以後,註冊,系統呼叫“NewAccountAction”,如果註冊失敗,返回註冊介面,系統將顯示註冊的錯誤資訊,如果註冊成功,系統自動轉向到主頁面。-->
  <action path="/shop/newAccount" type="org.springframework.samples.jpetstore.web.struts.NewAccountAction"
  name="workingAccountForm" scope="session" validate="true" input="/WEB-INF/jsp/struts/NewAccountForm.jsp">
  <forward name="success" path="/shop/index.do"/>
  </action>
  
  3.編輯賬號
  
   <!-- 當使用者點選修改使用者資訊的時候,系統呼叫editAccountForm 為賬號的修改做一些必要的準備,然後定向到賬號修改頁面EditAccountForm.jsp,使用者輸入修改,點選提交,系統呼叫 shop/editAccount檢查修改資料是否合法,如果沒有錯誤,確認修改,轉到主頁面,若有錯誤,轉到賬號修改介面->
  
  <action path="/shop/editAccountForm" type="org.springframework.samples.jpetstore.web.struts.EditAccountFormAction"
  name="workingAccountForm" scope="session" validate="false">
  <forward name="success" path="/WEB-INF/jsp/struts/EditAccountForm.jsp"/>
  </action>
  
  <action path="/shop/editAccount" type="org.springframework.samples.jpetstore.web.struts.EditAccountAction"
  name="workingAccountForm" scope="session" validate="true" input="/WEB-INF/jsp/struts/EditAccountForm.jsp">
  <forward name="success" path="/shop/index.do"/>
  </action>
  
  個人分析:
  
  從jpetsore的賬號管理的原始碼來看,有以下幾個值得我們注意的地方(目前對struts還不是很熟悉):
  
   1.AccountActionForm封裝了賬號Account,不知道是不是這個原因,需要在轉入建立賬號頁面,或者是修改賬號頁面的情況下,在 action的doExecute執行中都建立了AccountActionForm例項,並對其進行了初始化,並把它加入了httpsession中。
  
   2.系統用BaseActionForm繼承了ActionFrom ,使用BaseAction繼承了Action,同時把這兩個子類替代了其父類在系統中的作用,所餘的from和action都是從這兩個派生類派生出來 的。BaseActionFrom提供了方便的欄位校驗,而BaseAction加入了
  
  public void setServlet(ActionServlet actionServlet) {
  super.setServlet(actionServlet);
  if (actionServlet != null) {
  ServletContext servletContext = actionServlet.getServletContext();
  WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
  this.petStore = (PetStoreFacade) wac.getBean("petStore");
  }
  
  很好的和spring銜接在了一起,獲得了系統的業務邏輯物件

 
注:以上內容來自網路,本人不承擔任何連帶責任
文章轉自:http://java.chinaitlab.com/Spring/38426.html

相關文章