1. JavaWeb学习笔记十二:jQuery插件Validate校验功能、字符串转Date功能、邮箱验证码功能
1.1. JQuery插件Validate校验功能
通过绑定jsp的form表单,根据每一个输入项的name值进行校验。 校验包含校验规则和提示信息即:rules和message。 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" : "邮箱格式不正确"
}
}
} ) ;
} ) ;
还可以自定义校验规则
addMethod:name, method, message
"username" : {
"required" : true ,
"checkUsername" : true
} ,
$. validator. addMethod (
"checkUsername" ,
function ( value, element, params) {
var flag = false ;
$. ajax ( {
"async" : false ,
"url" : "${pageContext.request.contextPath}/checkUsername" ,
"data" : { "username" : value} ,
"type" : "POST" ,
"dataType" : "json" ,
"success" : function ( data) {
flag = data. isExist;
}
} ) ;
return ! flag;
}
) ;
addMethod(name,method,message)包含三个参数,这里面只有两个,因为另一个再上面里的message里写了。 第一步name参数,首先要定义规则名字 第二步method方法,这里用的是function(value,element,params)
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)。
数据库操作,注意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>
1.3. 对具有格式的String字符转成Date
为什么要转成Date
web层从form表单获取的都是字符串,当封装到对象时,有的对象类型却不是字符串,只能将字符串转成对应的类型再封装,对于int类型的字符串可以先用Integer包装类包装在转换,对于Date类型的字符串可以用下面方法。
try {
ConvertUtils. register ( new Converter ( ) {
@Override
public Object convert ( Class clazz , Object value) {
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发送激活邮件实现
业务流程
当客户注册后,服务器需要发送一个激活邮件,让用户激活 发送邮件的内容是用户注册时后台通过UUID获取的激活码,就是get提交方式的链接+激活码 用户点击邮件里的链接,后台获取链接中的激活码,根据激活码从数据库中查找该注册用户,设置账户状态。
代码详细流程
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) ;
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) ;