第一步:設計數據結構
/*創建用戶表*/
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>