UserDao.java
package dao;
import java.sql.SQLException;
import domain.User;
public interface UserDao {
void regist(User user) throws SQLException;
User findByCode(String code) throws SQLException;
void update(User user) throws SQLException;
}
UserDaoImpl.java
package dao;
import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import utils.JdbcUtils;
import domain.User;
public class UserDaoImpl implements UserDao {
@Override
public void regist(User user) throws SQLException {
QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
String sql = "insert into user values (?,?,?,?,?,?,?)";
Object[] params = { user.getUid(), user.getUsername(),
user.getPassword(), user.getNickname(), user.getEmail(),
user.getState(), user.getCode() };
queryRunner.update(sql, params);
}
@Override
public User findByCode(String code) throws SQLException {
QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
String sql = "select * from user where code = ?";
User user = queryRunner.query(sql, new BeanHandler<User>(User.class),
code);
return user;
}
@Override
public void update(User user) throws SQLException {
QueryRunner queryRunner = new QueryRunner(JdbcUtils.getDataSource());
String sql = "update user set username=?,password=?,nickname=?,email=?,state=?,code=? where uid=?";
Object[] param = { user.getUsername(), user.getPassword(),
user.getNickname(), user.getEmail(), user.getState(),
user.getCode(), user.getUid() };
queryRunner.update(sql, param);
}
}
User.java
package domain;
public class User {
private Integer uid;
private String username;
private String password;
private String nickname;
private String email;
private Integer state;
private String code;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
UserService.java
package service;
import domain.User;
public interface UserService {
void regist(User user) throws Exception;
User findByCode(String code) throws Exception;
void update(User user) throws Exception;
}
UserServiceImpl.java
package service;
import utils.MailUtils;
import dao.UserDao;
import dao.UserDaoImpl;
import domain.User;
public class UserServiceImpl implements UserService {
@Override
public void regist(User user) throws Exception {
UserDao userDao = new UserDaoImpl();
userDao.regist(user);
MailUtils.sendMail(user.getEmail(), user.getCode());
}
@Override
public User findByCode(String code) throws Exception {
UserDao userDao=new UserDaoImpl();
return userDao.findByCode(code);
}
@Override
public void update(User user) throws Exception {
UserDao userDao=new UserDaoImpl();
userDao.update(user);
}
}
ActiveServlet.java
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import domain.User;
import service.UserService;
import service.UserServiceImpl;
@WebServlet("/ActiveServlet")
public class ActiveServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
String code = request.getParameter("code");
UserService userService = new UserServiceImpl();
User user = userService.findByCode(code);
if (user != null) {
user.setState(1);
user.setCode(null);
userService.update(user);
request.setAttribute("msg", "您的已经激活成功!请去登录!");
} else {
request.setAttribute("msg", "您的激活码有误,请重新激活!");
}
request.getRequestDispatcher("/msg.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
}
RegistServlet.java
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.UserService;
import service.UserServiceImpl;
import utils.UUIDUtils;
import domain.User;
public class RegistServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
String nickname = request.getParameter("nickname");
String email = request.getParameter("email");
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setNickname(nickname);
user.setEmail(email);
user.setState(0);
String code = UUIDUtils.getUUID() + UUIDUtils.getUUID();
user.setCode(code);
UserService userService = new UserServiceImpl();
userService.regist(user);
request.setAttribute("msg", "您已经注册成功,请去邮箱激活!");
request.getRequestDispatcher("/msg.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
}
JdbcUtils.java
package utils;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtils {
private static DataSource ds = new ComboPooledDataSource();
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
public static DataSource getDataSource() {
return ds;
}
public static Connection getConnection() throws SQLException {
Connection con = tl.get();
if (con != null)
return con;
return ds.getConnection();
}
public static void beginTransaction() throws SQLException {
Connection con = tl.get();
if (con != null)
throw new SQLException("已经开启了事务,不能重复开启!");
con = ds.getConnection();
con.setAutoCommit(false);
tl.set(con);
}
public static void commitTransaction() throws SQLException {
Connection con = tl.get();
if (con == null)
throw new SQLException("没有事务不能提交!");
con.commit();
con.close();
con = null;
tl.remove();
}
public static void rollbackTransaction() throws SQLException {
Connection con = tl.get();
if (con == null)
throw new SQLException("没有事务不能回滚!");
con.rollback();
con.close();
con = null;
tl.remove();
}
public static void releaseConnection(Connection connection)
throws SQLException {
Connection con = tl.get();
if (connection != con) {
if (connection != null && !connection.isClosed()) {
connection.close();
}
}
}
}
MailUtils.java
package utils;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class MailUtils {
public static void sendMail(String to, String code) throws Exception {
Properties properties = new Properties();
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("service@store.com", "root");
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("service@store.com"));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject("来自XX网站的激活邮件");
message.setContent(
"<h1>来自XX网站的激活邮件,点击</h1><h3><a href='http://localhost:8080/regist/ActiveServlet?code="
+ code
+ "'>http://localhost:8080/regist/ActiveServlet?code="
+ code + "</a></h3>", "text/html;charset=utf-8");
Transport.send(message);
}
}
UUIDUtils.java
package utils;
import java.util.UUID;
public class UUIDUtils {
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "");
}
}
c3p0-config.xml
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/regist_web?characterEncoding=utf-8</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>regist</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>RegistServlet</servlet-name>
<servlet-class>servlet.RegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistServlet</servlet-name>
<url-pattern>/RegistServlet</url-pattern>
</servlet-mapping>
</web-app>
msg.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>${msg }</h1>
</body>
</html>
regist.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>用户注册的界面</h1>
<form action="RegistServlet" method="post">
<table width="600" border="1">
<tr>
<td>用户名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td>昵称:</td>
<td><input type="text" name="nickname"/></td>
</tr>
<tr>
<td>邮箱:</td>
<td><input type="text" name="email"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="注册"/></td>
</tr>
![](https://img2020.cnblogs.com/blog/1962547/202105/1962547-20210506201548735-1678545511.jpg)
![](https://img2020.cnblogs.com/blog/1962547/202105/1962547-20210506201603624-1463661913.jpg)
</table>
</form>
</body>
</html>