注册页面的服务器校验和登录

    1. 注册页面的服务器检验的思路
    1. 客户端表单的本地校验通过之后,客户端发起UserServlet#regiest()方法
    2. 在web.servlet层添加一个regiest()方法

    regiest要完成的功能为

    1. 封装表单数据到user
    2. 对数据进行服务器校验,调用ValidateRegiest()方法
    3. ValidateRegiest()方法的作用为将用户从客户端的传过来的数据,再放到servlet层进行非空校验、服务器校验等等
    4. 如果ValidateRegiest()通过了,则说明校验通过,调用service层的regist()方法,跳转到成功界面,否则,则返回错误信息
    1. service层regiest()方法的作用为补全表单中的数据,调用dao层的add()方法,然后发送激活邮件
    2. dao层的add()方法,将user表中的内容添加到数据库
    1. web.servlet层的

    rigiest()方法的主要思路

    1. 封装表单数据到实体类user
    2. 对数据进行服务器校验,调用validateregiest()方法
    3. 如果校验成功,调用service层的regiest()方法,保存注册信息,并转发到msg,jsp页面
    4. 如果校验失败,则将错误信息转发到regiest.jsp页面

     

    UserServlet.java

    	public String regist(HttpServletRequest request, HttpServletResponse response)
    	        throws ServletException, IOException, SQLException {
    	        System.out.println("regist...");
    	        /*
    	         *封装表单数据到user 
    	         */
    	        User user=CommonUtils.toBean(request.getParameterMap(), User.class);
    	        
    	        /*
    	         * 对数据进行服务器校验
    	         */
    	        Map<String,String> error=ValidateRegist(user,request);
    	        if(error!=null && error.size()>0){
    	                request.setAttribute("error", error);
    	                request.setAttribute("user", user);
    	                return "f:jsps/user/regist.jsp";
    	        }
    	        
    	        /*
    	         * 调用注册界面注册
    	         */
    	        userService.regist(user);
    	        /*
    	         * 保存注册信息,转发到msg.jsp
    	         */
    	        request.setAttribute("code", "success");
    	        request.setAttribute("msg", "恭喜你注册成功!请马上前往邮箱激活!");
    	        return "f:jsps/msg.jsp";
    	}
    	
    	private Map<String, String> ValidateRegist(User user, HttpServletRequest request) throws SQLException {
    	        // TODO Auto-generated method stub
    	        Map<String,String> error=new HashMap<String, String>();
    	        /*
    	         * 用户名校验 
    	         */
    	        String loginname=user.getLoginname();
    	        if(loginname==null || loginname.isEmpty()){
    	                error.put("loginname", "用户名不能为空");
    	        }else if(loginname.length()<3 || loginname.length()>10){
    	                error.put("loginname", "用户名长度不在3-10字符之间");
    	        }else if(userService.ajaxValidateLoginname(loginname)){
    	                error.put("loginname", "用户名已被注册");
    	        }
    	        
    	        
    	        /*
    	         * 用户密码校验 
    	         */
    	        String loginpass=user.getLoginpass();
    	        if(loginpass==null || loginpass.isEmpty()){
    	                error.put("loginpass", "用户名不能为空");
    	        }else if(loginpass.length()<3 || loginpass.length()>10){
    	                error.put("loginpass", "用户名长度不在3-10字符之间");
    	        }
    	        
    	        /*
    	         * 用户确认密码校验
    	         */
    	        String reloginpass=user.getReloginpass();
    	        if(reloginpass==null || loginpass.isEmpty()){
    	                error.put("reloginpass", "用户名不能为空");
    	        }else if(!reloginpass.equals(loginpass)){
    	                error.put("reloginpass", "两次密码不同");
    	        }
    	        
    	        /*
    	         * 用户名校验 
    	         */
    	        String email=user.getEmail();
    	        if(email==null || email.isEmpty()){
    	                error.put("email", "邮箱不能为空");
    	        }else if(!email.matches("^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\\.[a-zA-Z0-9_-]{2,3}){1,2})$")){
    	                error.put("email", "邮箱格式不正确");
    	        }else if(userService.ajaxValidateEmail(email)){
    	                error.put("email", "邮箱已被注册");
    	        }
    	        
    	        /*
    	         * 验证码校验 
    	         */
    	        String verifycode=user.getVerifycode();
    	//		String vCode=(String) request.getSession().getAttribute("vCode");
    	//		System.out.println(vCode);
    	//		String verifyCode=request.getParameter("verifyCode");
    	//		System.out.println(verifyCode);
    	//		boolean flag=verifyCode.equalsIgnoreCase(vCode);
    	        String vCode= (String) request.getSession().getAttribute("vCode");
    	        String verifyCode=request.getParameter("verifyCode");
    	        boolean flag=vCode.equalsIgnoreCase(verifyCode);
    	        if(verifycode==null || verifycode.isEmpty()){
    	                error.put("verifycode", "验证码不能为空");
    	        }else if(!flag){
    	                error.put("email", "验证码已被注册");
    	        }
    	        return error;
    	        }
    	
    


     

    3.servie层

    1. 补全表单中没有的信息,例如uid、stutue等等
    2. 调用dao层的add方法,将user传过去
    3. 发送邮件
      1. 加载配置文件
      2. 获取配置文件的内容
      3. 发送邮件

    UserService.java

    	public void regist(User user) {
    	        //uid,name,password,email,statue,activecode
    	        try{
    	                /*
    	                 * 1.补全信息
    	                 */
    	                user.setUid(CommonUtils.uuid());
    	                user.setStatus(false);
    	                user.setActivationCode(CommonUtils.uuid()+CommonUtils.uuid());
    	                
    	                /*
    	                 * 调用dao方法,添加用户
    	                 */
    	                try {
    	                        userDao.add(user);
    	                } catch (SQLException e) {
    	                        // TODO Auto-generated catch block
    	                        e.printStackTrace();
    	                }
    	                
    	                /*
    	                 * 发送邮件
    	                 */
    	                
    	                Properties properties=new Properties();
    	                properties.load(this.getClass().getClassLoader().getResourceAsStream("email_template.properties"));
    	                String host=properties.getProperty("host");
    	                String username=properties.getProperty("username");
    	                String password=properties.getProperty("password");
    	                String from=properties.getProperty("from");
    	                String to=user.getEmail();
    	                String subject=properties.getProperty("subject");
    	                String content=MessageFormat.format(properties.getProperty("content"), 
    	                        user.getActivationCode());
    	                Session session=MailUtils.createSession(host, username, password);
    	                Mail mail=new Mail(from, to, subject, content);
    	                MailUtils.send(session, mail);
    	        }catch(Exception e){
    	                throw new RuntimeException(e);
    	        }
    	        
    	}
    


     

    4.dao层

    1. 添加一个add方法

    UserDao.java

    	
    	/**
    	 * 添加用户
    	 * @param user
    	 * @throws SQLException
    	 */
    	public void add(User user) throws SQLException{
    	        
    	        
    	        //uid,name,password,email,statue,activecode
    	        String sql="insert into t_user values(?,?,?,?,?,?)";
    	        Object[] params={user.getUid(),user.getLoginname(),user.getLoginpass(),
    	                user.getEmail(),user.isStatus(),user.getActivationCode()};
    	        query.update(sql, params);
    	}
    


     

     

     

     

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值