本项目是javaWeb和email结合的项目,模拟网站必须要激活邮箱账号才可以使用,
创建数据库
1
2
3
4
5
6
7
8
|
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值对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
< 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
1
2
3
4
5
6
7
8
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
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( "注册失败" );
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
1
2
3
4
5
6
7
8
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
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 \"-//W3C//DTD HTML 4.01 Transitional//EN\">" );
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package cn.hncu.reg.sendMail;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
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 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( "hncujava@sina.com" ) );
msg.setRecipient(RecipientType.TO, new InternetAddress( "747205398@qq.com" ));
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/>如果激活未成功,请复制下面地址到浏览器地址栏进行手动激活:" );
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<%@ 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
<%@ 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 = "747205398@qq.com" /> < br />
< input type = "button" value = "注册" onclick = "reg();" />< br />
</ form >
</ c:if >
</ body >
</ html >
|
result.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<%@ 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}" >
注册失败,请重新激活
</ c:if >
</ body >
</ html >
|
web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
<? 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 >This is the description of my J2EE component</ description >
< display-name >This is the display name of my J2EE component</ display-name >
< servlet-name >RegServlet</ servlet-name >
< servlet-class >cn.hncu.reg.servlet.RegServlet</ servlet-class >
</ servlet >
< servlet >
< description >This is the description of my J2EE component</ description >
< display-name >This is the display name of my J2EE component</ display-name >
< servlet-name >ActiveServlet</ servlet-name >
< servlet-class >cn.hncu.reg.servlet.ActiveServlet</ servlet-class >
</ servlet >
< servlet >
< description >This is the description of my J2EE component</ description >
< display-name >This is the display name of my J2EE component</ display-name >
< servlet-name >LoginServlet</ servlet-name >
< servlet-class >cn.hncu.login.LoginServlet</ servlet-class >
</ servlet >
< servlet-mapping >
< servlet-name >RegServlet</ servlet-name >
< url-pattern >/RegServlet</ url-pattern >
</ servlet-mapping >
< servlet-mapping >
< servlet-name >ActiveServlet</ servlet-name >
< url-pattern >/ActiveServlet</ url-pattern >
</ servlet-mapping >
< 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包
c3p0-0.9.1.2.jar
commons-dbutils-1.4.jar
java-mail-1.4.4.jar
mysql-connector-java-5.1.34-bin.jar
myConUtil.jar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。