如题,我们做网站的时候,往往需要用户注册,很多用户选择用邮箱注册,为了获取用户的真实邮箱和防止恶意注册,可能需要做一个邮箱验证,此篇教程就是讲解如何用Java实现邮箱验证功能。
主要业务逻辑实现过程:
项目结构(JavaWeb项目):
UserDao:数据库操作,包括用户注册、激活状态更改。
JDBCUtils:链接数据库工具类。
User:表的POJO。
ActivationServlet:用于接收激活信息。
RegisterServlet:插入用户信息到数据库中,并发送激活邮件。
项目运行效果截图:
1 . 用户登陆页面:
2 . 用户点击注册按钮后,系统将用户信息保存到数据库中:
此时用户状态是未激活:
3 . 系统向用户发送激活邮件:
4 . 用户点击激活链接,系统将用户状态改为已激活:
代码没有什么难度,看懂了实现原理就只差复制粘贴了,哈哈哈哈,这里只贴出主要部分代码,全部代码见文末链接。
UserDao:数据库操作,包括用户注册、激活状态更改。
package com.hao.validate.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.hao.validate.db.JDBCUtils;
import com.hao.validate.pojo.User;
public class UserDao {
/**
* 注册
* @param user
* @return
*/
public int insert(User user) {
Connection conn = null;
PreparedStatement ps = null;
int result = 0;
try {
conn = JDBCUtils.getConnection();
String sql = "insert into user(username,password,email,state,code) values(?,?,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, user.getUsername());
ps.setString(2, user.getPassword());
ps.setString(3, user.getEmail());
ps.setInt(4, user.getState());
ps.setString(5, user.getCode());
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
/**
* 注册表改为激活状态
* @param code
* @return
*/
public int activation(String code) {
Connection conn = null;
PreparedStatement ps = null;
int result = 0;
try {
conn = JDBCUtils.getConnection();
String sql = "update user set state=1 where code=?";
ps = conn.prepareStatement(sql);
ps.setString(1, code);
result = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
}
}
User表的sql:
create table `user`(
id int(11) primary key auto_increment comment '用户id',
username varchar(255) not null comment '用户名',
email varchar(255) not null comment '用户邮箱',
password varchar(255) not null comment '用户密码',
state int(1) not null default 0 comment '用户激活状态:0表示未激活,1表示激活',
code varchar(255) not null comment '激活码'
)engine=InnoDB default charset=utf8;
ActivationServlet:用于接收激活信息。
package com.hao.validate.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hao.validate.dao.UserDao;
/**
* Servlet 用于接收激活信息
*/
@WebServlet("/ActivationServlet")
public class ActivationServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ActivationServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置请求和响应编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String code = request.getParameter("code");
UserDao userDao = new UserDao();
if (userDao.activation(code) > 0) {
response.getWriter().append("恭喜您,激活成功!");
} else {
response.getWriter().append("激活失败,请检查邮箱!");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
RegisterServlet:插入用户信息到数据库中,并发送激活邮件。
package com.hao.validate.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.hao.jmail.SendEmail;
import com.hao.random.StringRandom;
import com.hao.validate.dao.UserDao;
import com.hao.validate.pojo.User;
/**
* Servlet 注册 插入用户信息到数据库中,并发送激活邮件
*/
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public RegisterServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置请求和响应编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
User user = new User();
user.setUsername(request.getParameter("name"));
user.setPassword(request.getParameter("pass"));
user.setEmail(request.getParameter("email"));
user.setCode(StringRandom.getStringRandom(8));// 随机激活码
user.setState(0);// 初始状态是0 ,0表示未激活
System.out.println(user);
// User信息插入到数据库中
UserDao userDao = new UserDao();
if (userDao.insert(user) > 0) {
response.getWriter().append("注册成功,请登录邮箱激活账号!");
// 发送邮件
String mailText = "<html><head></head><body><h1>这是一封激活邮件,激活请点击以下链接</h1><h3><a href='http://localhost:8080/tool/ActivationServlet?code="
+ user.getCode() + "'>http://localhost:8080/tool/ActivationServlet?code=" + user.getCode()
+ "</href></h3></body></html>";
SendEmail.Send("发送邮件的邮箱账户", "发送邮件的邮箱密码", user.getEmail(), "备注", "发件人昵称", "主题", mailText);
} else {
response.getWriter().append("注册失败,请检查相关信息!");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
本篇教程源码地址:
https://github.com/jiahaoit/tool.git