關於網銀項目完工總結

   8.6日,李翰文老師發佈網銀項目需求,發佈需求後,看了一下需求文檔,好像有難度,老師說,這個8.20號之前交,看着這個項目就首先想到的是數據庫,數據庫的邏輯設置,跟概要設計加詳細設計差不多都由老師做了,抱着對PowerDesigner的崇拜之情,用PD創建並生成了SQL語句,在PD的幫助下我並沒有很快的就把數據庫的物理設計給完成,因爲對它的操作的不熟練,導制的問題從從,最後,在8.8在借用PD生成的SQL和老師的設計把數據庫改成了合乎標準的數據庫。

   拿到需求文檔把數據庫建好之後,我並沒有立刻動手按需求寫代碼,首先根據文檔分析,我需要撐握MVC概念,作用,如何使用,三層模式之間的值的傳遞,從哪裏開始到哪裏結束,前臺表單如何轉換爲後臺的JavaBean,數據之間各種關係的處理,及數據庫查詢的知識,前臺表單提交的數據的驗證, EL表達示的運用,jstl標籤的使用作爲驗證,接口的設計,servlet中的絕對路徑和相對路徑的設置。
    一、   在學習三層模式設計的時候,遇到了錯誤,
        (1)在JSP頁面請求發送的時候多加了個“/”,然後所有的請求頁面全部跳轉到根路徑下面,然後傻傻的把這個問題發給老師,最終因爲問得太沒水平。
        (2)在處理commons-beanUtils.jar包的時候,由於1.8.0版本跟1.6的版本的差別,因爲這二個錯誤導制我一晚上失眠,第二天上課的時候,再看了二遍,最終發現是一個“/”的問題,第二個問題,苦問度娘,終於在論壇裏面找到了犯了同樣錯誤的哥們,然後換成了1.8.0版本的。
 
  二、 在學習FormBean的時候,困繞我二天的錯誤,是一個FormBean裏面的一個屬性生成的Getter和Setter方法的時候,因爲中途改了一下屬性的名字,在名字後面加了個S,而沒有再重新生成Getter和Setter方法,請了好幾個同學幫忙看了一下,最終還是沒有找出來,然後,想到了李翰文老師說過,碰到Exception不要急躁,要用正確的心態去面對,一步一步來,一步一步排查,在紅色字體顯示的錯誤中老提示我屬性找不到,而我回到FormBean尋找的時候發現屬性名稱是對的,爲什麼EL表達示就是不識別我的的屬性類,最後在教室找呀找,硬是找不出來,剛好這天老師也沒有來上課,鬱悶,最後一惱火,把那個FormBean刪掉,重新建了一個FormBean,人品爆發,通過了,哈哈,最後回去看了一下EL表達示的原理,原來它不是去查看屬性,而是去調用屬性的Getter方法,而我卻沒有再一次生成Getter方法,所以throw 了一個Exception 困繞了我二天的錯啊。
    要點:
         在將前臺獲得的數據轉換爲FormBean的方法,通過BeanUtils.setProperty(bean, name, value);/方法去設置FormBean的值
    public static <T> T request2Bean(HttpServletRequest request,
Class<T> beanClass) {
// 傳遞一個registerForm(FormBean名稱,裏面的屬性名稱必須和前臺獲取的參數的名稱一致)
T bean = null;
try {
// 1.創建要封閉數據的Bean
bean = beanClass.newInstance();
// 2.把request中的數據整到bean中
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();// 比如裏面username password....s
String value = request.getParameter(name);//獲得參數對應的值 aaa 123 aaaa
BeanUtils.setProperty(bean, name, value);//將值設置到FormBean裏面的對應的屬性值
}
 
} catch (Exception e) {
throw new RuntimeException(e);
}
return bean;
}
        在FormBean和JavaBean之間轉換數據要使用到commons-beanUtils.jar裏面的一個方法,叫BeanUtils.copyProperties(desc, src);把源Bean裏面的屬性值複製到目的Bean裏面值,裏面的屬性名稱必須一致。
    public static void copyBean(Object src, Object desc) {
//註冊日期轉化器  日期轉換器使用的commons-beanUtils.jar必須是1.8.0的包,否則會直接報錯。
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
Date date= null;
if (value == null) {
date = null;
}
String str = (String) value;
if (str.trim().equals("")) {
date = null;
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
date = df.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
return date;
}
}, Date.class);
try {
BeanUtils.copyProperties(desc, src);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
 
}
    
 
 三、在數據庫設計的時候報的錯
       日期處理函數問題,由於獲取的都是字符串,所以在插入的時候偷了個懶,沒有在業務員就把String轉化爲Date類型,只在SQL執行的時候用Oracle裏面的to_date();方法去轉化了一下。
 
四、日期選擇控件的下載,與調試,在網上下了一個日期控件的JS文件,然後引用進來,在經過辛苦調試,百般測試,終於讓我加載進去了。
 
五、JSTL的標籤和EL的使用,其中使用到了IF,FOREACH,CHOSSE標籤來方便的處理數據的展示,我神奇的EL表達示,這個時候給我展現了最神奇的一面,讓我的代碼優雅起來了,不再像以前那樣寫好多的JAVA代碼和HTML代碼來混合使用,用很小的一段代碼就把我需要的都表達出來了。
 
六、FITLTE(過濾器的使用)由老師提供的模板處理了中文編碼的問題。通過Web.xml設置加載進去就OK。
 
七、各個頁面這間的傳遞值的問題,及serVlet中處理接收請求,及業務層的邏輯處理。
 
                在搞完這個時候,差不多是8.10號的樣子,8.11號放假休息了一天,
 
        8.12號正式開始寫代碼,在學完前面的知識的時候,基本上的我的第一個註冊頁面要出來了。Dao層的設計,分析前臺頁面需要使用到的數據,或者是前面頁面數據需要存放進數據庫的數據,設計好處理的方法,獲得返回的值,其中的值通過Bussiness層來經過處理再傳到Dao層,執行方法插入數據庫,View層用來表示數據和收取數據, MVC模式其實就是一個INPUT->Processing->OutPut的一個過程,在input可以是通過JSP頁面來獲取數據,然後經過Bussiness層將數據加工,然後傳到Dao層來進行數據庫的操作。由Dao層的數據返回數據,再由Bussiness來進行處理成前臺能接收的數據,發送到的頁面顯示。
      理解完這些再加上一個Requst,session,結合它們來保存信息,這樣數據的傳遞就不會有太多的問題,用session來保存當前登錄的用戶的,然後這一切的操作都通過保存用戶的信息去對數據進行訪問,這是唯一聯繫數據庫比較多的一根線索。
     做出第一個註冊頁面的時候,運用JDBC模板處理註冊的時候的數據的時候,在這個地方,我考慮着是要做事務處理的,本來,在處理註冊請求的時候,如果某一個表的數據插入失敗,而其他與之相關的表卻插入成功,這樣是有違常規的,嘗試着解決了一下,但是由於JDBC模板的限制在那裏,一改的話,要改動一大版,所以並沒有對它進行操作,只是在業務處理的時候做到儘量的精確,不讓它出錯,
    這個一個註冊頁面就出來了,然後後面的基本上就都比這個註冊頁面要容易了。
 
在處理一天之內的限制銀行卡使用金額的時候,使用的是通過三張表來關聯查詢這張卡的所有記錄,再在這張卡的所有中通過當前的時間進行刷選,再把其中爲負數的值相加起來,如果它的值+要進去處理的錢加上手續費的錢的話,就不能使它交易進行下去。
 
其中 要注意在跨頁面傳遞數據的時候一定要使用到Session來保存對象。在只需要傳遞一次的情況下使用request對象保存,在業務層的各個交易的模塊的時候,要注意驗證的信息,所取的額度不能加上手續費不能大於當前存款。ATM,網上交易,轉帳,這三個業務,其中相通性很多,只要把轉帳的攻破了就沒有什麼難度了。
      在寫代碼的時候,一個功能一個有功能的去解決,一個步驟一個步驟的實現,例如我要寫一個ATM交易,我就把DAO層寫完以後,我就想着把VIEW佈局一下,需要一個什麼樣的FormBean來處理接收前臺頁面的數據,面Bean寫好後,再把頁面寫好,就測試一下能不能成功,成功了再進行下一步,在業務層把數據轉化,轉化完畢以後再測試一下是不是獲得數據。
 
    8.15號基本上完成了所有的功能,8.16把項目中的小細節跟老師討論了一下,最後把一些小的問題給修正,正式結束該項目。由於當前技術的不成熟,其中的數據庫的事務處理沒有處理。如果在以後的學習過程中改進,
                                                                                                
                            項目僅供參考  項目的下載址:http://d.119g.com/f/0823FA5AB91BC291.html
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章