下面我们来做邮件激活功能
提示邮箱需要登录才能进行账号激活
保证用户填写的邮箱是正确的,可以推广宣传信息到邮箱中
下面分成两部分来做:
第一部分:发送邮件
这个功能就是通过工具类来进行实现的,直接从网上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() {@Overrideprotected 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这个页面

第二部分都是涉及到用户的行为模块,所以就先写到这