1. 程式人生 > >Javaweb學習筆記——(十四)—————— 伺服器端驗證註冊登入表單專案

Javaweb學習筆記——(十四)—————— 伺服器端驗證註冊登入表單專案

專案:https://download.csdn.net/download/qq_40223688/10463436

專案

功能:
*註冊
*登入


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


JSP:
*login.jsp --> 登入表單
*regist.jsp --> 登錄檔單
*index.jsp --> 主頁(只有登入成功才能看見)


Servlet:
*LoginServlet
*RegistServlet


Service:
*UserService --> 與使用者相關的業務類


Dao:
*UserDao --> 與使用者相關的資料類


Domain:
*User(對應資料庫,還要對應所有表單)
**username
**password
*verifyCode


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


資料庫設計:
*users.xml
<users>
<user username="xxx" password="xxx"/>
<user username="xxx" password="xxx"/>
</users>


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


步驟:
1.建立空專案
2.導包:
*CommonUtils
*commons-beanutils.jar
*commons-logging.jar
*dom4j
3.建包
*com.changeyd.user.domain
**User
*com.changeyd.user.dao
**UserDao
*com.changeyd.user.service
**UserService
*com.changeyd.user.web.servlet
**LoginServlet
**RegistServlet


4.jsp
*login.jsp
*regist.jsp
*index.jsp

5.在D盤下建立一個user.xml檔案
*新增根元素<users>
*保證檔案格式為utf-8


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


註冊:
regist.jsp
*第一步:完成regist.jsp的基本功能


RegistServlet
*封裝表單資料,封裝到User物件中。
*呼叫service的regist()方法
**如果這個方法沒有出問題,則輸出“註冊成功”
**如果這個方法丟擲了異常,把錯誤資訊儲存到request域,轉發到regist.jsp(顯示錯誤資訊)


UserRervice#regist()
*沒有返回值,但註冊失敗丟擲一個自定義的異常,可以在異常中新增異常資訊(自定義一個異常類)
*校驗使用者名稱是否已被註冊(通過使用者名稱查詢使用者),如果已被註冊,丟擲異常,異常資訊為“使用者名稱已被註冊”
*新增使用者


UserDao:通過業務分析,得到結果:需要提供兩個方法
*按使用者名稱查詢使用者物件:User findByUsername(String username)
*插入一個使用者到資料庫中:void add(User user)


工作:
1.在service層新增一個UserException
2.dao:
*User findByUsername(String username)
*void add(User user)
3.service
*void regist() throws UserException


4.servlet
(1)封裝表單資料到User物件中
(2)使用user呼叫service的regist()方法
(3)如果得到UserException,那麼吧異常資訊儲存到request域中,轉發回regist.jsp,(用於資料的回顯)
(4)輸出“註冊成功”


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


給註冊新增驗證碼
1.VerifyCode類
*BufferedImage getImage() --> 獲取隨機的驗證碼圖片
*String getText() --> 獲取圖片上的文字
*static output(BufferedImage, OutputStream) -->吧圖片寫入到指定的輸出流中。


2.VerifyCodeServlet
*獲取隨機驗證碼圖片
*把驗證碼圖片上的文字儲存到session中
*把圖片響應到response的outputStream中


3.regist.jsp
*新增<img src="指向Servlet" />
*新增一個文字框,用了輸入驗證碼
*“看不清,換一張”,是一個超連結。把上面的<img>的src重新再次指向Servlet!為了處理瀏覽器快取,需要使用時間來做引數!


4.修改RegistServlet
*校驗驗證碼:
*錯誤:儲存表單資料到Requset域、儲存錯誤繫到request域,轉發回regist.jsp
*正確:什麼都不用做,向下執行原來的程式碼。


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


伺服器段表單(輸入)校驗
對此表單校驗,應位於獲取表單資料之後,驗證碼校驗之前:
1.使用Map型別來壯哉錯誤資訊;
*key:表單項名稱,例如:username、password、verifyCode
*value:
**非空:使用者名稱不能為空,或者密碼不能為空
**字元長度:使用者名稱長度必須在6~16位之間,密碼長度必須在6~16位之間


2.在校驗失敗時,向map新增錯誤資訊,哪個欄位出錯,那麼就向哪個欄位新增錯誤資訊,
3.判斷map是否為空(長度是否為0),如果不為空,那麼說明有錯誤存在,儲存map到request域中,儲存from到request域中(用於回顯),轉發回resist.jsp
4.在resist.jsp頁面中,顯示map中的錯誤資訊。${map.username},且將from中的錯誤資訊回顯到表單中的輸入框。


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


登入功能
頁面:login.jsp --> 登入表單


LoginServlet -->
1.獲取表單資料,封裝到User中
2.呼叫service中的login()方法,傳遞form。
3.如果service中的login()方法,沒有丟擲異常,返回一個User物件,
4.如果存在異常:那麼就獲取異常資訊,儲存到request域中,儲存form,轉發到login.jsp
5.如果沒有異常:儲存返回的user物件到session中,重定向到welcome.jsp(顯示當前使用者資訊!)


UserService#login()
public User login(User form){
...
}
1.使用使用者名稱查詢資料庫,得到返回的User
*返回為null,丟擲異常,異常資訊委(使用者名稱不存在)
*返回不為null,獲取查詢出來的user的password與form的password進行比較
**如果不同:丟擲異常(密碼錯誤)
**如果相同,返回查詢結果


UserDao
*通過使用者名稱查詢使用者(與註冊所用方法一致)