• estore商城案例(一)------用户注册&邮件激活(下)


    先补上昨天注册页面的验证码代码:

     1 public void doGet(HttpServletRequest request, HttpServletResponse response)
     2             throws ServletException, IOException {
     3         BufferedImage bf=new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
     4         Graphics2D graphice=(Graphics2D) bf.getGraphics();
     5         graphice.setColor(Color.WHITE);
     6         graphice.fillRect(0, 0, WIDTH, HEIGHT);
     7         graphice.setColor(Color.BLUE);
     8         graphice.drawRect(0, 0, WIDTH-1, HEIGHT-1);
     9             String base="abcdefghijklmnopqrstuvwxyz";
    10         Random rand=new Random();
    11         graphice.setColor(Color.RED);
    12         graphice.setFont(new Font("微软雅黑",Font.BOLD,20));
    13         StringBuilder sb=new StringBuilder();//存储字符串,创建session
    14         int m=13;
    15         for(int i=0;i<4;i++)
    16         {
    17             int index=rand.nextInt(base.length());
    18             char charAt=base.charAt(index);
    19             sb.append(charAt);
    20             int angle=rand.nextInt(60)-30;
    21             double theta=angle*Math.PI/180;
    22             graphice.rotate(theta,m,20);
    23             graphice.drawString(charAt+"",m,20);
    24             graphice.rotate(-theta,m,20);
    25             m+=20;
    26         }
    27         //session
    28         request.getSession().setAttribute("vCode",sb.toString());//创建session  
    29         //干扰线
    30         graphice.setColor(Color.GREEN);
    31         for(int i=0;i<4;i++)
    32         {
    33             int x1=rand.nextInt(WIDTH);
    34             int x2=rand.nextInt(WIDTH);
    35             int y1=rand.nextInt(HEIGHT);
    36             int y2=rand.nextInt(HEIGHT);
    37             graphice.drawLine(x1, y1, x2, y2);
    38         }
    39         graphice.dispose();
    40         ImageIO.write(bf, "png", response.getOutputStream());
    41     }
    View Code

    ajax提交的用户名、邮箱、验证码在servlet程序中的处理代码:

     1 public void doGet(HttpServletRequest request, HttpServletResponse response)
     2             throws ServletException, IOException {
     3         String username=request.getParameter("username");
     4         String email=request.getParameter("email");
     5         String validatecode=request.getParameter("validatecode");
     6         User u=new User();
     7         if(!"".equals(username)&&username!=null)
     8         {
     9             UserService userService=new UserServiceImpl();
    10             //用户名验证请求
    11             u.setUsername(username);
    12             response.getWriter().print(    userService.checkUsername(u));
    13             return;
    14         }
    15         if(!"".equals(email)&&email!=null)
    16         {
    17             UserService userService=new UserServiceImpl();
    18             //邮箱验证请求
    19             u.setEmail(email);
    20             response.getWriter().print(    userService.checkEmail(u));
    21             return;
    22         }
    23         if(!"".equals(validatecode)&&validatecode!=null)
    24         {
    25             String session = (String) request.getSession().getAttribute("vCode");
    26 
    27             response.getWriter().print(validatecode.equalsIgnoreCase(session));
    28             return;
    29         }
    30         request.getRequestDispatcher("/regist.jsp").forward(request, response);
    31     }
    View Code

    2、验证所form表单数据后,开始提交数据到servlet程序,进行注册,把数据插入到数据库中,设置新用户的状态为0,然后判断数据插入是否成功,插入成功后,开始发送激活邮件到用户的邮箱中。

     1 public void doPost(HttpServletRequest request, HttpServletResponse response)
     2             throws ServletException, IOException {
     3         User u=new User();
     4         BeanUtils bean=new BeanUtils();
     5         try {
     6             //完成注册
     7             bean.populate(u, request.getParameterMap());//beanutils把参数绑定到user实体对象中
     8             UserService userService=new UserServiceImpl();
     9             boolean b=userService.regist(u);
    10             if(b){
    11                 request.setAttribute("msg", "请先到邮箱中激活注册,在登陆.");
    12                 request.getRequestDispatcher("/message.jsp").forward(request, response);
    13             }
    14             
    15         } catch (Exception e) {
    16             
    17             e.printStackTrace();
    18             throw new MyRuntimeException(e);
    19         } 
    20     }
    21 
    22 }
    View Code

    插入数据的service:

    1 public interface UserService {
    2     public boolean checkEmail(User u);
    3     public boolean checkUsername(User u);
    4     public boolean regist(User u);
    5     public boolean active(String code);
    6     public User loginUser(User u);
    7 }
    View Code
     1 public class UserServiceImpl implements UserService {
     2     private static UserDao dao=DaoFactory.getInstance().createDao(UserDao.class);
     3     //登录
     4     @Override
     5     public User loginUser(User u) {
     6         u=dao.loginByUser(u);
     7         if(u!=null&&u.getState()==0)
     8         {
     9             throw new MyRuntimeException("你的账户还未激活!!!!!");
    10         }
    11         return u;
    12         
    13     }
    14     //邮箱在数据库中是否存在
    15     @Override
    16     public boolean checkEmail(User u) {
    17         u = dao.queryUser("email", u.getEmail());
    18         if(u==null)
    19         {return true;}
    20         return false;
    21     }
    22     //用户名是否在数据库中存在
    23     @Override
    24     public boolean checkUsername(User u) {
    25         u = dao.queryUser("username", u.getUsername());
    26         if(u==null)
    27         {return true;}
    28         return false;
    29     }
    30     //注册用户
    31     @Override
    32     public boolean regist(User u)
    33     {
    34         //insert into users
    35         u.setActivecode(UUID.randomUUID().toString().replace("-", ""));
    36         if(dao.add(u))
    37         {
    38             //System.out.println("添加成功!!!");
    39         
    40         //send a mail
    41         Properties props=new Properties();
    42         props.put("mail.transport.protocol","smtp");
    43         props.put("mail,smtp.host", "localhost");
    44         props.put("mail,smtp.auth", "true");
    45         props.put("mail.debug","true");
    46         //session
    47         Session session=Session.getDefaultInstance(props);
    48         //构建一封邮件
    49         try {
    50             MimeMessage message=new MimeMessage(session);
    51             message.setFrom(new InternetAddress("service@estore.com"));
    52             message.setRecipient(RecipientType.TO, new InternetAddress(u.getEmail()));
    53             message.setSubject("estore商城激活邮件");
    54             message.setContent("<a href='http://localhost/myestore/active?activecode="+u.getActivecode()+"'>请点击激活:http://localhost/myestore/active?activecode="+u.getActivecode()+"</a>","text/html;charset=utf-8");
    55             //发送
    56             Transport trans=session.getTransport();
    57             trans.connect("service","123");
    58             trans.sendMessage(message, message.getAllRecipients());
    59             return true;
    60         } catch (Exception e) {
    61             e.printStackTrace();
    62             throw new MyRuntimeException("激活邮件发送 失败");
    63         }
    64         }
    65         return false;//注册失败
    66     }
    67     //验证激活码
    68     @Override
    69     public boolean active(String code) {
    70         User u=dao.queryUser("activecode", code);
    71         if(u==null)
    72         {
    73             throw new MyRuntimeException("激活码无效");
    74         }else{
    75             if((System.currentTimeMillis()-u.getRegisttime().getTime())>1000L*60*60*24)
    76             {
    77                 //激活码超时24小时
    78                 dao.deleteByActivecode(u);
    79                 return false;
    80             }
    81             else
    82             {
    83                 dao.updateState(u);
    84                 return true;
    85                 
    86             }
    87         }
    88     }
    89 }
    View Code

    3、我本地使用的是EyouMail服务器,下面说一下怎么使用和配置:

    如果在没有网络的情况下,可以在邮件eyoumail中随便注册一个账号,用于注册账户接收激活邮件使用,但是在接收邮件时有些注意点,这里我用aaa这个账户为例。service邮箱在给aaa邮箱发送激活邮件时,我们要想接收到这个激活邮件可以再邮件客户端软件配置一下,这里以foxmail为例:

    因为是本地网络,而非互联网,所以在配置POP、SMTP时必须写localhost。这样便可顺利接收激活邮件了。

    用户登录邮件点击激活后,servler对用户的请求进行处理,去激活用户,改变用户状态为1可用状态。

     1     public void doGet(HttpServletRequest request, HttpServletResponse response)
     2             throws ServletException, IOException {
     3         String code=request.getParameter("activecode");
     4         UserService userService=new UserServiceImpl();
     5         if(!"".equals(code)&&code!=null)
     6         {
     7             
     8             if(userService.active(code))
     9             {
    10                 response.sendRedirect(request.getContextPath()+"/login.jsp");
    11                 return;
    12             }
    13         }
    14         response.sendRedirect(request.getContextPath()+"/login.jsp");
    15     }
    View Code
  • 相关阅读:
    SPOJ-BRCKTS (括号序列,线段树)
    bzoj 2223 [Coci 2009]PATULJCI
    bzoj 1049 [HAOI2006]数字序列
    bzoj2091 [Poi2010]The Minima Game
    bzoj 1016 [JSOI2008]最小生成树计数
    bzoj5105 晨跑 数论lcm
    bzoj 1211 [HNOI2004]树的计数
    bzoj 1430 小猴打架 prufer 性质
    Swing界面组件的通用属性
    数字调节控件JSpinner的使用
  • 原文地址:https://www.cnblogs.com/cmds/p/3901626.html
Copyright © 2020-2023  润新知