• javaee之黑马旅游网2


    下面我们来做邮件激活功能

    提示邮箱需要登录才能进行账号激活

    保证用户填写的邮箱是正确的,可以推广宣传信息到邮箱中

    下面分成两部分来做:

    第一部分:发送邮件

    这个功能就是通过工具类来进行实现的,直接从网上copy的代码

    MailUtils.java

    1. package util;
    2. import javax.mail.*;
    3. import javax.mail.internet.InternetAddress;
    4. import javax.mail.internet.MimeMessage;
    5. import java.util.Properties;
    6. /**
    7. * 发邮件工具类
    8. */
    9. public final class MailUtils {
    10. private static final String USER = ""; // 发件人称号,同邮箱地址
    11. private static final String PASSWORD = ""; // 如果是qq邮箱可以使户端授权码,或者登录密码
    12. /**
    13. *
    14. * @param to 收件人邮箱
    15. * @param text 邮件正文
    16. * @param title 标题
    17. */
    18. /* 发送验证信息的邮件 */
    19. public static boolean sendMail(String to, String text, String title){
    20. try {
    21. final Properties props = new Properties();
    22. props.put("mail.smtp.auth", "true");
    23. props.put("mail.smtp.host", "smtp.qq.com");
    24. // 发件人的账号
    25. props.put("mail.user", USER);
    26. //发件人的密码
    27. props.put("mail.password", PASSWORD);
    28. // 构建授权信息,用于进行SMTP进行身份验证
    29. Authenticator authenticator = new Authenticator() {
    30. @Override
    31. protected PasswordAuthentication getPasswordAuthentication() {
    32. // 用户名、密码
    33. String userName = props.getProperty("mail.user");
    34. String password = props.getProperty("mail.password");
    35. return new PasswordAuthentication(userName, password);
    36. }
    37. };
    38. // 使用环境属性和授权信息,创建邮件会话
    39. Session mailSession = Session.getInstance(props, authenticator);
    40. // 创建邮件消息
    41. MimeMessage message = new MimeMessage(mailSession);
    42. // 设置发件人
    43. String username = props.getProperty("mail.user");
    44. InternetAddress form = new InternetAddress(username);
    45. message.setFrom(form);
    46. // 设置收件人
    47. InternetAddress toAddress = new InternetAddress(to);
    48. message.setRecipient(Message.RecipientType.TO, toAddress);
    49. // 设置邮件标题
    50. message.setSubject(title);
    51. // 设置邮件的内容体
    52. message.setContent(text, "text/html;charset=UTF-8");
    53. // 发送邮件
    54. Transport.send(message);
    55. return true;
    56. }catch (Exception e){
    57. e.printStackTrace();
    58. }
    59. return false;
    60. }
    61. public static void main(String[] args) throws Exception { // 做测试用
    62. MailUtils.sendMail("itcast_xian@163.com","你好,这是一封测试邮件,无需回复。","测试邮件");
    63. System.out.println("发送成功");
    64. }
    65. }

     测试一下自动发送邮件

    需要修改文件中几个地方

    注意你的发送邮箱一定要把第三方客户端登录打开 

    第二部分:用户点击邮件激活

    第一步:先来说发送邮件到邮箱里面

    在什么位置发送邮件?肯定是在你注册保存用户信息之后发送邮件。

    在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这个页面

            

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

     

     

     

     

     

  • 相关阅读:
    简单聊聊 Kafka
    C++数据结构X篇_11_C++栈的应用-后缀表达式求解
    OSPFv2特殊区域---Stub区域
    1. 爬虫之Beautifulsoup解析库&在线解析图片验证码
    matlab问题求解答
    如何优雅的设计权限系统才算yyds?(荣耀典藏版)
    二叉树及其相关题目相关的功能的实现
    《SpringBoot 手册》:国际化组件 MessageSource
    网络协议 — LLDP 数据链路发现协议
    【C++】一篇了解AVL实现细节(易懂图解版)
  • 原文地址:https://blog.csdn.net/Pxx520Tangtian/article/details/128176405