说起Web项目,学过Java的一定都做过很多,今天就介绍一个常用的功能——邮箱注册。
这个功能主要针对面向大众的一些在线系统,比如我们平时注册一些网站,都需要首先提供邮箱,然后系统自动发送邮件到注册邮箱,激活验证通过后才能使用。
项目介绍
我们首先搭建项目,框架和数据库随意,演示系统使用的是Servlet,数据库使用Mysql。
项目结构图如下:
Mysql数据库
演示操作
具体实现
为了简化操作,项目只有注册功能。在register页面右键run as,启动后填写注册信息,注册成功后跳转到login,失败跳转到msg。具体细节操作在Servlet,下面我们详细介绍。
Jsp页面创建一个Form,填写注册信息:
<div class="col-md-12" style="width:100%;background:url('${pageContext.request.contextPath}/images/regist_bg.jpg');">
<div class="col-md-2"></div>
<div class="col-md-8" style="background:#fff;padding:40px 80px;margin:30px 30px 20px 45px ;border:7px solid #ccc;width:70%">
<font>会员注册</font>USER REGISTER
<form class="form-horizontal" name="f_reg" style="margin-top:5px;" method="post" action="${pageContext.request.contextPath}/register" onsubmit="return checkFrom()">
<div class="form-group">
<label for="username" class="col-sm-2 control-label">用户名</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="username" placeholder="请输入用户名 字母开头后跟数字或下划线" name="username">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">密码</label>
<div class="col-sm-6">
<input type="password" class="form-control" id="inputPassword3" placeholder="请输入密码,至少6位" name="password">
</div>
</div>
<div class="form-group">
<label for="confirmpwd" class="col-sm-2 control-label">确认密码</label>
<div class="col-sm-6">
<input type="password" class="form-control" id="confirmpwd" placeholder="请输入确认密码" name="password2">
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-6">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email 如 [email protected]" name="email">
</div>
</div>
<div class="form-group">
<label for="usercaption" class="col-sm-2 control-label">姓名</label>
<div class="col-sm-6">
<input type="text" class="form-control" id="usercaption" placeholder="请输入姓名" name="realname">
</div>
</div>
<div class="form-group opt">
<label for="inlineRadio1" class="col-sm-2 control-label">性别</label>
<div class="col-sm-6">
<label class="radio-inline">
<input type="radio" name="sex" id="inlineRadio1" value="男" checked> 男
</label>
<label class="radio-inline">
<input type="radio" name="sex" id="inlineRadio2" value="女"> 女
</label>
</div>
</div>
<div class="form-group">
<label for="date" class="col-sm-2 control-label">出生日期</label>
<div class="col-sm-6">
<input type="date" class="form-control" placeholder="请输入日期" onclick="laydate()" name="birthday">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" width="100" value="注册" name="submit" border="0"
style="background: url('${pageContext.request.contextPath}/images/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0);
height:35px;width:100px;color:white;">
</div>
</div>
</form>
</div>
Servlet中,我们需要使用163邮箱作为发送端,在里面配置上个人邮箱及密码即可,代码:
@SuppressWarnings("serial")
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String email = request.getParameter("email");
Map<String, String[]> map = request.getParameterMap();
//2、封装成User对象
User u = new User();
MyBeanUtils.populate(u, map);
//3、调用Service层完成功能
UserService us = new UserServiceImpl();
boolean b = us.insertUser(u);
try {
String from = "你的邮箱"; // 获取发件人
String to = email; // 获取收件人
String subject = "恭喜你,注册成功"; // 获取邮件主题
String messageText = "欢迎你注册本网站,你现在已经注册成功,请返回到登录界面登录,更多优惠,更多精彩!"; // 获取邮件内容
String ddd = "邮箱密码"; // 获取发件人邮箱密码
String mailserver = "smtp.163.com"; // 指定SMTP服务器的主机名
// 建立邮件会话
Properties props = new Properties();
props.put("http.proxySet","true");//设置代理主机参数
props.put("http.proxyHost","172.17.18.80");
props.put("http.proxyPort","8080");
props.put("mail.smtp.host", mailserver); // 指定SMTP协议
props.put("mail.smtp.auth", "true"); // 指定需要向服务器端提交身份认证
Session sess = Session.getInstance(props); // 获取session
sess.setDebug(true); // 设置调试标志
MimeMessage message = new MimeMessage(sess); // 新建一个消息对象
// 设置发件人
InternetAddress from_mail = new InternetAddress(from);
message.setFrom(from_mail);
// 设置收件人
InternetAddress to_mail = new InternetAddress(to);
message.setRecipient(Message.RecipientType.TO, to_mail);
// 设置主题
message.setSubject(subject);
// 设置内容
message.setText(messageText);
// 设置发送时间
message.setSentDate(new Date());
// 发送邮件
message.saveChanges(); // 保证报头域同会话内容保持一致
Transport transport = sess.getTransport("smtp");
transport.connect(mailserver, from, ddd); // 建立与邮件服务器之间的连接
transport.sendMessage(message, message.getAllRecipients()); // 发送邮件
transport.close(); // 关闭与邮件服务器之间的连接
//4、响应注册的结果
if(b){
request.setAttribute("msg","请到邮箱验证是否注册成功!");
us.updatestatus(u);
request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
}else{
request.setAttribute("msg","对不起,注册失败,请联系管理员!");
request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
}
} catch (Exception e) {
request.setAttribute("msg","对不起,注册失败,请检查 邮箱是否正确!");
request.getRequestDispatcher("/jsp/msg.jsp").forward(request, response);
}
}
如果注册成功,则写入数据库中:
public class UserDaoImpl implements UserDao {
//DBUtils的核心类,用于执行sql语句的核心对象
private QueryRunner runner = new QueryRunner();
//1、注册用户的方法
public int insertUser(User u) {
//1、编写sql
String sql = "insert into user values(null,?,?,?,?,?,?,?,null)";
//2、准备参数与结果集,参数为数组,结果集为int类型的结果
Object[] parm = {u.getUsername(),u.getPassword(),u.getRealname(),u.getEmail(),u.getSex(),u.getBirthday(),0};
int i=0;
try {
//3、获取连接对象,使用QueryRunner对象执行sql语句
i=runner.update(JDBCUtils.getConnection(), sql, parm);
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
public int updatestatus(User u) {
//1、编写sql
QueryRunner qr= new QueryRunner();
String sql = "update user set status = ? where username = ?";
try {
qr.update(JDBCUtils.getConnection(), sql, 1,u.getUsername());
} catch (SQLException e) {
e.printStackTrace();
}
return 1;
}
}
以上就是具体实现过程,如果你有任何问题,欢迎私信,我们共同交流讨论。