• Goods:注册页面保存User功能发送邮件以及激活功实现


    UserService

     1 // 激活功能更
     2     public void activation(String code) throws UserException {
     3         /*
     4          * 1通过激活码查询用户 2如果用户为Null说明是无效激活码 抛出异常 给出异常信息 3、查看用户状态为true
     5          */
     6 
     7         try {
     8             User user = userDao.findByCode(code);
     9             if (user == null)
    10                 throw new UserException("无效的激活码");
    11             if (user.isStatus())
    12                 throw new UserException("您已经激活过了,不能二次激活!");
    13             userDao.updateStatus(user.getUid(), true);
    14         } catch (SQLException e) {
    15             // TODO Auto-generated catch block
    16             throw new RuntimeException(e);
    17         }
    18     }
    19 
    20     // 注册功能
    21     public void regist(User user) {
    22         // 1、数据的补齐
    23         user.setUid(CommonUtils.uuid()); // commonUtils用来生成唯一的码
    24         user.setStatus(false);
    25         user.setActivationCode(CommonUtils.uuid() + CommonUtils.uuid());
    26         // 2、项数据库中插入
    27 
    28         try {
    29             userDao.add(user);
    30         } catch (SQLException e) {
    31             // TODO Auto-generated catch block
    32             e.printStackTrace();
    33         }
    34         /*
    35          * 3、发邮件
    36          */
    37         Properties prop = new Properties();
    38         // 加载配置文件
    39         try {
    40             prop.load(this.getClass().getClassLoader()
    41                     .getResourceAsStream("email_template.properties"));
    42         } catch (IOException e1) {
    43             throw new RuntimeException(e1);
    44         }
    45         // 登录邮件服务器得到session 发送mail对象
    46         String host = prop.getProperty("host");// 服务器主机名
    47         String username = prop.getProperty("username");// 登录名
    48         String password = prop.getProperty("password");
    49         Session session = MailUtils.createSession(host, username, password);
    50 
    51         // 创建mail对象
    52         String from = prop.getProperty("from");
    53         String to = user.getEmail();
    54         String subject = prop.getProperty("subject"); // 主题
    55         // messageformat用来替换占位符 pattern中的{0}{1}{2}占位符用第二个,第三个,第四个参数来替换
    56         String content = MessageFormat.format(prop.getProperty("content"),
    57                 user.getActivationCode());
    58 
    59         try {
    60             MailUtils.send(session, new Mail(from, to, subject, content));
    61         } catch (MessagingException e) {
    62             throw new RuntimeException(e);
    63         } catch (IOException e) {
    64             throw new RuntimeException(e);
    65         }
    66 
    67     }
    View Code

    UserDao

     1 /通过激活码查询用户
     2     public User findByCode(String code)
     3     {
     4         String sql="select * from t_user where activationCode=?";
     5         try {
     6             return qr.query(sql, new BeanHandler<User>(User.class),code);
     7         } catch (SQLException e) {
     8             // TODO Auto-generated catch block
     9             throw new RuntimeException(e);
    10         }
    11     }
    12     //更新激活状态
    13     public void updateStatus(String uid,boolean status) throws SQLException
    14     {
    15         String sql="update t_user set status=? where uid=?";
    16         qr.update(sql,status,uid);
    17         
    18     }
    View Code

    UserServlet

     1 // 注册功能
     2     public String regist(HttpServletRequest req, HttpServletResponse resp)
     3             throws ServletException, IOException {
     4         // 1、封装表单数据到user对象中
     5         User formUser = CommonUtils.toBean(req.getParameterMap(), User.class);
     6 
     7         // 2、校验 如果校验 失败 保存错误信息返回到regist页面显示
     8 
     9         /*
    10          * 调用validateRegist方法,检验Map是否为空 如果为空 则说明没有错误信息 否则
    11          * 则有错误新信息,把map保存到request中 转发到regist.jsp
    12          */
    13         Map<String,String> errors= validateRegist(formUser, req.getSession());
    14         if(errors.size()>0)
    15         {  //错误信息的时候 把表单数据带回去
    16             req.setAttribute("form", formUser);
    17            req.setAttribute("errors", errors);
    18         return "f:/jsps/user/regist.jsp";
    19         }
    20         // 3、使用service完成业务
    21         userService.regist(formUser);
    22 
    23         // 4、保存成功信息转发到msg.jsp显示
    24         req.setAttribute("code", "success");
    25         req.setAttribute("msg", "注册成功,请马上到邮箱激活");
    26         return "f:/jsps/msg.jsp"; // f代表转发 入request里面放有东西 BaseServlet实现的转发
    27     }
    28 
    29     // 完成注册校验功能  对表单的字段进行逐个校验
    30 
    31     private Map<String, String> validateRegist(User formUser,HttpSession session) {
    32         Map<String, String> errors = new HashMap<String, String>();
    33         // 校验用户名
    34         String loginname = formUser.getLoginname();
    35         if (loginname == null || loginname.trim() == null)
    36             errors.put("loginname", "用户名不能为空");
    37         else if (loginname.length() < 3 || loginname.length() > 20)
    38             errors.put("loginname", "用户名长度必须在3-20字符中");
    39         else if (!userService.ajaxValidateLoginname(loginname))
    40             errors.put("loginname", "用户名已被注册");
    41         // 校验登录密码
    42         String loginpass = formUser.getLoginpass();
    43         if (loginpass == null || loginpass.trim() == null)
    44             errors.put("loginpass", "密码不能为空");
    45         else if (loginpass.length() < 3 || loginpass.length() > 20)
    46             errors.put("loginpass", "密码长度必须在3-20字符中");
    47         // 确认密码校验
    48         String reloginpass = formUser.getReloginpass();
    49         if (reloginpass == null || reloginpass.trim() == null)
    50             errors.put("reloginpass", "密码不能为空");
    51         else if (reloginpass.length() < 3 || reloginpass.length() > 20)
    52             errors.put("reloginpass", "密码长度必须在3-20字符中");
    53         else if(!reloginpass.equals(loginpass))
    54             errors.put("reloginpass", ",两次输入密码不一致");
    55         
    56         //email校验
    57         String email = formUser.getEmail();
    58         if (email == null || email.trim() == null)
    59             errors.put("email", "email不能为空");
    60         else if (!email.matches("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$"))
    61             errors.put("email", "email格式不正确");
    62         else if (!userService.ajaxValidateEmail(email))
    63             errors.put("email", "email已被注册");
    64         
    65         //验证码校验
    66        String verifyCode=formUser.getVerifyCode();
    67        String vCode=(String) session.getAttribute("vCode");
    68        if (verifyCode == null || verifyCode.trim() == null)
    69             errors.put("verifyCode", "验证码不能为空");
    70         else if (!verifyCode.equalsIgnoreCase(vCode))
    71             errors.put("verifyCode", "验证码错误!");
    72        
    73         return errors;
    74         
    75 
    76     }
    77 
    78     // 激活功能
    79     public String activation(HttpServletRequest req, HttpServletResponse resp) {
    80         //System.out.println("activation");
    81         //1、获取激活码 
    82         //2、交给service 的 activation功能来激活
    83         //service方法可能跑出异常 把异常信息拿来保存到request中
    84         //转发到msg.jsp显示
    85         String code=req.getParameter("activationCode");
    86         try {
    87             userService.activation(code);
    88             req.setAttribute("code", "success");
    89             req.setAttribute("msg", "恭喜激活成功,请马上登录!");
    90         } catch (UserException e) {
    91             req.setAttribute("msg", e.getMessage());
    92             req.setAttribute("code", "error");
    93             
    94         }
    95         return "f:/jsps/msg.jsp";
    96     }
    97 }
    View Code

  • 相关阅读:
    后缀数组-另辟蹊径
    Project Euler 不定期更新
    Educational Codeforces Round 93 (Rated for Div. 2)
    Codeforces Round #664 (Div. 2)
    lower_bound和upper_bound的用法
    Codeforces Round #663 (Div. 2)
    Codeforces Round #661 (Div. 3)
    质数笔记
    C++运算符的优先级
    图的构建
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/4767767.html
Copyright © 2020-2023  润新知