下面我们来做邮件激活功能
提示邮箱需要登录才能进行账号激活
保证用户填写的邮箱是正确的,可以推广宣传信息到邮箱中
下面分成两部分来做:
第一部分:发送邮件
这个功能就是通过工具类来进行实现的,直接从网上copy的代码
MailUtils.java
package util;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
/**
* 发邮件工具类
*/
public final class MailUtils {
private static final String USER = ""; // 发件人称号,同邮箱地址
private static final String PASSWORD = ""; // 如果是qq邮箱可以使户端授权码,或者登录密码
/**
*
* @param to 收件人邮箱
* @param text 邮件正文
* @param title 标题
*/
/* 发送验证信息的邮件 */
public static boolean sendMail(String to, String text, String title){
try {
final Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
// 发件人的账号
props.put("mail.user", USER);
//发件人的密码
props.put("mail.password", PASSWORD);
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
String username = props.getProperty("mail.user");
InternetAddress form = new InternetAddress(username);
message.setFrom(form);
// 设置收件人
InternetAddress toAddress = new InternetAddress(to);
message.setRecipient(Message.RecipientType.TO, toAddress);
// 设置邮件标题
message.setSubject(title);
// 设置邮件的内容体
message.setContent(text, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
return true;
}catch (Exception e){
e.printStackTrace();
}
return false;
}
public static void main(String[] args) throws Exception { // 做测试用
MailUtils.sendMail("itcast_xian@163.com","你好,这是一封测试邮件,无需回复。","测试邮件");
System.out.println("发送成功");
}
}
测试一下自动发送邮件
需要修改文件中几个地方
注意你的发送邮箱一定要把第三方客户端登录打开
第二部分:用户点击邮件激活
第一步:先来说发送邮件到邮箱里面
在什么位置发送邮件?肯定是在你注册保存用户信息之后发送邮件。
在UserServiceImpl里面
在我们设置邮件信息的时候,它本身就是在MailUtils里面设置好的text文本是html类型,所以,我们可以直接在里面弄上html标签
但是我们在写这个邮件内容的时候,注意到一个问题,假如就直接如下这样写
那么多用户,服务器怎么会知道过来的是哪一个用户?
所以我们就要用到User对象里面的code激活码字段信息,也就是每次发送邮件的时候,给用户发送一个独有的激活码
那么现在又会有一个问题,唯一激活码从哪里来?那么这里也做好了,如下
所以这个链接应该进行如下的拼接
既然传递了用户的激活码,那么在保存用户信息的时候,之前如下两个信息,我们没有添加进去
所以当拿到一个用户之后,我们先把激活码与唯一的一个code标识给标记上
然后再去修改dao层的save方法,改变数据插入,增加code与status这两个字段,一定要与数据库里面的字段一一匹配
这样才能把所有的用户信息全部插入进去,注意把相应的占位符?给添加上。
运行
下面我们就去做点击邮件然后实现激活功能
首先创建一个ActiveUserServlet页面,
在我们做到这一步的时候,有一个问题
其中涉及到一个方法是通过codeString来查找用户,我在想要不要写到service里面,然后在dao层实现。但是一想service层里面涉及的方法,都是带有主体功能的方法,比如regist方法,后面的login方法。所以这个通过codeString查找用户这个直接做到dao层里面,然后在actice方法中调用就行。
现在去实现 service里面的active方法
然后去Dao实现这个方法的主体
然后再去看UserService里面的方法
然后实现dao层里面的方法
然后再去修改ActiveUserServlet方法
现在去数据库里面查看一下数据
刚刚做邮件验证的时候我发现code从页面上传输与数据库存的不一样,所以一直提示是注册失败,原因在于如下
修改
重新启动一下服务器
然后点击登录,进入一个login.html页面
下面来做登录功能
登录功能分析
先来做LoginServlet页面
上面就是判断验证码,还是那句话,验证码一旦出错,程序直接over
接着去service里面实现login登录方法
再去dao层实现findByUsernameAndPassword()
再去返回处理servlet层
做一些常规判断,然后把数据返回
然后回到我们的login.html进行处理
先给登录按钮加一个id
现在测试一下,验证码输入正确,用户名与密码输入错误
验证码就不试了,自行测试吧
我们现在测试一下能否登录成功这样一种环境,先去数据库看一下用户名和密码
这个登录成功就直接跳转到首页了啊
下面来做一个姓名提示功能
先去看一下index.html首页
这里相当于是引入了一个头部的html文件
上面加载的就是header.html文件,我们直接去看header.html文件
姓名追踪功能分析:
第一步:修改这个位置
加一个id,然后删除信息,等会直接通过jquery来赋值
等header.html加载完成之后,直接进行一个ajax请求
下面我们要去实现FindUserServlet这部分的页面代码
测试一下,重新登录
如果你重新启动了服务器,然后再次进入还没有变化的话,可能就是浏览器加了缓存,重新换个浏览器就能看到效果。
下面来做退出功能
第一步:
给一个重定位,直接访问一个退出的servlet页面
下面我们去编写exitServlet这个页面
第二部分都是涉及到用户的行为模块,所以就先写到这