JavaWeb学习笔记十二:jQuery插件Validate校验功能、字符串转Date功能、邮箱验证码功能

1. JavaWeb学习笔记十二:jQuery插件Validate校验功能、字符串转Date功能、邮箱验证码功能

1.1. JQuery插件Validate校验功能
  1. 通过绑定jsp的form表单,根据每一个输入项的name值进行校验。
  2. 校验包含校验规则和提示信息即:rules和message。
  3. rule校验规则具体内容请参考文档校验规则
$(function(){
		$("#myform").validate({
			rules:{
				"username":{
					"required":true,
					"checkUsername":true
				},
				"password":{
					"required":true,
					"rangelength":[6,12]
				},
				"repassword":{
					"required":true,
					"rangelength":[6,12],
					"equalTo":"#password"
				},
				"email":{
					"required":true,
					"email":true
				},
				"sex":{
					"required":true
				}
			},
			messages:{
				"username":{
					"required":"用户名不能为空",
					"checkUsername":"用户名已存在"
				},
				"password":{
					"required":"密码不能为空",
					"rangelength":"密码长度6-12位"
				},
				"repassword":{
					"required":"密码不能为空",
					"rangelength":"密码长度6-12位",
					"equalTo":"两次密码不一致"
				},
				"email":{
					"required":"邮箱不能为空",
					"email":"邮箱格式不正确"
				}
			}
		});
	});
  1. 还可以自定义校验规则
addMethod:name, method, message
  • 自定义校验规则首先要在校验中定义
"username":{
    "required":true,
    "checkUsername":true//此处是定义的自定义校验
},
  • 再通过addMethod方法写一个校验函数
//自定义校验规则
$.validator.addMethod(
    //规则的名称
    "checkUsername",
    //校验的函数
    function(value,element,params){
        //定义一个标志
        var flag = false;
        //value:输入的内容
        //element:被校验的元素对象
        //params:规则对应的参数值
        //目的:对输入的username进行ajax校验
        $.ajax({
            "async":false,//是否异步,否
            "url":"${pageContext.request.contextPath}/checkUsername",
            "data":{"username":value},
            "type":"POST",
            "dataType":"json",
            "success":function(data){
                flag = data.isExist;
            }
        });
        //返回false代表该校验器不通过
        return !flag;
    }	
);
  • addMethod(name,method,message)包含三个参数,这里面只有两个,因为另一个再上面里的message里写了。
  • 第一步name参数,首先要定义规则名字
  • 第二步method方法,这里用的是function(value,element,params)
  1. ajax校验的后台操作web层
String username=request.getParameter("username");
UserService service=new UserService();
boolean isExist=service.checkUsername(username);
String json="{\"isExist\":"+isExist+"}";
response.getWriter().write(json);
  • 首先获取参数,然后调用service层处理,对返回的值进行json格式封装(string)。
  1. 数据库操作,注意ScalarHandler的返回类型。
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
String sql="select count(*) from user where username=?";
Long query=(Long) runner.query(sql, new ScalarHandler(),username);
return query;
1.2. jsp总的不可见元素设置
<label class="error" for="sex" style="display:none ">您没有第三种选择</label>
  • display:none表示不显示
1.3. 对具有格式的String字符转成Date
  1. 为什么要转成Date
  • web层从form表单获取的都是字符串,当封装到对象时,有的对象类型却不是字符串,只能将字符串转成对应的类型再封装,对于int类型的字符串可以先用Integer包装类包装在转换,对于Date类型的字符串可以用下面方法。
try {
    //自己指定一个类型转换器(将String转成Date)
    ConvertUtils.register(new Converter() {
        @Override
        public Object convert(Class clazz, Object value) {
            //将string转成date
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            Date parse = null;
            try {
                parse = format.parse(value.toString());
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return parse;
        }
    }, Date.class);
    //映射封装
    BeanUtils.populate(user, properties);
    } catch (IllegalAccessException | InvocationTargetException e) {
        e.printStackTrace();
    }
}
  • 这个ConvertUtils类属于commons-beanUtils工具包里的类,里面是一个匿名内部类,通过此方法将获取的请求参数能转化为Date类的转成Date类型详解看此文章
  • register(Converter接口,目标类型),用匿名类实现接口,将接收到的参数转化为目标类型。
  • 大家要注意这个问题,上面是Override方法重写,可见populate在封装的时候是可以调用这个方法的,但是这个方法无法直接进行String–>Date类型的封装,那么就只好重写它的方法了。参考此文章
1.4. servlet发送激活邮件实现
  1. 业务流程
  • 当客户注册后,服务器需要发送一个激活邮件,让用户激活
  • 发送邮件的内容是用户注册时后台通过UUID获取的激活码,就是get提交方式的链接+激活码
  • 用户点击邮件里的链接,后台获取链接中的激活码,根据激活码从数据库中查找该注册用户,设置账户状态。
  1. 代码详细流程
  • 发送邮件及邮件链接内容
String emailMsg="恭喜您注册成功,请点击下面链接进行激活账户"
					+"<a href='http://localhost:8080/HeimaShop/active?activeCode="+activeCode+"'>"
					+"http://localhost:8080/HeimaShop/active?activeCode="+activeCode+"</a>";
			try {
				MailUtils.sendMail(user.getEmail(), emailMsg);
  • 用户点击邮件链接激活,web层获取链接里的参数
String activeCode=request.getParameter("activeCode");
UserService service=new UserService();
service.active(activeCode);
response.sendRedirect(request.getContextPath()+"/login.jsp");
  • 进行数据库查询,并设置该账户状态
QueryRunner runner=new QueryRunner(DataSourceUtils.getDataSource());
String sql="update user set state=? where code=?";
runner.update(sql, 1,activeCode);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值