在上期我們完成了用戶註冊功能,現在我們繼續寫用戶登陸功能,我其實也不知道這期可以完成多少,人比較懶,寫一點是一點,可我覺得蒼蠅再小也是坨肉。
1.分析登陸頁面
2.創建LoginServlet
3.在上次創建的UserService添加登陸方法
4.在userDao添加查詢方法,注意不要捕獲異常,直接拋給servlet處理。
5.測試:
到這裡登陸功能就已經完成了
下一步實現記住密碼的功能
1.觀察前端頁面
2.在servlet創建cookie 保存賬戶密碼
3.在頁面中導入jstl標籤庫
4.在頁面中通過EL表達式獲取作用域的cookie值
5.測試成功
使用beanUtils解決數據類型轉換的問題,得用到這兩個jar包。
使用beanUtils將獲取的參數封裝成對象
所以之前的用戶註冊傳入的具體參數可以直接修改成傳入對象,比如:
特別需要注意的是當我們使用BeanUtils.populate(user, parameterMap)方法的時候,map的key必須與目標屬性相同。簡而言之就是:
接收到的參數命名與對象名稱一致,否則無法就無法綁定。
當然這種用法只存在原生的寫法,當我們在使用框架的時候,這些操作都是由框架來完成的,但我個人覺得還是有必要了解一下。
關於servlet抽取
在以上的示例種都是寫一個功能創建一個servlet,但在實際開發過程種,都是按模塊開發,比如登陸註冊就是屬於用戶模塊,我們應當整合到一起。
1.在JSP表單種添加input標籤
2.通過獲取method的value值,分別對應不同的方法
注意比較值的這種寫法 "register".equals(method),而不是method.equals("register"),因為不容易造成空指針錯誤。
這種寫法又導致另一種情況的出現,當我們method的值比較多的時候,每次進行 if 邏輯判斷然後執行相應的方法就很麻煩。所以我們需要通過反射機制獲取文件的字節碼文件,這樣就沒必要每次判斷。
1.新建一個BaseServlet基類,重寫services方法
2.讓userServlet繼承BaseServlet,並註釋掉UserServlet種的doget()和dopost()方法,因為,請求訪問userServlet的時候,找不到相應的doget和dopost方法就會去找其基類中的方法,也就是去找BaseServlet中的service方法
3.獲取字節碼文件中的方法並執行
這樣寫簡化很多代碼,看起來也很舒服。但實際上框架已經幫我們完成了這些事情,我們只需要寫相關的servlet就行,但我為什麼要講這些,因為感覺有必要了解一下運行的原理。
閱讀更多 十二說IT 的文章