03、struts1 用戶登錄簡單示例的升級版 講解

上一篇文章中,那種數據驗證的方法不正規。

一般來說,兩種驗證方式,一是客戶端的驗證,例如JavaScript;另外一種,服務端的驗證,Action中的validation方法。

客戶端的數據安全性就比較低,因爲客戶可以跳過驗證。validation的就相對嚴謹些。

 

同樣,我用UserManager類來管理驗證也行。

 

------------------UserManager.java

 

 

 

 因爲有了一個實體類,User.java  所以,這兒用一個UserManager 來管理它,該類中採用了Singleton(單例模式),提供一個沒有返回值的Login方法,用以相關的業務判斷。

 

 拋出的錯誤,有兩個:

一個是 UserNotFoundException,找不到用戶,

package com.wgy.struts;

public class UserNotFoundException extends RuntimeException {

}

 

一個是 PasswordErrorException 密碼錯誤

package com.wgy.struts;

public class PasswordErrorException extends RuntimeException {

}

 

------------------------------------------------------------------

LoginActionForm.java 在這個ActionForm 中添加了 reset 和 validation 的方法。打印出來,證明程序時可以執行到這兩個方法。

原因在於這兒,struts-config.xml 文件中,

  1. <action path="/login"  
  2.                 type="com.wgy.struts.LoginAction"  
  3.                 name="loginForm"  
  4.                 scope="request"
  5.                 validation="true"
  6.         > 

 validation="true" 這是默認值。 設置爲FALSE之後這兩個方法就不可以執行了。

ActionForm 的生命週期可以設置爲session(默認) 和 request,當設置爲session 時,要記得在reset方法中將所有的屬性重新設置爲初始值。

如:

 

public void reset(){

      username = null;

      password = null;

}

 

而validation 方法中就可以寫上判斷業務邏輯的code。

 

 LoginActionForm.java

 

 

------------------------------------------------------------------------

 

如果在UserManager.java 或者 validation方法中設置了判斷邏輯,那在Action中就可以不用重複寫了。

 

 

因爲考慮到有異常,所以要捕獲。成功通過驗證,就通過 return mapping.findForward("success"); 定義到成功頁面

錯誤 則 return mapping.findForward("error");

 

 

 

login_error.jsp 頁面中要獲得錯誤信息: <%=request.getAttribute("errorInfo") %>

 

login_success.jsp中要獲得username

 

(LoginActionForm)request.getAttribute("loginForm");

這個loginForm 要和
  1.     <action-mappings>  
  2.         <action path="/login"  
  3.                 type="com.wgy.struts.LoginAction"  
  4.                 name="loginForm"  
  5.                 scope="request"  
  6.         > 

中的name 相同。

 

==============================

 

小結一下:

牢記原則,不要再Action中進行業務邏輯處理,業務邏輯應該交給專門的model層去處理

在業務邏輯層拋出異常,在Action 中捕捉並且處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章