- 論壇徽章:
- 0
|
利用ajax檢測用戶注冊時容易忽略的small bug
當(dāng)我們想實現(xiàn)一個程序——利用郵箱激活賬號的注冊.
那么首先我們要做哪些準備呢:
Ø 首先我們要寫js判斷用戶名是否為空或者是不是只有空格,當(dāng)失去焦點是我們利用ajax去異步查詢
看看是否此用戶名已經(jīng)備注測,當(dāng)然于此同時其它項都不能為空當(dāng)然重要的就是郵箱必須正確,因為我們是用郵箱激活的嘛
Ø 那么怎樣去實現(xiàn)郵箱激活呢,首先當(dāng)用戶名不重復(fù)的時候我們要把用戶的注冊信息插入數(shù)據(jù)庫并且定義默認標識,然后當(dāng)數(shù)據(jù)插入成功是我們給用戶發(fā)送一封簡易郵件,在發(fā)送這封郵件之前我們要根據(jù)用戶名去查詢這條記錄的id然后把id通過連接傳遞,也可以在插入數(shù)據(jù)的時候插入隨機數(shù)(確保這是唯一標識)然后傳遞唯一標識,當(dāng)用戶收到郵件是點擊連接,然后把插入數(shù)據(jù)的狀態(tài)改變未激活,這樣就可以實現(xiàn)了
Ø 其次就是我要把相應(yīng)的js和相關(guān)的jar包導(dǎo)入
那么在寫這個檢測程序是我們會容易忽略什么bug呢,那就是當(dāng)我們通過ajax檢測到用戶名已存在并且其他項都符合js的判斷,當(dāng)我們點擊提交時,我們要當(dāng)然要阻止其提交了,否則數(shù)據(jù)就重復(fù)了,一般人們都容易忽略這一點,當(dāng)我們看到輸入框提示此用戶已存在,鍵入我們不修改直接提交呢?
那么我們應(yīng)該怎么實現(xiàn),當(dāng)失去焦點時判斷用戶名是否重復(fù),并且點擊提交時,判斷其他是否符合條件,并且判斷用戶是否符合要求呢
下面就簡單的來實現(xiàn)一下:
首先先來做一個頁面并設(shè)置其隱藏域當(dāng)提交請求時進行判斷用戶名是否重復(fù)
<!--EndFragment-->
Java代碼Java代碼- 1.然后就是servelt
- 2.ublic void doPost(HttpServletRequest request, HttpServletResponse response)
- 3. throws ServletException, IOException {
- 4.
- 5. request.setCharacterEncoding("UTF-8");
- 6.
- 7. // 處理注冊信息
- 8. String esper = request.getParameter("esper") == null ? "" : request
- 9. .getParameter("esper");
- 10.
- 11. if (esper != null && esper.equals("zhuce")) {
- 12. // System.out.println("進來了");
- 13. String name = request.getParameter("name");
- 14. String pass = request.getParameter("pass");
- 15. String email = request.getParameter("email");
- 16. AdminServiceImpl adminServiceImpl = new AdminServiceImpl();
- 17. Admin entity = new Admin(name, pass);
- 18.
- 19. boolean flag = adminServiceImpl.insert(entity);
- 20. if (flag) {
- 21.
- 22. System.out.println("成功");
- 23. // 根據(jù)用戶名獲取id
- 24. entity=adminServiceImpl.items(name);
- 25. int id=entity.getId();
- 26. //發(fā)送郵件
- 27. String subject = "注冊激活";
- 28. String body = "點擊下面網(wǎng)址激活賬號"
- 29. + "http://192.168.51.24:8080/Goods/admin_zhuce?esper=jh&id="+id;
- 30.
- 31. NewSendMail sm = new NewSendMail();
- 32. sm.sMail("Longmanfei", email, name, subject, body);
- 33. request.getRequestDispatcher("admin/admin_login.jsp").forward(
- 34. request, response);
- 35. } else {
- 36. System.out.println("失敗");
- 37. }
- 38.
- 39. }if(esper != null && esper.equals("jh")){
- 40. String id=request.getParameter("id");
- 41. AdminServiceImpl adminServiceImpl = new AdminServiceImpl();
- 42. boolean flag=adminServiceImpl.update_qx(Integer.valueOf(id));
- 43. if(flag){
- 44. request.getRequestDispatcher("admin/admin_login.jsp").forward(
- 45. request, response);
- 46. }else{
- 47. System.out.println("激活失敗");
- 48. }
- 49.
- 50. }
- 51.
- 52.}
復(fù)制代碼 Java代碼- 1.郵件發(fā)送 里面的屬性根據(jù)自己定義
- 2.package cn.csdn.util;
- 3.
- 4.
- 5.import org.apache.commons.mail.*;
- 6.public class NewSendMail {
- 7. public String id;
- 8. public String to;/* 收信人地址 */
- 9. public String toName;//收信人姓名
- 10. public String subject;/* 主題 */
- 11. public String body;
- 12. public boolean sMail(String faname,String to,String toName,String subject,String body){
- 13. boolean flag=false;
- 14. HtmlEmail email=new HtmlEmail();
- 15. //System.out.println(faname+to+toName+subject+body);
- 16. try {
- 17.
- 18. //System.out.println("發(fā)送成功");
- 19. email.setHostName("smtp.163.com");//設(shè)置發(fā)信的smtp服務(wù)器
- 20. email.addTo(to, toName);//設(shè)置收件人帳號和收件人
- 21. email.setFrom("Longmanfei@163.com",faname);//設(shè)置發(fā)信的郵件帳號和發(fā)信人
- 22. email.setSubject(subject);//設(shè)置郵件主題
- 23. email.setAuthentication("Longmanfei@163.com",密碼);//如果smtp服務(wù)器需要認證的話,在這里設(shè)置帳號、密碼
- 24. email.setCharset("utf-8");
- 25. email.setHtmlMsg(body);//設(shè)置郵件正文和字符編碼
- 26.
- 27. email.send();
- 28.
- 29. flag=true;
- 30. } catch (EmailException e) {
- 31. //flag=false;
- 32. System.out.println("發(fā)送失敗");
- 33. e.printStackTrace();
- 34. } return flag;
- 35. }/
- 36. public String getId() {
- 37. return id;
- 38. }
- 39. public void setId(String id) {
- 40. this.id = id;
- 41. }
- 42.}
復(fù)制代碼 也許還有更好的方法去進行判斷,期待探討 |
|