小項目製作: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>

“`

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