邮件激活账号

第一步:设计数据结构

/*创建用户表*/

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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章