功能:
> 註冊
> 登陸
---------------------------------
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. 經過用戶名查詢用戶!(方法已經存在了!)
=================================
註冊流程
驗證流程