Java實現郵箱驗證



一.創建數據庫foxmail,再創建user表


CREATE DATABASE Foxmail;

USE Foxmail;

CREATE TABLE `user`(
`uid` INT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(20) DEFAULT NULL,
`password` VARCHAR(20) DEFAULT NULL,
`nickname` VARCHAR(20) DEFAULT NULL,
`email` VARCHAR(30) DEFAULT NULL,
`state` INT(11) DEFAULT NULL,
`code` VARCHAR(64) DEFAULT NULL


)ENGINE=INNODB DEFAULT CHARSET=utf8;

 

二.配置環境,安裝軟件

 

eyoumailserversetup.exe  :易郵郵件服務器

Foxmail.exe  :Foxmail客戶端

 

 1.創建郵箱賬號

 

 

 

 

2.登錄Foxmail客戶端

 

 

三.使用eclipse編寫代碼

 1.新建一個web項目

 

 2.實體類domain

代碼如下:----User.java

 

 1 package com.xigua.domain;
 2 
 3 public class User {
 4 
 5     private Integer uid;
 6     private String username;
 7     private String password;
 8     private String nickname;
 9     private String email;
10     private Integer state;
11     private String code;
12     public Integer getUid() {
13         return uid;
14     }
15     public void setUid(Integer uid) {
16         this.uid = uid;
17     }
18     public String getUsername() {
19         return username;
20     }
21     public void setUsername(String username) {
22         this.username = username;
23     }
24     public String getPassword() {
25         return password;
26     }
27     public void setPassword(String password) {
28         this.password = password;
29     }
30     public String getNickname() {
31         return nickname;
32     }
33     public void setNickname(String nickname) {
34         this.nickname = nickname;
35     }
36     public String getEmail() {
37         return email;
38     }
39     public void setEmail(String email) {
40         this.email = email;
41     }
42     public Integer getState() {
43         return state;
44     }
45     public void setState(Integer state) {
46         this.state = state;
47     }
48     public String getCode() {
49         return code;
50     }
51     public void setCode(String code) {
52         this.code = code;
53     }
54     
55     
56     
57 }

 

3.C3P0.config.xml代碼

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 
 4 <c3p0-config>
 5     <default-config>
 6         <property name="driverClass">com.mysql.jdbc.Driver</property>
 7         <property name="jdbcUrl">jdbc:mysql://localhost:3306/foxmail</property>
 8         <property name="user">root</property>
 9         <property name="password">123</property>
10         
11         <property name="acquireIncrement">5</property>
12         <property name="initialPoolSize">10</property>
13         <property name="minPoolSize">5</property>
14         <property name="maxPoolSize">20</property>
15         
16         
17     </default-config>
18 
19 </c3p0-config>

 

 4.編寫utils包內的工具類

 

 C3P0Util.java 代碼如下:

 1 package com.xigua.utils;
 2 
 3 import javax.sql.DataSource;
 4 
 5 import com.mchange.v2.c3p0.ComboPooledDataSource;
 6 
 7 public class C3P0Util {
 8     /**
 9      * 配置文件的名字只能叫c3p0-config.xml ,位置只能放在src的根目錄下�??
10      * 默認是去找default-config的配�?
11      */
12     private static ComboPooledDataSource dataSource=new ComboPooledDataSource();
13     
14     public static DataSource getDataSource(){
15         return dataSource;
16         
17     }
18 }
19 
20     

  JDBCUtils.java 代碼如下:

 1 package com.xigua.utils;
 2 
 3 import java.beans.PropertyVetoException;
 4 import java.sql.Connection;
 5 import java.sql.PreparedStatement;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 
10 import com.mchange.v2.c3p0.ComboPooledDataSource;
11 import com.mchange.v2.c3p0.DataSources;
12 
13 public class JDBCUtils {
14     private static String url = "jdbc:mysql://localhost:3306/foxmail";
15     private static String user = "root";
16     private static String passwd = "123";
17     private static String driver = "com.mysql.jdbc.Driver";
18    
19     public static ComboPooledDataSource getDataSource() throws Exception{
20         ComboPooledDataSource cpds = new ComboPooledDataSource();
21         cpds.setDriverClass( driver);
22         cpds.setJdbcUrl( url );
23         cpds.setUser(user);                                  
24         cpds.setPassword(passwd);  
25         cpds.setMinPoolSize(5);                                     
26         cpds.setAcquireIncrement(5);
27         cpds.setMaxPoolSize(30);
28         cpds.setMaxIdleTime(60);
29         return cpds;
30     }
31 }

MailUtils.java代碼如下:

 1 package com.xigua.utils;
 2 
 3 import java.util.Properties;
 4 
 5 import javax.mail.Authenticator;
 6 import javax.mail.Message.RecipientType;
 7 import javax.mail.MessagingException;
 8 import javax.mail.PasswordAuthentication;
 9 import javax.mail.Session;
10 import javax.mail.Transport;
11 import javax.mail.internet.AddressException;
12 import javax.mail.internet.InternetAddress;
13 import javax.mail.internet.MimeMessage;
14 
15 public class MailUtils {
16     /**
17      * 
18      * @param to:代表給誰發郵件
19      * @param code:代表激活碼是什么
20      * @throws MessagingException 
21      * @throws AddressException 
22      */
23     
24     public static void sendMail(String to,String code) throws Exception{
25         //1.創建連接對象,連接到郵箱服務器
26         Properties props = new Properties();
27         
28         Session session=Session.getInstance(props, new Authenticator() {
29 
30             @Override
31             protected PasswordAuthentication getPasswordAuthentication() {
32                 /**創建一個郵箱賬號:service@mac.com  123
33                  * 默認使用該賬號發送郵件
34                  */
35                 //return new PasswordAuthentication("service@mac.com", "123");
36                 return new PasswordAuthentication("自己的QQ郵箱", "授權編碼");
37             }
38             
39             
40         });
41         
42         //2.創建郵件對象
43         MimeMessage message = new MimeMessage(session);
44           //2.1設置發件人
45             /**
46              * service@mac.com是一個字符串,
47              * 將字符串轉換成地址:new InternetAddress("service@mac.com")
48              */
49            message.setFrom(new InternetAddress("自己的QQ郵箱"));
50         
51          //2.2設置收件人
52          message.setRecipient(RecipientType.TO, new InternetAddress(to));
53         
54          //2.3設置郵件主題
55          message.setSubject("這是一封激活郵件!");
56         
57          //2.4設置郵件正文
58          /**
59           *   ?code="+code+"  :表示從外面傳入一個激活碼
60           */
61          message.setContent("<h1>來自西瓜瓜購物網站的激活郵件,激活請點擊以下鏈接:</h1> <h3>  <a href='http://localhost:8080/Foxmail/ActiveServlet?code="+code+"'> http://localhost:8080/Foxmail/ActiveServlet?code="+code+" </a></h3>", "text/html;charset=UTF-8");
62         
63          //3.發送一封激活郵件
64          Transport.send(message);
65     }
66     
67     
68     
69 }

UUIDUtils.java代碼如下:

 1 package com.xigua.utils;
 2 import java.util.UUID;
 3 public class UUIDUtils {
 4   //生成隨機字符串的工具類
 5     public static String getUUID(){
 6         //取消短-
 7         return UUID.randomUUID().toString().replace("-", "");
 8     
 9     }
10     
11 }

 

5.編寫service包內代碼

 

 UserService接口:

 1 package com.xigua.service;
 2 
 3 import com.xigua.domain.User;
 4 
 5 public interface UserService {
 6     void regist(User user) throws Exception;
 7 
 8     User findByCode(String code) throws Exception;
 9 
10     void update(User user)throws Exception;
11 }

 

UserServiceImpl實現類:

 1 package com.xigua.service.impl;
 2 
 3 import com.xigua.dao.UserDao;
 4 import com.xigua.dao.impl.UserDaoImpl;
 5 import com.xigua.domain.User;
 6 import com.xigua.service.UserService;
 7 import com.xigua.utils.MailUtils;
 8 
 9 public class UserServiceImpl implements UserService {
10 
11     UserDao userDao = new UserDaoImpl();
12     
13     //業務層用戶注冊的方法:
14     public void regist(User user) throws Exception {
15         //將數據存入到數據庫
16         userDao.regist(user);
17         
18         //發送一封激活郵件
19           /**
20            * 直接用發寫好的工具類發送郵件
21            */
22        MailUtils.sendMail(user.getEmail(), user.getCode());    
23     
24     }
25 
26     @Override
27     //根據激活碼查找用戶
28     public User findByCode(String code) throws Exception {
29         
30         return userDao.findByCode(code);
31     }
32 
33     @Override
34     //業務層修改用戶的方法
35     public void update(User user) throws Exception {
36         userDao.update(user);
37         
38     }
39 
40 }

 

 6.編寫dao包內代碼

 

 UserDao接口:

 1 package com.xigua.dao;
 2 
 3 import java.sql.SQLException;
 4 
 5 import com.xigua.domain.User;
 6 
 7 public interface UserDao {
 8 
 9     void regist(User user) throws Exception;
10 
11     User findByCode(String code) throws Exception;
12 
13     void update(User user)throws Exception;
14 
15 }

 

UserDaoImpl實現類:

 1 package com.xigua.dao.impl;
 2 
 3 
 4 
 5 import java.sql.SQLException;
 6 
 7 import org.apache.commons.dbutils.QueryRunner;
 8 import org.apache.commons.dbutils.handlers.BeanHandler;
 9 
10 import com.xigua.dao.UserDao;
11 import com.xigua.domain.User;
12 
13 import com.xigua.utils.JDBCUtils;
14 
15 
16 public class UserDaoImpl implements UserDao {
17 
18     //Dao中保存用戶的方法
19     public void regist(User user) throws Exception {
20         
21         //QueryRunner queryRunner = new QueryRunner(C3P0Util.getDataSource());
22         QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
23         //寫SQL語句
24         String sql="insert into user values(?,?,?,?,?,?,?);";
25          
26       Object[] params={user.getUid(),user.getUsername(),user.getPassword(),user.getNickname(),user.getEmail(),user.getState(),user.getCode()};
27     
28       // 更新語句
29       queryRunner.update(sql,params);
30       
31     }
32 
33     @Override
34     //Dao中根據激活碼來查詢用戶的方法
35     public User findByCode(String code) throws Exception {
36         QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
37         String sql="select * from user where code = ?";
38         User user=queryRunner.query(sql,new BeanHandler<User>(User.class), code);
39         return user;
40     }
41 
42     @Override
43     //Dao中修改用戶的方法
44     public void update(User user) throws Exception {
45         QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
46         String sql="update user set username=?,password=?,nickname=?,email=?,state=?,code=? where uid=?;";
47         
48           Object[] params={user.getUsername(),user.getPassword(),user.getNickname(),user.getEmail(),user.getState(),user.getCode(),user.getUid()};
49           // 更新語句
50           queryRunner.update(sql,params);
51         
52     }
53 }

  7.編寫action包內代碼

新建兩個Servlet,不是class

 

 

ActiveServlet代碼:

 1 package com.xigua.action;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 import com.xigua.domain.User;
10 import com.xigua.service.UserService;
11 import com.xigua.service.impl.UserServiceImpl;
12 
13 public class ActiveServlet extends HttpServlet {
14     private static final long serialVersionUID = 1L;
15  
16     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
17     try {
18         //接收激活碼
19         String code = request.getParameter("code");
20         //根據激活碼查用戶
21         System.out.println("code值:"+code);
22         UserService userService = new UserServiceImpl();
23         
24             User user=userService.findByCode(code);
25             
26             if(user!=null){
27                 //已經查詢到,修改用戶狀態    
28                 user.setState(1);//狀態變為1
29                 user.setCode(null);//狀態碼,點擊一次就失效了
30                 userService.update(user);
31                 request.setAttribute("msg", "恭喜你已經激活成功!請登錄~");
32 
33             }else{
34                 //根據激活碼沒有查詢到該用戶
35                 request.setAttribute("msg", "您的激活碼有誤,請重新激活!");
36             }
37           //頁面跳轉
38             request.getRequestDispatcher("/msg.jsp").forward(request, response);
39     
40         } catch (Exception e) {
41             
42             e.printStackTrace();
43         }
44     }
45     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
46         
47         doGet(request, response);
48     }
49 
50 }

 

 RegistServlet代碼:

 

 1 package com.xigua.action;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 import com.xigua.domain.User;
10 import com.xigua.service.UserService;
11 import com.xigua.service.impl.UserServiceImpl;
12 import com.xigua.utils.UUIDUtils;
13 
14 public class RegistServlet extends HttpServlet {
15     private static final long serialVersionUID = 1L;
16 
17     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18     try {
19         //接收數據
20         //處理中文亂碼
21         request.setCharacterEncoding("UTF-8");
22         
23         String username = request.getParameter("username");
24         String password = request.getParameter("password");
25         String nickname = request.getParameter("nickname");
26         String email = request.getParameter("email");
27         
28         //包裝數據
29         User user=new User();
30         user.setUsername(username);
31         user.setPassword(password);
32         user.setNickname(nickname);
33         user.setEmail(email);
34        
35         user.setState(0);  //0未激活    1已激活
36       //  UUIDUtils.getUUID()默認32位,若不夠,在+32位
37         String code = UUIDUtils.getUUID()+UUIDUtils.getUUID();
38         
39         user.setCode(code);
40         
41         //調用業務層處理數據
42         UserService userService = new UserServiceImpl();
43      
44             userService.regist(user);
45             
46         //頁面跳轉    
47             request.setAttribute("msg", "您已經注冊成功!請去郵箱激活~");
48             request.getRequestDispatcher("/msg.jsp").forward(request, response);
49     
50         } catch (Exception e) {
51             // TODO Auto-generated catch block
52             e.printStackTrace();
53         }
54     }
55 
56     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
57         
58         doGet(request, response);
59     }
60 
61 }

 8.編寫JSP代碼

注冊: regist.jsp 代碼

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>注冊界面</title>
 8 </head>
 9 <body>
10     <h1>用戶注冊</h1>
11         
12         <form action="${pageContext.request.contextPath }/RegistServlet" method="post">
13           <table >
14               <tr>
15                 <td>用戶名</td>
16                 <td><input type="text" name="username"/></td>
17               </tr>
18                  <tr>
19                 <td>密碼</td>
20                 <td><input type="password" name="password"/></td>
21               </tr>
22                  <tr>
23                 <td>昵稱</td>
24                 <td><input type="text" name="nickname"/></td>
25               </tr>
26                  <tr>
27                 <td>郵箱</td>
28                 <td><input type="text" name="email"/></td>
29               </tr>
30                  <tr>
31                 
32                 <td colspan="2">
33                    <input type="submit" value="注冊"/>
34                    <input type="reset" value="重置"/>
35                 </td>
36               </tr>
37            
38            
39            </table>
40         
41         </form>
42 
43 
44 
45 </body>
46 </html>

 

激活界面:msg.jsp代碼

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>激活界面</title>
 8 </head>
 9 <body>
10 <h1>${ msg }</h1>
11 </body>
12 </html>

 

 后續更新中……

 有錯請評論下方,謝謝~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM