小项目制作:javaWeb之邮箱验证注册(javaMail+jdbc+log4j)

功能设计:
这里写图片描述
架构设计:
这里写图片描述
注册时通过发送邮件方式,传递访问项目激活的servlet进行改写数据库中active的值,通过传递激活码acode来辨别数据库中是否有该账户信息
注册功能实现:
servlet:

package cn.hncu.reg.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.hncu.domain.User;
import cn.hncu.reg.service.RegService;
import cn.hncu.reg.service.RegServiceimpl;
import cn.hncu.utils.SendMailThread;

public class RegServlet extends HttpServlet {
    RegService service = new RegServiceimpl();

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");

        String name = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        String email = request.getParameter("email");

        User user = new User();
        user.setName(name);
        user.setPwd(pwd);
        user.setEmail(email);

        try {
            user = service.reg(user);

            if (user != null) {
                // 发激活邮件
                new SendMailThread(user).start();
                out.println("您已经成功注册,请到邮箱中激活");
            } else {
                out.println("注册失败");
            }
        } catch (SQLException e) {
            out.println("注册失败");
        }

        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

dao:

package cn.hncu.reg.dao;

import java.sql.SQLException;
import java.util.UUID;

import org.apache.commons.dbutils.QueryRunner;

import cn.hncu.domain.User;
import cn.hncu.utils.C3p0Utils;

public class RegDAOimpl implements RegDAO {

    @Override
    public User reg(User user) throws SQLException {
        String sql = "insert into users(id,name,pwd,email,active,acode) values(?,?,?,?,?,?)";
        QueryRunner run = new QueryRunner(C3p0Utils.getComboPooledDataSource());

        String id = UUID.randomUUID().toString().replace("-", "");
        String acode = UUID.randomUUID().toString().replace("-", "");
        int n = run.update(sql, id, user.getName(), user.getPwd(),
                user.getEmail(), "0", acode);
        if (n > 0) {
            user.setId(id);
            user.setActive("0");
            user.setAcode(acode);
            return user;
        } else {
            return null;
        }
    }

}

sendMailutils:

package cn.hncu.utils;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import org.apache.log4j.Logger;

import cn.hncu.domain.User;

public class SendMailThread extends Thread{
    Logger log = Logger.getLogger(SendMailThread.class);

    private User user=null;
    public SendMailThread(User user) {
        this.user = user;
    }

    @Override
    public void run() {
        try {
            Properties p = new Properties();
            p.setProperty("mail.host", "smtp.sina.com");
            p.setProperty("mail.smtp.auth", "true");//认证登录
            Session session = Session.getDefaultInstance(p, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("hncujava","hncu1234567");
                }
            });

            session.setDebug(true);//以debug方式(应答方式)进行通讯

            //准备邮件
            MimeMessage msg = new MimeMessage(session); //从session中创建邮件
            msg.setFrom( new InternetAddress("[email protected]") );
            msg.setRecipient(RecipientType.TO, new InternetAddress( user.getEmail() ) );////※※※
            msg.setSubject("账号激活邮件,城院公司欢迎你!");
            String info = "激活:<a href='http://127.0.0.1:8080/mailWeb1602/ActiveServlet?acode="+user.getAcode()+"'>激活</a>";
            info = info + "<br/>如果激活未成功,请把地址复制到浏览器进行手动请求以进行激活:http://127.0.0.1:8080/mailWeb1602/ActiveServlet?acode="+user.getAcode();

            msg.setContent(info, "text/html;charset=utf-8");
            msg.setSentDate( new Date() );
            //发送邮件
            Transport.send(msg);
            log.info("邮件成功发送到:"+user.getEmail());
        } catch (Exception e) {
            log.error("邮件发送失败,邮箱地址为:"+user.getEmail());
            //e.printStackTrace();
        }
    }
}

result.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
    var i = 4;
    function a() {
        i--;
        div1.innerHTML = i + "秒钟之后自动登录";
        if (i <= 1) {
            window.clearInterval(tm);
            window.location.href = "<c:url value='/index.jsp'/>";
        }
    }
</script>

</head>

<body>
    <c:if test="${boo }">
        激活成功
        <a href="<c:url value='/index.jsp'/>">返回登录页面</a>
        <div id="div1"></div>
        <script type="text/javascript">
            tm = window.setInterval(aa, 1000);
        </script>
    </c:if>
    <c:if test="${!boo }">
        激活不成功,请检查激活码,或另择时间再激活
    </c:if>
</body>
</html>

“`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章