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

来源:互联网 发布:剑灵召唤师女捏脸数据 编辑:程序博客网 时间:2024/05/29 13:29

功能设计:
这里写图片描述
架构设计:
这里写图片描述
注册时通过发送邮件方式,传递访问项目激活的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("hncujava@sina.com") );            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>

“`

原创粉丝点击