<span style="font-family: Arial, Helvetica, sans-serif;">//1.对提交过来的表单进行验证 </span>
//1.对提交过来的表单进行验证 <span style="white-space:pre"> </span>request.setCharacterEncoding("UTF-8"); //设置编码 不设置的话 校验中文会因为乱码而失败 !! <span style="white-space:pre"> </span>FormBean formBean = WebUtils.request2Bean(request, FormBean.class); //将request参数存在bean中 <span style="white-space:pre"> </span>boolean b = formBean.validate(); //返回表单提交信息是否合法 主要判断的是表单是否符合格式 <span style="white-space:pre"> </span>if(!b){ <span style="white-space:pre"> </span>//验证失败 说明表单信息提交不合法 跳回表单界面 并提示信息 <span style="white-space:pre"> </span>request.setAttribute("form", formBean); <span style="white-space:pre"> </span>request.getRequestDispatcher("/WEB-INF/jsp/register.jsp").forward(request, response); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>else { <span style="white-space:pre"> </span>// 如果验证成功 则通过service进行注册处理 也就是判断用户名是否重复 不重复则注册入数据库 <span style="white-space:pre"> </span>BusinessServiceImpl businessServiceImpl = new BusinessServiceImpl(); <span style="white-space:pre"> </span>User user = new User(); <span style="white-space:pre"> </span>WebUtils.copyBean(formBean, user); //将表单信息 拷贝到user对象中 <span style="white-space:pre"> </span>user.setId(WebUtils.getOnlyId()); //获取唯一id值赋入 <span style="white-space:pre"> </span>try { <span style="white-space:pre"> </span>businessServiceImpl.register(user); //注册用户 如果注册失败 则会抛出异常 在下面捕获 <span style="white-space:pre"> </span>//5. 如果处理成功 则 跳转到一个页面 显示 注册成功 <span style="white-space:pre"> </span>request.setAttribute("message", "注册成功!"); <span style="white-space:pre"> </span>request.getRequestDispatcher("/message.jsp").forward(request, response); <span style="white-space:pre"> </span>} catch (ExistUserException e) { <span style="white-space:pre"> </span>//如果处理失败 跳转到 注册界面显示 用户已存在 <span style="white-space:pre"> </span>formBean.getErrors().put("username", "用户名已存在!"); <span style="white-space:pre"> </span>request.setAttribute("form", formBean); <span style="white-space:pre"> </span>request.getRequestDispatcher("/WEB-INF/jsp/register.jsp").forward(request, response); <span style="white-space:pre"> </span>}catch (Exception e) { <span style="white-space:pre"> </span>request.setAttribute("message", "出现其他未知错误!"); <span style="white-space:pre"> </span>request.getRequestDispatcher("/message.jsp").forward(request, response); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span> <span style="white-space:pre"> </span>}
2. 对表单信息的合法化校验:
public boolean validate(){ boolean isOk = true; //验证用户名是否是 6-8位 且全是字母或数字 if(this.username==null||this.username.trim().equals("")){ isOk = false; errors.put("username", "用户名不能为空!"); } else { if(!this.username.matches("[A-Za-z0-9]{3,8}")){ isOk=false; System.out.println("------->"+this.username+"---"+"密码空"); errors.put("username", "用户名输入不合法!"); } } //验证密码是否为6-8位 且为数字或字母 if(this.password==null||this.password.trim().equals("")){ isOk = false; System.out.println("------->"+this.password+"---"+"密码空"); errors.put("password", "密码不能为空!"); } else { if(!this.password.matches("[A-Za-z0-9]{3,8}")){ isOk=false; errors.put("password", "密码输入不合法!"); } } //验证确认密码是否与密码相同 if(this.password2==null||this.password2.trim().equals("")||!this.password.equals(this.password2)){ isOk = false; errors.put("password2", "确认密码错误!"); } //验证邮件格式 if(this.email==null||this.email.equals("")){ isOk = false; errors.put("email", "邮箱不能为空!"); } else{ // [email protected] if(!this.email.matches("\\w+@\\w+(\\.\\w+)+")){ isOk = false; errors.put("email", "邮箱格式错误!"); } } //验证日期格式 if(this.birthday==null||this.birthday.trim().equals("")){ isOk = false; //验证日期的方法 try { DateLocaleConverter date = new DateLocaleConverter(); date.convert(this.birthday, "yyyy-MM-dd"); } catch (Exception e) { isOk = false; errors.put("birthday", "生日输入格式错误!"); } } //验证昵称 必须为中文 if(this.nickname==null||this.nickname.equals("")){ isOk = false; errors.put("nickname", "昵称不能为空!"); } else{ // 中文 if(!this.nickname.matches("[\u4e00-\u9fa5]+")){ isOk = false; errors.put("nickname", "昵称必须为中文!"); } } return isOk; }上述中 用了正则表达式 汉字unicode范围为
\u4e00-\u9fa5
//验证日期的方法 由于SimpleDateFormat 方法无法判断 类似 1995-12-35 这样的日期 所以要试用下述方法 try { DateLocaleConverter date = new DateLocaleConverter(); date.convert(this.birthday, "yyyy-MM-dd"); } catch (Exception e) { isOk = false; errors.put("birthday", "生日输入格式错误!"); }