【JAVA EE#3】【传智书城·源码阅读】注册模块:注册激活流程+javax.mail邮件发送+BeanUtils封装

注册激活流程:
【JAVA EE#3】【传智书城·源码阅读】注册模块:注册激活流程+javax.mail邮件发送+BeanUtils封装_第1张图片
为了验证用户注册邮箱的真实性,在页面完成注册操作后账号默认未激活,需要在24小时内访问邮件内的地址激活该账号状态。上图描述了具体操作逻辑。

讲一讲一些有意思的东西,那些奇怪有需要注意的地方:
【JAVA EE#3】【传智书城·源码阅读】注册模块:注册激活流程+javax.mail邮件发送+BeanUtils封装_第2张图片
突如其来的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
【JAVA EE#3】【传智书城·源码阅读】注册模块:注册激活流程+javax.mail邮件发送+BeanUtils封装_第3张图片
项目中这样使用:

// 将表单提交的数据封装到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("这是一封激活邮件,请点击");
		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服务,这个要在发送者邮箱开启才能在第三方工具成功发送数据
【JAVA EE#3】【传智书城·源码阅读】注册模块:注册激活流程+javax.mail邮件发送+BeanUtils封装_第4张图片
【JAVA EE#3】【传智书城·源码阅读】注册模块:注册激活流程+javax.mail邮件发送+BeanUtils封装_第5张图片
成功发送注意目标邮箱可能当作垃圾邮件处理过滤了,我的QQ邮箱就是这样蜜汁操作。

dao.addUser(user);
			// 发送激活邮件
			String emailMsg = "感谢您注册网上书城,点击"
					+ " 激活 后使用。"
							+ "
为保障您的账户安全,请在24小时内完成激活操作"
; MailUtils.sendMail(user.getEmail(), emailMsg);

在邮件内容的设置上是一段html代码, 空格, 超链接标签,
换行,下面是邮件显示效果。在邮箱内容上可以直接使用html代码,突然发现csdn上面也可以,加了标签字符都生效了。
【JAVA EE#3】【传智书城·源码阅读】注册模块:注册激活流程+javax.mail邮件发送+BeanUtils封装_第6张图片

你可能感兴趣的:(java,web)