English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

محاكاة موقع تسجيل حساب JavaEE مع تفعيل البريد الإلكتروني

هذا المشروع مشروع مدمج بين 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>
    5 
  

 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();
    إخراج.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);
    إذا (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/>إذا لم يحدث التفعيل بنجاح، يرجى نسخ العنوان التالي إلى شريط العناوين في المتصفح للتفعيل يدويًا:");
      sb.append("http://www.hncu.cn/mailWeb/ActiveServlet?acode="+acode);
      msg.setContent(sb.toString(),"text/html;charset=utf-8");
      Transport.send(msg);
      log.info("نجح في إرسال البريد الإلكتروني");
    }
      log.error("عنوان بريد الالكتروني غير صحيح، فشل في إرسال البريد الإلكتروني");
      e.printStackTrace();
    }
      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}">
    فشل التسجيل، يرجى إعادة التفعيل
  </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>
الجارز التي تحتاجها
commons-dbutils-1.4.jar
java-mail-1.4.4.jar
mysql-connector-java-5.1.34-bin.jar
myConUtil.jar

هذا هو نهاية محتويات هذا المقال، نأمل أن تكون قد ساعدتكم في التعلم، ونأمل أن تدعموا تعليمات النفخة.

بيان: محتويات هذا المقال تم جمعها من الإنترنت، ويحق لصاحب الحقوق أن يتحكم في محتوياته، تم تحميل المحتويات بواسطة المستخدمين على الإنترنت بصفة ذاتية، ولم يتحكم الموقع في حقوق الملكية، ولا يتحمل أي مسؤولية قانونية بشأن ذلك. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (الرجاء استبدال # ب @ عند إرسال البريد الإلكتروني) للإبلاغ، وتقديم الدليل، وسيتم حذف المحتوى المزعوم فور التحقق منه.

مفضل لك