首页 > 代码库 > estore商城案例(一)------用户注册&邮件激活(下)
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();//存储字符串,创建session14 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 //session28 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 }
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 }
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 }
插入数据的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 }
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 @Override16 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 @Override24 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 @Override32 public boolean regist(User u)33 {34 //insert into users35 u.setActivecode(UUID.randomUUID().toString().replace("-", ""));36 if(dao.add(u))37 {38 //System.out.println("添加成功!!!");39 40 //send a mail41 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 //session47 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://www.mamicode.com/‘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 @Override69 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 else82 {83 dao.updateState(u);84 return true;85 86 }87 }88 }89 }
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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。