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> <!-- 彼は重要ですが、彼が一人しかいません --> </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("注册失败"); 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 过渡的//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
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("[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("");63;acode="+acode+" '>アクティベーションをクリックして");/a>"); sb.append("<br");/>アカウントのアクティベーションに失敗した場合、以下のURLをブラウザのアドレスバーにコピーして手動でアクティベーションを行ってください:"); 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 过渡的//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 过渡的//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 过渡的//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
<?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> <フィルタ> <フィルタ-name>charset</フィルタ-name> <フィルタ-class>cn.hncu.filter.CharacterFilter</フィルタ-class> <init-param> <param-name>charset</param-name> <param-value>utf-8</param-value> </init-param> </フィルタ> <フィルタ-mapping> <フィルタ-name>charset</フィルタ-name> <url-pattern>/*</url-pattern> </フィルタ-mapping> <servlet> <description>これは私のJの説明です2EE コンポーネント</description> <display-name>これは私のJの表示名です2EE コンポーネント</display-name> <servlet-name>RegServlet</servlet-name> <servlet-class>cn.hncu.reg.servlet.RegServlet</servlet-class> </servlet> <servlet> <description>これは私のJの説明です2EE コンポーネント</description> <display-name>これは私のJの表示名です2EE コンポーネント</display-name> <servlet-name>ActiveServlet</servlet-name> <servlet-class>cn.hncu.reg.servlet.ActiveServlet</servlet-class> </servlet> <servlet> <description>これは私のJの説明です2EE コンポーネント</description> <display-name>これは私のJの表示名です2EE コンポーネント</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
これがこの記事の全てです。皆さんの学習に役立つことを願っています。また、呐喊ガイドを多くのサポートをお願いします。
声明:このコンテンツはインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしました。このサイトは所有権を持ちません。また、人工的な編集は行われていません。著作権に関する問題があれば、メールを送信してください:notice#oldtoolbag.com(メールを送信する際に、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認が取れましたら、このサイトは即座に侵害を疑われるコンテンツを削除します。)