项目示例-通过邮件激活账号
关键点就在于:
根据用户的给出的email,给这个email发送一个邮件。这个邮件中应该带有一个激活码?(32位UUID,64位UUID)。
提供以下功能:
注册功能 - 只要用户注册成功,就给他发邮件。 RegServlet
接收以下信息:
Name,pwd,email
提供用户激活功能 .
接收以下信息:
只接收激活码。
提供用户登录功能:
用户只有激活账号以后才可以登录。
根据用户的给出的email,给这个email发送一个邮件。这个邮件中应该带有一个激活码?(32位UUID,64位UUID)。
提供以下功能:
注册功能 - 只要用户注册成功,就给他发邮件。 RegServlet
接收以下信息:
Name,pwd,email
提供用户激活功能 .
接收以下信息:
只接收激活码。
提供用户登录功能:
用户只有激活账号以后才可以登录。
第一步:创建数据结构
Users表:
Id name pwd state
444 jack 1234 1
第二个表:
Active
Uid activecode
Id name pwd state
444 jack 1234 1
第二个表:
Active
Uid activecode
create database active character set utf8;
use active;
create table users(
id varchar(32) primary key,
name varchar(30),
pwd varchar(32),
email varchar(50)
);
create table active(
uid varchar(32) primary key,
code varchar(64),
constraint a_fk foreign key(uid) references users(id)
);
创建javaBean:
public class User {
private String id;
private String name;
private String pwd;
private String email;
private String code;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pwd=" + pwd
+ ", email=" + email + ", code=" + code + "]";
}
}
第二步:设计
注册页面
<hr/>
<p>主页</p>
<form name="xx" action="" method="post">
Name:<input type="text" name="name"/><br/>
Pwd:<input type="text" name="pwd"/><br/>
Email:<input type="text" name="email"/><br/>
<input type="button" οnclick="_login();" value="登录"/>
<input type="button" οnclick="_reg();" value="注册"/>
</form>
</body>
<script type="text/javascript">
function _reg(){
document.forms[0].action="<c:url value='/RegServlet'/>";
document.forms[0].submit();
}
function _login(){
document.forms[0].action="<c:url value='/LoginServlet'/>";
document.forms[0].submit();
}
</script>
第三步:注册的Servlet-RegServlet
public class RegServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
String mail = request.getParameter("email");
//声明对象
User u = new User();
u.setName(name);
u.setPwd(pwd);
u.setEmail(mail);
//调用后台的serice保存
Connection con = null;
try{
con = DataSourceUtils.getDatasSource().getConnection();
u.setId(UUID.randomUUID().toString().replace("-", ""));
u.setCode(UUID.randomUUID().toString().replace("-", "")
+UUID.randomUUID().toString().replace("-", ""));
con.setAutoCommit(false);
//先保存user表
String sql = "insert into users values(?,?,?,?)";
QueryRunner run = new QueryRunner();
run.update(con, sql,u.getId(),u.getName(),u.getPwd(),u.getEmail());
//
sql = "insert into active values(?,?)";
run.update(con,sql,u.getId(),u.getCode());
con.commit();
}catch(Exception e){
try {
con.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
throw new RuntimeException(e);
}finally{
try {
con.close();
DataSourceUtils.remove();
} catch (SQLException e) {
e.printStackTrace();
}
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.print("你已经注册成功,请去激活,如果没有收到邮件,请等一会再收.");
new SendThread(u).start();
}
}
//声明一个线程专门发邮件
class SendThread extends Thread{
private User user;
public SendThread(User u) {
this.user=u;
}
@Override
public void run() {
try{
Properties p = new Properties();
p.setProperty("mail.host","127.0.0.1");
p.setProperty("mail.smtp.auth", "true");
Session s = Session.getDefaultInstance(p,new Authenticator() {
public javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("one", "1234");
};
});
s.setDebug(true);
MimeMessage mm = new MimeMessage(s);
mm.setFrom(new InternetAddress("one@wj.com"));
mm.setRecipient(RecipientType.TO,new InternetAddress(user.getEmail()));
mm.setSubject("请去激活");
//声明url
// String url = "http://192.168.1.100:6666/day21_active/ActiveServlet?id="+user.getCode();
String url = "http://10.212.169.93:8080/day21_active/ActiveServlet?id="+user.getCode();
String html ="你好:"+user.getName()+"<br/>请激活:<a href='"+url+"'>激活</a>,你可以Copy这个连接:"+url;
mm.setContent(html,"text/html;charset=UTf-8");
Transport.send(mm);
}catch(Exception e){
e.printStackTrace();
}
}
}
第四步:激活的ActiveSerlvet
public class ActiveServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String code = request.getParameter("id");
try{
String sql = "delete from active where code=?";
QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());
int effect = run.update(sql,code);
if(effect==0){
response.getWriter().print("Active Failed...");
}else{
response.getWriter().print("Active Successfully");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
第五步登录的serlvet – LoingSerlvet
public class LoginSerlvet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String pwd = request.getParameter("pwd");
//如果
try{
String sql = "SELECT id,name,pwd,email,code"+
" FROM users LEFT JOIN active ON users.id=active.uid"+
" WHERE name=? and pwd=?";
QueryRunner run = new QueryRunner(DataSourceUtils.getDatasSource());
User u = run.query(sql,new BeanHandler<User>(User.class),name,pwd);
if(u==null){
out.print("你的用户名或是密码错误..");
}else{
if(u.getCode()==null){
out.print("你登录成功、。。。");
}else{
out.print("你还没有激活...");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}