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>
</table> </form> </body> </html>