【JAVA EE#3】【傳智書城·源碼閱讀】註冊模塊:註冊激活流程+javax.mail郵件發送+BeanUtils封裝

註冊激活流程:
在這裏插入圖片描述
爲了驗證用戶註冊郵箱的真實性,在頁面完成註冊操作後賬號默認未激活,需要在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.jar24kb的版本,並不是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() + "'>&nbsp;激活&nbsp;</a>後使用。"
							+ "<br />爲保障您的賬戶安全,請在24小時內完成激活操作";
			MailUtils.sendMail(user.getEmail(), emailMsg);

在郵件內容的設置上是一段html代碼,&nbsp空格,<a> 超鏈接標籤,<br>換行,下面是郵件顯示效果。在郵箱內容上可以直接使用html代碼,突然發現csdn上面也可以,加了標籤字符都生效了。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章