English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
本项目是javaWeb和email结合的项目,模拟网站必须要激活邮箱账号才可以使用,
创建数据库
create table user( id varchar(32) primary key, name varchar(30), pwd varchar(20), email varchar(20), active char(1), acode varchar(32) )
User.java值对象
package cn.hncu.reg.domain; import javax.persistence.Table; public class User { private String id; private String name; private String pwd; private String acode; private String active; private String email; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getAcode() { return acode; } public void setAcode(String acode) { this.acode = acode; } public String getActive() { return active; } public void setActive(String active) { this.active = active; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; User other = (User) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; return true; } }
C3p0Pool.java
package cn.hncu.pubs; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3p0Pool { private static DataSource ds=new ComboPooledDataSource();; private static ThreadLocal<Connection> tl=new ThreadLocal<Connection>(); public static Connection getCon() throws SQLException { Connection con = (Connection)tl.get(); if (con == null) { con = ds.getConnection(); tl.set(con); } return con; } public static DataSource getPool() { return ds; } public static ThreadLocal<Connection> getTl() { return tl; } }
C3p0-config.xml
<c3p0-config> <!-- 默认配置,如果没有指定则使用这个配置 --> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl"> <![CDATA[jdbc:mysql://127.0.0.1:3306/sstud?useUnicode=true&characterEncoding=UTF-8]]> </property> <property name="user">root</property> <property name="password">1234</property> <!-- Размер начального пула --> <property name="initialPoolSize">2</property> <!-- Максимальное время простоя --> <property name="maxIdleTime">30</property> <!-- Максимальное количество подключений --> <property name="maxPoolSize">10</property> <!-- Минимальное количество подключений --> <property name="minPoolSize">2</property> <!-- Сколько максимальных批евых операторов можно выполнить за один раз --> <property name="maxStatements">50</property> </default-config> <!-- Названная конфигурация --> <named-config name="hncu"> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/sstud</property> <property name="user">root</property> <property name="password">1234</property> <property name="acquireIncrement">5</property> <!-- Если в пуле недостаточно данных для подключения, то сколько增加到一次 --> <property name="initialPoolSize">100</property> <property name="minPoolSize">50</property> <property name="maxPoolSize">1000</property> <property name="maxStatements">0</property> <property name="maxStatementsPerConnection">5</property> <!-- he's important, but there's only one of him --> </named-config> </c3p0-config>
RegDAO.java
package cn.hncu.reg.dao; import cn.hncu.reg.domain.User; public interface RegDAO { public User reg(User user); public User active(String acode); }
RegDaoJdbc.java
package cn.hncu.reg.dao; import java.sql.SQLException; import java.util.UUID; import javax.sql.DataSource; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import cn.hncu.pool.C3p0Pool; import cn.hncu.reg.domain.User; public class RegDaoJdbc implements RegDAO{ @Override public User reg(User user) { DataSource ds = C3p0Pool.getPool(); QueryRunner qr=new QueryRunner(ds); String sql = "insert into user(id,name,pwd,email,active,acode) values(?,?,?,?,?,?)"; try { String id = UUID.randomUUID().toString().replaceAll("-", ""); String acode = UUID.randomUUID().toString().replaceAll("-", ""); qr.update(sql, id, user.getName(), user.getPwd(), user.getEmail(), "0", acode); user.setAcode(acode); user.setId(id); user.setActive("0"); } catch (SQLException e) { // e.printStackTrace(); System.out.println("Registration failed"); return null; } return user; } @Override public User active(String acode) { DataSource ds = C3p0Pool.getPool(); QueryRunner qr=new QueryRunner(ds); String sql="select * from user where acode=?"; User user=null; try { user=qr.query(sql, new BeanHandler(User.class),acode); if(user!=null){ sql="update user set active='1' ,acode=''where acode=?"; qr.update(sql,acode); return user; } } catch (SQLException e) { user=null; e.printStackTrace(); } return null; } }
IRegService.java
package cn.hncu.reg.service; import cn.hncu.reg.domain.User; public interface IRegService { public User reg(User user); public User active(String acode); }
RegService.java
package cn.hncu.reg.service; import cn.hncu.reg.dao.RegDAO; import cn.hncu.reg.dao.RegDaoJdbc; import cn.hncu.reg.domain.User; public class RegService implements IRegService { private RegDAO dao=new RegDaoJdbc(); @Override public User reg(User user) { return dao.reg(user); } @Override public User active(String acode) { return dao.active(acode); } }
RegServlet.java
package cn.hncu.reg.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.hncu.reg.domain.User; import cn.hncu.reg.sendMail.SendEMailThread; import cn.hncu.reg.service.IRegService; import cn.hncu.reg.service.RegService; public class RegServlet extends HttpServlet { private IRegService service = new RegService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \ out.println("<HTML>") out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println("пожалуйста, заполните по требованию"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); 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); user=service.reg(user); if (user!=null) { out.print("регистрация успешна, пожалуйста, проверьте вашу электронную почту"); new SendEMailThread(user.getAcode()).start(); }else{ out.print("регистрация не удалась"); } } }
SendEMailThread.java
пакет cn.hncu.reg.sendMail; импорт java.util.Properties; импорт javax.mail.Authenticator; импорт javax.mail.Message.RecipientType; импорт javax.mail.MessagingException; импорт javax.mail.PasswordAuthentication; импорт javax.mail.Session; импорт javax.mail.Transport; импорт javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.apache.log4j.Logger; public class SendEMailThread extends Thread { private String acode; private Logger log = Logger.getLogger(SendEMailThread.class); public SendEMailThread(String acode) { this.acode = acode; } @Override public void run() { 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() { PasswordAuthentication pa = new PasswordAuthentication("hncujava", "1234567"); return pa; } }); session.setDebug(true); MimeMessage msg = new MimeMessage(session); try { msg.setFrom(new InternetAddress("[email protected]")); msg.setRecipient(RecipientType.TO, new InternetAddress("[email protected]")); msg.setSubject("Активация hncu аккаунта"); StringBuilder sb = new StringBuilder(); sb.append("Активируйте почтовый ящик:<a href='http://127.0.0.1:8080/mailWeb/ActiveServlet"); sb.append("?acode=" + acode + " '>Нажмите, чтобы активировать</a>"); sb.append("<br/>Если активация не успешна, скопируйте следующий адрес в строку адреса браузера для ręчного активирования:"); sb.append("http://www.hncu.cn/mailWeb/ActiveServlet?acode=" + acode); msg.setContent(sb.toString(), "text/html;charset=utf-8"); Transport.send(msg); log.info("Письмо отправлено успешно"); } catch (AddressException e) { log.error("Некорректный адрес почты, отправка письма失败"); e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); log.error("Некорректный формат почтового адреса, отправка письма失败"); } } }
ActiveServlet.java
package cn.hncu.reg.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.hncu.reg.domain.User; import cn.hncu.reg.service.IRegService; import cn.hncu.reg.service.RegService; public class ActiveServlet extends HttpServlet { private IRegService service = new RegService(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); String acode=request.getParameter("acode"); User user=service.active(acode); request.setAttribute("user", user); System.out.println("user:"+user); request.getRequestDispatcher("/jsps/result.jsp").forward(request, response); } }
index.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> <title>邮箱登录</title> <script type="text/javascript"> function reg(){ document.forms[0].action='<c:url value="/jsps/reg.jsp"/>'; document.forms[0].submit(); } function login(){ document.forms[0].action='<c:url value="/LoginServlet"/>'; document.forms[0].submit(); } </script> </head> <body> <c:if test="${!empty error }"> 登录失败 <c:remove var="error" scope="session"/> </c:if> <c:if test="${empty sessionScope.user }" var="boo"> <h3>Регистрация пользователя</h3> <form action="" method="post" > Имя:<input type="text" name="name" value="wang"/><br/> Пароль:<input type="text" name="pwd" value="1234"/><br/> <input type="button" value="登录" onclick="login();"/> <input type="button" value="регистрация" onclick="reg();"/><br/> </form> </c:if> <c:if test="${!boo }"> 欢迎回来,${ sessionScope.user.name} </c:if> </body> </html>
reg.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> <title>邮箱注册系统</title> <script type="text/javascript"> function reg(){ document.forms[0].action='<c:url value="/RegServlet"/>'; document.forms[0].submit(); } function login(){ document.forms[0].action='<c:url value="/LoginServlet"/>'; document.forms[0].submit(); } </script> </head> <body> <c:if test="${empty sessionScope.user }" var="boo"> <h3>Регистрация пользователя</h3> <form action="" method="post" > Имя:<input type="text" name="name" value="wang"/><br/> Пароль:<input type="text" name="pwd" value="1234"/><br/> Электронная почта:<input type="text" name="email" value="[email protected]"/> <br/> <input type="button" value="регистрация" onclick="reg();"/><br/> </form> </c:if> </body> </html>
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 tm; var time=5; function start(){ div1.innerHTML="сегодня"+time+"секунды до перехода"; time--; if(time<=1){ window.clearInterval(tm); window.location.href="<c:url value='/index.jsp'/>"; } } onload=function(){ tm=window.setInterval(start, 1000); }; </script> </head> <body> <c:if test="${!empty requestScope.user }" var=" boo"> Поздравляем с успешной регистрацией! Пожалуйста, войдите в систему <a href='<c:url value="/index.jsp" />'>登录</a><br/><br/> <div id ="div1"> </div> </c:if> <c:if test="${boo}"> Registration failed, please reactivate </c:if> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <filter> <filter-name>charset</filter-name> <filter-class>cn.hncu.filter.CharacterFilter</filter-class> <init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>charset</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <description>Это описание моего компонента J2EE</description> <display-name>Это имя отображения моего компонента J2EE</display-name> </servlet> <servlet-class>cn.hncu.reg.servlet.RegServlet</servlet-class> <servlet> <description>Это описание моего компонента J2EE</description> <display-name>Это имя отображения моего компонента J2EE</display-name> <url-pattern>/RegServlet</url-pattern> <servlet-class>cn.hncu.reg.servlet.ActiveServlet</servlet-class> <servlet> <description>Это описание моего компонента J2EE</description> <display-name>Это имя отображения моего компонента J2EE</display-name> <servlet-mapping> <servlet-class>cn.hncu.login.LoginServlet</servlet-class> <url-pattern>/ActiveServlet</url-pattern> </servlet> <servlet-name>RegServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> <url-pattern>/ActiveServlet</url-pattern> <url-pattern>/RegServlet</url-pattern> <servlet-name>ActiveServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> <url-pattern>/ActiveServlet</url-pattern> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
</web-app>
необходимые jar-пакеты
commons-dbutils-1.4.jar
java-mail-1.4.4.jar
mysql-connector-java-5.1.34-bin.jar
myConUtil.jar
Это конец статьи, надеюсь, это поможет вам в изучении, также希望大家多多支持呐喊教程。
Заявление: содержимое статьи взято из Интернета, авторские права принадлежат авторам, материал предоставлен пользователями Интернета, сайт не имеет права собственности, материал не был отредактирован вручную, также не несет ответственности за соответствующие юридические вопросы. Если вы обнаружите контент,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для подачи жалобы,并提供 соответствующие доказательства. Если будет установлено, что материал нарушает авторские права, сайт немедленно удалил涉嫌侵权的内容.