郵件激活賬號

第一步:設計數據結構

/*創建用戶表*/

createtable users(

  id varchar(32)primary key,

  name varchar(30),

  pwd varchar(32),

  email varchar(100)

);

/*賬號激活表*/

createtable active(

  uid varchar(32)primary key,

  code varchar(64)unique,

  constraint active_fkforeign key(uid)references users(id)

);


如果某個用戶還有激活碼,則這個用戶還沒有激活,反之則已經激活了,激活碼只能用一次。

激活後刪除已經用過的激活碼。


第二步:做項目的設計



第三步:準備數據連接


第四步:開發註冊


1.RegDao

publicclassRegDao {

    publicvoid reg(User u) {

        u.setId(UUID.randomUUID().toString().replace("-",""));

        u.setCode(UUID.randomUUID().toString().replace("-","")

                +UUID.randomUUID().toString().replace("-",""));

        Stringsql = "insert into users(id,name,pwd,email)values(?,?,?,?)";//先保存用戶表

        Connectioncon = DataSourceUtils.getCon();

        try {

            con.setAutoCommit(false);

            QueryRunner run = new QueryRunner();

            run.update(con,sql,u.getId(),u.getName(),u.getPwd(),u.getEmail());

            //再保存激活碼

            String sql2= "insert into active(uid,code) values(?,?)";

            run.update(con, sql2,u.getId(),u.getCode());

            con.commit();

        }catch(Exception e) {

            try {

                con.rollback();

            }catch(SQLException e1) {

                e1.printStackTrace();

            }

            thrownew RuntimeException(e);

        }finally{

            try {

                con.setAutoCommit(true);

                con.close();

            }catch(SQLException e) {

                e.printStackTrace();

            }

        }

 

    }

}


2.RegServlet

import czb.domain.User;

import czb.reg.dao.RegDao;

publicclassRegServlet extendsHttpServlet {

    private RegDaodao = new RegDao();

    privatestatic finallong serialVersionUID= 1L;

    publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {

        request.setCharacterEncoding("UTF-8");

        Stringname = request.getParameter("name");

        Stringpwd = request.getParameter("pwd");

        String email = request.getParameter("email");

        User u = new User(null,name,pwd,email,null);

        dao.reg(u);

        //開個線程去發郵件

        new SendMail(u).start();

        //重定向到成功提示頁

       response.sendRedirect(request.getContextPath()+"/jsps/succ.jsp");

    }

}

3.SendMail線程

import czb.domain.User;

publicclassSendMail extendsThread {

    private Useru;

    public SendMail(User u) {

        this.u = u;

    }

    publicvoid run() {

        try {

            Propertiesp = newProperties();

            p.setProperty("mail.host","smtp.163.com");

            p.setProperty("mail.smtp.auth","true");

            Sessions = Session.getDefaultInstance(p,new Authenticator() {

                @Override

                public PasswordAuthenticationgetPasswordAuthentication() {

                   returnnew PasswordAuthentication("郵箱帳號",

                           "郵箱密碼");

                }

            });

            s.setDebug(true);

            Messagemsg = newMimeMessage(s);

            msg.setFrom(new InternetAddress("郵箱帳號@163.com"));

            msg.setRecipient(RecipientType.TO,new InternetAddress("郵箱帳號@qq.com"));

            msg.setSubject("激活帳號");

            Stringstr = "http://127.0.0.1:8080/mail/ActiveServlet?code="+u.getCode();

            Stringhtml="你好:"+u.getName()+",請去<a href='"+str+"'>激活</a>";

            html+="<br/>如果不能激活請複製以下鏈接:"+str;

            msg.setContent(html,"text/html;charset=UTF-8");

            Transport.send(msg);

        }catch(Exception e) {

            e.printStackTrace();

        }

    }

}

第五步:開發激活



1.ActiveDao

publicclassActiveDao {

    publicint active(String code) {

        String sql="delete from active where code=?";

        QueryRunner run = newQueryRunner(DataSourceUtils.getDatasSource());

        int size = run.update(sql,code);

        return size;

    }

}

2.ActiveServlet

import czb.active.dao.ActiveDao;
public classActiveServletextends HttpServlet {
    private static final long serialVersionUID= 1L;
    private ActiveDao dao = new ActiveDao();
    public voiddoGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriterpw = response.getWriter();
        //接受激活碼
        Stringcode = request.getParameter("code");
        int size = dao.active(code);
        if(size==0){
            pw.print("你已激活或激活碼已失效");
        }else{
            pw.print("激活成功,請去登錄<a href='/mail/index.jsp'>Login</a>");
        }
    }
}


第六步:開發登錄


1. LoginDao

publicclassLoginDao {

   publicUser login(User u){

    String sql = "select id,name,pwd,email,code from users u leftjoin active a on" +

                " u.id=a.uid where name=? and pwd=?";

    QueryRunner run = newQueryRunner(DataSourceUtils.getDatasSource());

    u = run.query(sql, newBeanHandler<User>(User.class),u.getName(),u.getPwd());

    return u;

   }

}

2.LoginServlet

public classLoginServlet extends HttpServlet {

    private LoginDaodao = new LoginDao();

    private static final long serialVersionUID= 1L;

    public voiddoPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {

       response.setContentType("text/html;charset=UTF-8");

       PrintWriter pw = response.getWriter();

       request.setCharacterEncoding("UTF-8");

       String name = request.getParameter("name");

       String pwd = request.getParameter("pwd");

       User u = new User(null,name,pwd,null,null);

       u = dao.login(u);

       if(u==null){

           pw.print("你的用戶或密碼不正確");

       }else{

           if(u.getCode()==null||u.getCode()==""){

               pw.print("登錄成功");

           }else{

               pw.print("請你先去激活");

           }

       }

    }

 

}

第七步:註冊、登錄頁面


<body>

    <p>註冊</p>

    <formaction="<c:urlvalue='/RegServlet'/>"method="post">

         用戶名:<inputtype="text"name="name"><br/>

         密碼:<inputtype="password"name="pwd"><br/>

          Email:<inputtype="text"name="email"><br/>

          <inputtype="submit"value="註冊">

    </form>

    <p>登錄</p>

    <formaction="<c:urlvalue='/LoginServlet'/>"method="post">

          用戶名:<inputtype="text"name="name"><br/>

        密碼:<inputtype="password"name="pwd"><br/>

        <inputtype="submit"value="登錄">

    </form>

</body>

第八:效果圖





發佈了59 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章