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

JavaEE 계정 등록 모의 웹사이트 이메일 활성화

이 프로젝트는 JavaWeb과 이메일을 결합한 프로젝트로, 웹사이트를 사용하기 위해서는 이메일 계정이 활성화되어야 합니다.

데이터베이스 생성

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&63;useUnicode=true&characterEncoding=UTF8-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 kr.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 kr.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>Servlet A</TITLE></HEAD>");
    out.println(" <BODY>");
    out.println("지시에 따라 입력하십시오");
    out.println(" </BODY>");
    out.println("</HTML>");
    out.flush();
    out.close();
  }
  public void doPost(HttpServletRequest 요청, HttpServletResponse 응답)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    String 이름 = request.getParameter("이름");
    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("?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("이메일 전송 성공");
    } 캡처(주소예외 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);
    /jsps/result.jsp
  }
}

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();
    }
  </스크립트>
 </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();
    }
  </스크립트>
 </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);
    ;
  </스크립트>
 </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 버전="1.0" 인코딩="UTF-8"?>
<웹-app 버전="3.0" 
  xmlns="http://java.sun.com/xml/ns/javaee" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-인스턴스" 
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 <display-이름></display-name>
 <필터>
  <필터-이름>charset</필터-name>
  <필터-class>cn.hncu.filter.CharacterFilter</필터-class>
  <초기화-파라미터>
    <파라미터-이름>charset</파라미터-name>
    <파라미터-값>utf-8</파라미터-값>
  </초기화-파라미터>
 </필터>
 <필터-mapping>
  <필터-이름>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#w로 이메일을 보내 주세요.3codebox.com에 대한 신고를 보내는 경우, #을 @으로 변경하고, 관련 증거를 제공하십시오. 사실이 확인되면, 이 사이트는 즉시 저작권 침해 내용을 삭제합니다.

추천 합니다