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

来源:互联网 发布:网络招商怎么精准找到 编辑:程序博客网 时间:2024/05/17 08:33
    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);}