註冊激活流程:
爲了驗證用戶註冊郵箱的真實性,在頁面完成註冊操作後賬號默認未激活,需要在24小時內訪問郵件內的地址激活該賬號狀態。上圖描述了具體操作邏輯。
講一講一些有意思的東西,那些奇怪有需要注意的地方:
突如其來的jstl
報錯,其實在項目依賴裏有這麼一個依賴包jstl-1.2-sources.jar
,雖然已經放進了項目Build path裏面,但是tomcat服務器不能識別,只能再次把包複製到D:\Tomcat7.0\apache-tomcat-7.0.104\lib
,問題解決,這種問題出現了不少次以後可以將項目依賴的jar包先拷一遍進Tomcat。
------------------------------------------------------------------------
我又一次遇到這個問題,jsp文件去掉以下一句頭聲明,反而可以正常。基本確定了jstl-1.2-sources.jar
還是存在問題。源項目使用的只是一個jstl.jar
24kb的版本,並不是jstl-1.2-sources.jar
。苦惱過後很後悔爲什麼不直接把架包複製過來又踩坑了。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
BeanUtils封裝
BeanUtils 是 Apache commons組件的成員之一,主要用於簡化JavaBean封裝數據的操作。它可以給JavaBean封裝一個字符串數據,也可以將一個Map/表單提交的所有數據封裝到JavaBean中。其主要目的是利用反射機制對JavaBean的屬性進行處理。需要添加commons-beanutils-1.8.3.jar
大佬的原文:https://blog.csdn.net/wzc1991520/article/details/80176679
項目中這樣使用:
// 將表單提交的數據封裝到javaBean
User user = new User();
try {
BeanUtils.populate(user, request.getParameterMap());
// 封裝激活碼
user.setActiveCode(ActiveCodeUtils.createActiveCode());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
普通使用時並沒有體現其反射機制原理,項目也只是調用了populate()
方法,將請求Map方式存儲的參數封裝到對象。目前先這樣記錄下使用方式,日後補充。
javax.mail郵件發送
MailUtils中這樣使用郵箱發送:
public class MailUtils {
public static void sendMail(String email, String emailMsg)
throws AddressException, MessagingException {
// 1.創建一個程序與郵件服務器會話對象 Session
Properties props = new Properties();
// 設置郵件傳輸協議爲SMTP
props.setProperty("mail.transport.protocol", "SMTP");
// 設置SMTP服務器地址
props.setProperty("mail.host", "smtp.sohu.com");
// 設置SMTP服務器是否需要用戶驗證,需要驗證設置爲true
props.setProperty("mail.smtp.auth", "true");
// 創建驗證器
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("你的郵箱名不帶@後的字段", "登錄密碼");
}
};
Session session = Session.getInstance(props, auth);
// 2.創建一個Message,它相當於是郵件內容
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("目標郵箱地址帶@後字段")); // 設置發送者
message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 設置發送方式與接收者
message.setSubject("用戶激活");
// message.setText("這是一封激活郵件,請<a href='#'>點擊</a>");
message.setContent(emailMsg, "text/html;charset=utf-8");
// 3.創建 Transport用於將郵件發送
Transport.send(message);
}
}
出現了這麼一個報錯信息:
javax.mail.AuthenticationFailedException
先上大佬鏈接:使用mail架包發送郵件javax.mail.AuthenticationFailedException: failed to connect at javax.mail.Service.connec
具體原因是沒有開啓POP3/SMTP/IMAP
服務,這個要在發送者郵箱開啓才能在第三方工具成功發送數據
成功發送注意目標郵箱可能當作垃圾郵件處理過濾了,我的QQ郵箱就是這樣蜜汁操作。
dao.addUser(user);
// 發送激活郵件
String emailMsg = "感謝您註冊網上書城,點擊"
+ "<a href='http://localhost:8080/itcaststore/activeUser?activeCode="
+ user.getActiveCode() + "'> 激活 </a>後使用。"
+ "<br />爲保障您的賬戶安全,請在24小時內完成激活操作";
MailUtils.sendMail(user.getEmail(), emailMsg);
在郵件內容的設置上是一段html代碼, 空格,<a> 超鏈接標籤,<br>換行,下面是郵件顯示效果。在郵箱內容上可以直接使用html代碼,突然發現csdn上面也可以,加了標籤字符都生效了。