JavaWeb筆記——註冊登入系統專案思路
阿新 • • 發佈:2019-01-04
功能:
> 註冊 > 登入 --------------------------------- 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 * jstl.jar * standard.jar
3. 建包 * com.pwc.user.domain > User * com.pwc.user.dao > UserDao * com.pwc.user.service > UserService * com.pwc.user.web.servlet > LoginServlet > RegistServlet
4. jsp * login.jsp * regist.jsp * index.jsp 5. 在F盤下建立一個users.xml檔案! * 新增根元素<users> * 保證檔案為utf-8編碼!!! ---------------------------------
註冊 功能
regist.jsp
> 第一步:完成regist.jsp的基本功能!
RegistServlet
> 封裝表單資料,封裝到User物件中。
> 呼叫service的regist()方法
* 如果這個方法沒有出問題,輸出“註冊成功”
* 如果這個方法丟擲了異常,把錯誤資訊儲存到request域,轉發到regist.jsp(顯示錯誤資訊)
UserService#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(BfferedImage, OutputStream) --> 把圖片寫入到指定的輸出流中。 2. VerifyCodeServlet * 獲取隨機驗證碼圖片 * 把驗證碼圖片上的文字儲存到session中 * 把圖片響應到response的outputStream中 3. regist.jsp * 新增<img src="指向Servlet" /> * 新增一個文字框,用來輸入驗證碼 * “看不清,換一張”,是一個超連結。把上面的<img>的src重新再次指向Servlet!為了處理瀏覽器的 快取,需要使用時間來做引數! 4. 修改RegistServlet * 校驗驗證碼! * 錯誤:儲存表單資料到request域、儲存錯誤資訊到request域,轉發回regist.jsp * 正確:什麼都不做,向下執行原來程式碼! ---------------------------------
伺服器端表單(輸入)校驗 我們把這段校驗,放到獲取表單資料之後,驗證碼校驗之前! 1. 使用Map型別來裝載錯誤資訊! * key:表單項名稱,例如:username、password、verifyCode * value: > 非空:使用者名稱不能為空,或者是“密碼不能為空” > 長度:使用者名稱長度必須在3~20之間 密碼長度必須在3~20之間 2. 在校驗失敗時,向map新增錯誤資訊!那個欄位出錯,就給哪個欄位新增錯誤資訊!
3. 判斷map是否為空(長度是否為0),如果不空,說明有錯誤存在,儲存map到request域,儲存form到request域(回顯),轉發回regist.jsp
4. 在regist.jsp頁面中,顯示map中的錯誤資訊。${map.username} ================================= 登入功能 頁面: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 1. 通過使用者名稱查詢使用者!(方法已經存在了!)
=================================
註冊流程
驗證流程
> 註冊 > 登入 --------------------------------- 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 * jstl.jar * standard.jar
3. 建包 * com.pwc.user.domain > User * com.pwc.user.dao > UserDao * com.pwc.user.service > UserService * com.pwc.user.web.servlet > LoginServlet > RegistServlet
4. jsp * login.jsp * regist.jsp * index.jsp 5. 在F盤下建立一個users.xml檔案! * 新增根元素<users> * 保證檔案為utf-8編碼!!! ---------------------------------
註冊
1). 封裝表單資料到User物件中 2). 使用user呼叫service的regist()方法 3). 如果得到UserException,那麼把異常資訊儲存到request域中,轉發回regist.jsp,(資料的回顯) 4). 輸出“註冊成功” ---------------------------------
給註冊新增驗證碼 1. VerifyCode類 * BufferedImage getImage() --> 獲取隨機的驗證碼圖片 * String getText() --> 獲取圖片上的文字 * static output(BfferedImage, OutputStream) --> 把圖片寫入到指定的輸出流中。 2. VerifyCodeServlet * 獲取隨機驗證碼圖片 * 把驗證碼圖片上的文字儲存到session中 * 把圖片響應到response的outputStream中 3. regist.jsp * 新增<img src="指向Servlet" /> * 新增一個文字框,用來輸入驗證碼 * “看不清,換一張”,是一個超連結。把上面的<img>的src重新再次指向Servlet!為了處理瀏覽器的 快取,需要使用時間來做引數! 4. 修改RegistServlet * 校驗驗證碼! * 錯誤:儲存表單資料到request域、儲存錯誤資訊到request域,轉發回regist.jsp * 正確:什麼都不做,向下執行原來程式碼! ---------------------------------
伺服器端表單(輸入)校驗 我們把這段校驗,放到獲取表單資料之後,驗證碼校驗之前! 1. 使用Map型別來裝載錯誤資訊! * key:表單項名稱,例如:username、password、verifyCode * value: > 非空:使用者名稱不能為空,或者是“密碼不能為空” > 長度:使用者名稱長度必須在3~20之間 密碼長度必須在3~20之間 2. 在校驗失敗時,向map新增錯誤資訊!那個欄位出錯,就給哪個欄位新增錯誤資訊!
3. 判斷map是否為空(長度是否為0),如果不空,說明有錯誤存在,儲存map到request域,儲存form到request域(回顯),轉發回regist.jsp
4. 在regist.jsp頁面中,顯示map中的錯誤資訊。${map.username} ================================= 登入功能 頁面: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 1. 通過使用者名稱查詢使用者!(方法已經存在了!)
=================================
註冊流程
驗證流程