關於商品管理系統實戰示例2

在上期我們完成了用戶註冊功能,現在我們繼續寫用戶登陸功能,我其實也不知道這期可以完成多少,人比較懶,寫一點是一點,可我覺得蒼蠅再小也是坨肉。

1.分析登陸頁面

關於商品管理系統實戰示例2

2.創建LoginServlet

關於商品管理系統實戰示例2

3.在上次創建的UserService添加登陸方法

關於商品管理系統實戰示例2

4.在userDao添加查詢方法,注意不要捕獲異常,直接拋給servlet處理。

關於商品管理系統實戰示例2

5.測試:

關於商品管理系統實戰示例2關於商品管理系統實戰示例2

到這裡登陸功能就已經完成了

下一步實現記住密碼的功能

1.觀察前端頁面

關於商品管理系統實戰示例2

2.在servlet創建cookie 保存賬戶密碼

關於商品管理系統實戰示例2

3.在頁面中導入jstl標籤庫

關於商品管理系統實戰示例2

4.在頁面中通過EL表達式獲取作用域的cookie值

關於商品管理系統實戰示例2

5.測試成功

關於商品管理系統實戰示例2

使用beanUtils解決數據類型轉換的問題,得用到這兩個jar包。

關於商品管理系統實戰示例2

使用beanUtils將獲取的參數封裝成對象

關於商品管理系統實戰示例2

所以之前的用戶註冊傳入的具體參數可以直接修改成傳入對象,比如:

關於商品管理系統實戰示例2

特別需要注意的是當我們使用BeanUtils.populate(user, parameterMap)方法的時候,map的key必須與目標屬性相同。簡而言之就是:

關於商品管理系統實戰示例2

關於商品管理系統實戰示例2

接收到的參數命名與對象名稱一致,否則無法就無法綁定。

當然這種用法只存在原生的寫法,當我們在使用框架的時候,這些操作都是由框架來完成的,但我個人覺得還是有必要了解一下。

關於servlet抽取

在以上的示例種都是寫一個功能創建一個servlet,但在實際開發過程種,都是按模塊開發,比如登陸註冊就是屬於用戶模塊,我們應當整合到一起。

1.在JSP表單種添加input標籤

關於商品管理系統實戰示例2

2.通過獲取method的value值,分別對應不同的方法

關於商品管理系統實戰示例2

注意比較值的這種寫法 "register".equals(method),而不是method.equals("register"),因為不容易造成空指針錯誤。

這種寫法又導致另一種情況的出現,當我們method的值比較多的時候,每次進行 if 邏輯判斷然後執行相應的方法就很麻煩。所以我們需要通過反射機制獲取文件的字節碼文件,這樣就沒必要每次判斷。

1.新建一個BaseServlet基類,重寫services方法


關於商品管理系統實戰示例2

2.讓userServlet繼承BaseServlet,並註釋掉UserServlet種的doget()和dopost()方法,因為,請求訪問userServlet的時候,找不到相應的doget和dopost方法就會去找其基類中的方法,也就是去找BaseServlet中的service方法

關於商品管理系統實戰示例2

3.獲取字節碼文件中的方法並執行

關於商品管理系統實戰示例2

這樣寫簡化很多代碼,看起來也很舒服。但實際上框架已經幫我們完成了這些事情,我們只需要寫相關的servlet就行,但我為什麼要講這些,因為感覺有必要了解一下運行的原理。


分享到:


相關文章: