(1) 所有web請求的參數的解析和驗證,可以使用統一的ValidateService去做,每個方法和controller的每個方法一一對應,正確時返回解析後的輸入參數,錯誤時拋出異常,帶上錯誤原因的信息,如:
public User login(User user) {
//驗證用戶名和密碼的合法性
if (user == null || StringUtils.isBlank(user.getUsername())
|| !validateUsername(user.getUsername()) || StringUtils.isBlank(user.getPassword())
|| !validatePassword(user.getPassword())) {//用戶名或密碼不合法!
String errorMessage = messageSource.getMessage(
"username.or.password.not.allow.key", null, LocaleContextHolder
.getLocale());
throw new ValidateException(errorMessage);
}
return user;
}
也可以使用《validation language 》 去驗證。
(2) 每個controller方法,都需要有2種結果:error,success
(3) xml文件的校驗,使用xsd
(4) 操作數據庫,注意對符合這2個條件的添加事務
1. save和update,delete;
2.同時操作2個表以上,或者對一個表處理2個記錄以上(批處理);
(5) sql語句, Where語句參數爲空時不能誤操作。
對update,delete不能寫(對於query則可以這樣使用動態where):
<dynamic prepend="WHERE"> <isGreaterThan compareValue="0" prepend="and" property="id"> ID = #id# </isGreaterThan> </dynamic>
而應該:
WHERE ID = #id#
(6) 檢查程序中哪些地方是需要同步的(web本身就是多線程,所以controller,filter,servlet,service本身設計上已經考慮到),例如一個有狀態的對象被多線程訪問,考慮使用syncronized或併發包的集合對象;
(7) 創建一個完整的web.xml,創建404頁面和500頁面;
(8) 單元測試:
傳統是JUnit,可以執行run的單元測試;
對於web,常常需要容器才能run單元測試,因此有了testNG和play的JUint。
testNG可以結合Spring自動載入bean然後再run,還可以結合mvn使用mvn test跑測試,數據庫測試的mork可以使用DbFit,DbFit使用wiki文件mork數據。
play的JUnit更加強大,與框架集合在一起,使用play test命令,可以在web頁面跑單元測試,數據庫的mork使用YAML。