JavaEE賬號(hào)注冊(cè)模擬網(wǎng)站郵箱激活
本項(xiàng)目是javaWeb和email結(jié)合的項(xiàng)目,模擬網(wǎng)站必須要激活郵箱賬號(hào)才可以使用,
創(chuàng)建數(shù)據(jù)庫(kù)
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值對(duì)象
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>
<!-- 默認(rèn)配置,如果沒有指定則使用這個(gè)配置 -->
<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>
<!-- 最大空閑時(shí)間 -->
<property name="maxIdleTime">30</property>
<!-- 最多有多少個(gè)連接 -->
<property name="maxPoolSize">10</property>
<!-- 最少幾個(gè)連接 -->
<property name="minPoolSize">2</property>
<!-- 每次最多可以執(zhí)行多少個(gè)批處理語(yǔ)句 -->
<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><!-- 如果池中數(shù)據(jù)連接不夠時(shí)一次增長(zhǎng)多少個(gè) -->
<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("注冊(cè)失敗");
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 \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println("請(qǐng)按要求填寫");
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("注冊(cè)成功,請(qǐng)到郵箱驗(yàn)證");
new SendEMailThread(user.getAcode()).start();
}else{
out.print("注冊(cè)失敗");
}
}
}
SendEMailThread.java
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賬號(hào)");
StringBuilder sb=new StringBuilder();
sb.append("請(qǐng)激活郵箱:<a );
sb.append("?acode="+acode+" '>點(diǎn)擊激活</a>");
sb.append("<br/>如果激活未成功,請(qǐng)復(fù)制下面地址到瀏覽器地址欄進(jìn)行手動(dòng)激活:");
sb.append("http://www.hncu.cn/mailWeb/ActiveServlet?acode="+acode);
msg.setContent(sb.toString(),"text/html;charset=utf-8");
Transport.send(msg);
log.info("郵件發(fā)送成功");
} catch (AddressException e) {
log.error("郵箱地址錯(cuò)誤,郵件發(fā)送失敗");
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
log.error("郵箱信息格式錯(cuò)誤,郵件發(fā)送失敗");
}
}
}
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>用戶注冊(cè)</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="注冊(cè)" 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>郵箱注冊(cè)系統(tǒng)</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>用戶注冊(cè)</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="注冊(cè)" 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+"秒跳轉(zhuǎn)";
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">
恭喜注冊(cè)成功!請(qǐng)登錄
<a href='<c:url value="/index.jsp" />'>登錄</a><br/><br/>
<div id ="div1">
</div>
</c:if>
<c:if test="${boo}">
注冊(cè)失敗,請(qǐng)重新激活
</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>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
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java中并發(fā)Queue種類與各自API特點(diǎn)以及使用場(chǎng)景說明
這篇文章主要介紹了java中并發(fā)Queue種類與各自API特點(diǎn)以及使用場(chǎng)景說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法
這篇文章主要介紹了MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Java使用JavaMail API發(fā)送和接收郵件的代碼示例
JavaMail是Oracle甲骨文開發(fā)的Java郵件類API,支持多種郵件協(xié)議,這里我們就來看一下Java使用JavaMail API發(fā)送和接收郵件的代碼示例2016-06-06
Java創(chuàng)建線程的七種方法總結(jié)(全網(wǎng)最全面)
線程是Java中的基本執(zhí)行單元,它允許程序在同一時(shí)間執(zhí)行多個(gè)任務(wù),下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java創(chuàng)建線程的七種方法,文中通過實(shí)例代碼將這七種方法介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
簡(jiǎn)單了解SpringMVC緩存對(duì)靜態(tài)資源有什么影響
這篇文章主要介紹了簡(jiǎn)單了解SpringMVC緩存對(duì)靜態(tài)資源有什么影響,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
如何設(shè)置Spring Boot測(cè)試時(shí)的日志級(jí)別
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。下面我們來一起學(xué)習(xí)一下吧2019-06-06
在Docker中部署Spring Boot項(xiàng)目過程詳解
這篇文章主要介紹了在Docker中部署Spring Boot項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

