- 注册页面的服务器检验的思路
- 客户端表单的本地校验通过之后,客户端发起UserServlet#regiest()方法
- 在web.servlet层添加一个regiest()方法
regiest要完成的功能为
- 封装表单数据到user
- 对数据进行服务器校验,调用ValidateRegiest()方法
- ValidateRegiest()方法的作用为将用户从客户端的传过来的数据,再放到servlet层进行非空校验、服务器校验等等
- 如果ValidateRegiest()通过了,则说明校验通过,调用service层的regist()方法,跳转到成功界面,否则,则返回错误信息
- service层regiest()方法的作用为补全表单中的数据,调用dao层的add()方法,然后发送激活邮件
- dao层的add()方法,将user表中的内容添加到数据库
- web.servlet层的
rigiest()方法的主要思路
- 封装表单数据到实体类user
- 对数据进行服务器校验,调用validateregiest()方法
- 如果校验成功,调用service层的regiest()方法,保存注册信息,并转发到msg,jsp页面
- 如果校验失败,则将错误信息转发到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层
- 补全表单中没有的信息,例如uid、stutue等等
- 调用dao层的add方法,将user传过去
- 发送邮件
- 加载配置文件
- 获取配置文件的内容
- 发送邮件
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层
- 添加一个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); }
注册页面的服务器校验和登录
最新推荐文章于 2024-07-10 17:09:58 发布