<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{
// xxxxx@aaa.com
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", "生日输入格式错误!");
}