实例技术:springmvc

实现功能:完整用户登录流程、输入信息规则校验、验证码异步校验.

功能清单

1.springmvc控制器处理get请求(/member/login.html),进行静态页面跳转到用户登录页

2.Springmvc控制器处理post请求(/member/login.html),进行登录实际业务处理

3.验证实例包含常规输入验证 + 异步验证,使用验证插件formValidator

插件下载:

验证插件下载:http://www.cnblogs.com/wzmaodong/archive/2012/10/15/2724005.html [猫冬博客]

验证码插件下载: http://www.cnblogs.com/dennisit/p/3325871.html [苏若年博客]

实例效果:

前端登录样式效果

 <div class="content-wp">
<!--登录开始-->
<div class="login-form">
<form action="" method="post" name="formLogin" id="formLogin">
<dl>
<dt>帐户基本信息</dt>
<dd>
<span class="title">登录邮箱:</span>
<input class="login_input" name="email" type="text" id="email"/>
<span id="emailTip" class="onshow"></span>
</dd>
<dd>
<span class="title">登录密码:</span>
<input class="login_input" id="password" name="password" type="password"/>
<span id="passwordTip" class="onshow"></span>
</dd> <dd style="heigth:50px;">
<span class="title">验证码:</span>
<img class="img" id="licenImg" src="${ctx }/licenseImg/loadImage.html?type=5" width="115" height="40" />
<span class="chimgbox">
<a href="javascript:void(0);" id="changeImg">看不清?换一张</a>
</span>
</dd>
<dd>
<span class="title">输入验证码:</span>
<input type="text" id="checkcode" class="login_input" name="checkcode" maxlength="4" />
<span id="checkcodeTip" class="onshow">请输入验证码</span>
</dd>
</dl>
<div class="login_btn_box">
<input id="button" name="button" type="submit" value="免费注册" class="login_btn"/>
<span class="clew_txt">如果您已有帐号,可<a href="javascript:void(0);">直接登录</a></span>
</div>
</form>
</div>
<!--登录结束-->
</div>

这里验证码使用自己搞得一个验证码插件.

<img class="img" id="licenImg" src="${ctx }/licenseImg/loadImage.html?type=5" width="115" height="40" />

里边的type用来指定内置的验证码样式

使用formValidator实现前端验证

1.常规验证

            //登录邮箱验证
jQuery("#email").formValidator({
onshow:"6-100个字符",
onfocus:"6-100个字符",
oncorrect:"恭喜你,你输对了",
defaultvalue:"@"
}).inputValidator({
min:6,
max:100,
onerror:"长度非法"
}).regexValidator({
regexp:"^([\\w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([\\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",
onerror:"格式不正确"
});

参数说明:

onshow:表示页面加载上来先是的内容

onfocus:表示输入框获取得焦点之后的内容

oncorrect:表示输入正确后的信息

defaultvalue:表示输入框默认值

Onerror:表示验证不通过的错误提示.

2.异步验证

            //验证码验证相关
jQuery("#checkcode").formValidator({
onshow:"请输入验证码",
onfocus:"验证码为4个字符",
oncorrect:"恭喜你,你输对了"
}).ajaxValidator({
//请求方式post
type: "post",
//请求处理执行方法,这里采用相对路径
datatype: "json",
oncorrect:"验证码正确",
url: "${ctx}/licenseImg/validImage.html?tm=" + new Date().getTime(),
//请求携带的参数值
success: function(result) { //返回的josn串
if(result==1){
return true; //值不是1表示验证码输入错误
}else{
return false; //表示验证码输入正确
}
},
oncorrect:"恭喜你,你输对了",
onerror: "验证码错误,请重新输入",
onwait : "正在检测验证码,请稍候..."
});

说明:ajaxValidator({...});里边执行异步验证,需要说明的是这里验证传递参数,url中无需带入要验证的内容参数,因为带了也不起作用.比如我这里验证码的输入框Id值为checkcode,而这里url:"${ctx}/licenseImg/validImage.html?validimgvalue=" + jQuery("#checkcode").val(),这种写法,然后再服务端我们用request.getParameter("validimgvalue")获取参数的话获取的是页面初始加载的值,而不是我们输入的值.所以这里的异步验证只要保证request.getParameter("输入框name值")一致,然后使用时间戳保证不缓存就可以在服务端获取到每次输入的值了.

前端验证完整实例

    <link rel="stylesheet" type="text/css" href="${ctx }/styles/common/common.css">
<link rel="stylesheet" type="text/css" href="${ctx }/styles/member/member_login.css"> <script src="${ctx }/scripts/jquery-1.2.6.min.js" type="text/javascript" charset="UTF-8"></script>
<script src="${ctx }/scripts/form-validator_min.js" type="text/javascript" charset="UTF-8"></script>
<script src="${ctx }/scripts/member/member_login.js" type="text/javascript" charset="UTF-8"></script> <script type="text/javascript">
jQuery.noConflict();
</script>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery.formValidator.initConfig({
formid:"formLogin",
debug:false,
submitonce:true,
onerror:function(msg,obj,errorlist){
alert(msg);
}
}); //登录邮箱验证
jQuery("#email").formValidator({
onshow:"6-100个字符",
onfocus:"6-100个字符",
oncorrect:"恭喜你,你输对了",
defaultvalue:"@"
}).inputValidator({
min:6,
max:100,
onerror:"长度非法"
}).regexValidator({
regexp:"^([\\w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([\\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",
onerror:"格式不正确"
}); //登录密码验证
jQuery("#password").formValidator({onshow:"至少6个字符",onfocus:"至少6个字符",oncorrect:"密码合法"}).inputValidator({min:6,empty:{leftempty:false,rightempty:false,emptyerror:"输入有误"},onerror:"输入有误"}); //验证码验证相关
jQuery("#checkcode").formValidator({
onshow:"请输入验证码",
onfocus:"验证码为4个字符",
oncorrect:"恭喜你,你输对了"
}).ajaxValidator({
//请求方式post
type: "post",
//请求处理执行方法,这里采用相对路径
datatype: "json",
oncorrect:"验证码正确",
url: "${ctx}/licenseImg/validImage.html?tm=" + new Date().getTime(),
//请求携带的参数值
success: function(result) { //返回的josn串
if(result==1){
return true; //值不是1表示验证码输入错误
}else{
return false; //表示验证码输入正确
}
},
oncorrect:"恭喜你,你输对了",
onerror: "验证码错误,请重新输入",
onwait : "正在检测验证码,请稍候..."
}); /*点击更换验证码的方法*/
jQuery("#changeImg").click(function(){
var path = "${ctx}";
var url = path + "/licenseImg/loadImage.html?type=5&tm=" + new Date().getTime();
jQuery("#licenImg").attr("src",url);
}); }); </script>

3.验证码插件将样式交给前段控制实现

@Controller
@RequestMapping("/licenseImg")
public class LicenseImageController extends BaseMultiController{ /**
* 生成验证码
*
* @author <a href='mailto:dennisit@163.com'>Cn.pudp(En.dennisit)</a> Copy Right since 2013-11-5 下午03:45:51
*
* @param request
* @param response
* @throws ControllerException
* @throws IOException
*/
@RequestMapping(value={"/loadImage","/loadImage.html"},method={RequestMethod.GET})
public void licenseImage(HttpServletRequest request, HttpServletResponse response)throws ControllerException,IOException{
String type = request.getParameter("type"); response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg"); LicenseImage licenseImage = new LicenseImage(); Map<String, BufferedImage> licenseImg = licenseImage.createImage("org/pudp/util/license/resources/yzm" + type +".png"); String key = (String) licenseImg.keySet().iterator().next(); SessionUtil.getSession(request).setAttribute(CommonConstant.LicenseImageKey,key);
System.out.println("session中的验证码值为:" + key); BufferedImage buffImg = licenseImg.get(key);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(buffImg, "jpeg", out);
out.close();
} /**
* 验证验证码是否输入正确
*
* @author <a href='mailto:dennisit@163.com'>Cn.pudp(En.dennisit)</a> Copy Right since 2013-11-5 下午04:09:47
*
* @param request
* @param response
* @throws ControllerException
*/
@RequestMapping(value={"/validImage","/validImage.html"},method={RequestMethod.GET,RequestMethod.POST})
public void validateLicenseImage(HttpServletRequest request, HttpServletResponse response)throws ControllerException{
int status = -1;
String imageVal = StringUtil.getString(request, "checkcode");
String imageSessionVal = (String) SessionUtil.getSession(request).getAttribute(CommonConstant.LicenseImageKey);
System.out.println("用户输入的值:" + imageVal + ",session中存放的值:" + imageSessionVal);
if(imageSessionVal.equalsIgnoreCase(imageVal)){
//如果相等,表示验证码输入正确
status = 1;
}
JsonUtil.str2Json(status+"", response);
} @Override
public Logger getLogger() {
return Logger.getLogger(this.getClass());
} }

转载请注明出处:[http://www.cnblogs.com/dennisit/p/3410147.html]

formValidator输入验证、异步验证实例 + licenseImage验证码插件实例应用的更多相关文章

  1. AJAX(二)-实现验证码异步验证功能

    案例实现效果 用户在前端输入验证码,按键收起触发异步验证,验证验证码的对错 前端代码 checkcode.jsp <%-- Created by IntelliJ IDEA. User: cxs ...

  2. 利用js制作异步验证ajax方法()

    如何利用js写ajax异步验证.代码如下: window.onload = function(){ var name = document.getElementById('register-name- ...

  3. MVC验证10-到底用哪种方式实现客户端服务端双重异步验证

    原文:MVC验证10-到底用哪种方式实现客户端服务端双重异步验证 本篇将通过一个案例来体验使用MVC的Ajax.BeginForm或jQuery来实现异步提交,并在客户端和服务端双双获得验证.希望能梳 ...

  4. 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证

    在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证. 自定义验证规则 ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集 ...

  5. jquery登录的异步验证

    //定义一个json var validate = { username : false, pwd : false, pwded : false, verify : false, loginUsern ...

  6. ASP.NET MVC验证 - jQuery异步验证

    本文主要体验通过jQuery异步验证. 在很多的教材和案例中,MVC验证都是通过提交表单进行的.通过提交表单,可以很容易获得验证出错信息.因为,无论是客户端验证还是服务端验证,总能找到与Model属性 ...

  7. MVC验证11-对复杂类型使用jQuery异步验证

    原文:MVC验证11-对复杂类型使用jQuery异步验证 本篇体验使用"jQuery结合Html.BeginForm()"对复杂类型属性进行异步验证.与本篇相关的"兄弟篇 ...

  8. MVC验证09-使用MVC的Ajax.BeginForm方法实现异步验证

    原文:MVC验证09-使用MVC的Ajax.BeginForm方法实现异步验证 MVC中,关于往后台提交的方法有: 1.Html.BeginForm():同步 2.Ajax.BeginForm():异 ...

  9. MVC验证08-jQuery异步验证

    原文:MVC验证08-jQuery异步验证 本文主要体验通过jQuery异步验证. 在很多的教材和案例中,MVC验证都是通过提交表单进行的.通过提交表单,可以很容易获得验证出错信息.因为,无论是客户端 ...

随机推荐

  1. C# 源码 AForge.NET

    AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域.这个框架由一系列的类库组成.主要包括有 ...

  2. gdbserver 移植与多线程调试

    在嵌入式linux平台使用gdb调试进行远程调试需要安装gdbserver,gdbserver工作在目标板上,通过串口或者网线与主机上的gdb互联实现远程调试. Gdbserver需要根据不同的嵌入式 ...

  3. Swift语言精要 - 浅谈结构体(Struct)

    CGRect, CGSize, CGPoint这些是 . String, Int, Array, Dictionary这些我们经常用的也是结构体(Struct). 那么结构体(Struct)到底是什么 ...

  4. Python在线dlib库地址

    一.地址 https://pypi.python.org/pypi/dlib/18.17.100

  5. C#随机数字生成的一种方法

    1.参考: public class RandomLongGenerater { public static long New(int bit) { ) { throw new Exception(& ...

  6. JAVA统计中文的个数

    尝试了一下 不错~ /** * 获取字符串的长度,中文占一个字符,英文数字占半个字符 * * @param value 指定的字符串 * @return 字符串的长度 */ public static ...

  7. C# delegate (1)

    delegate是委托,本身不能解决跨线程访问控件的问题,直接调用委托还是会报错 Invoke指定用主线程中的控件去调用这个委托,相当于主线程来执行这个函数 在codeProject网站中找到的. C ...

  8. Mongodb下载地址

    通过官网https://www.mongodb.com/访问下载页面点击下载一直不能成功,通过如下的链接可以直接下载所有版本的安装文件. windows版本下载地址:http://dl.mongodb ...

  9. Linux默认日志含义

    Linux系统日志: /var/log/secure∶ 记录登入系统存取资料的档案,例如 pop3, ssh, telnet, ftp 等都会记录在此档案中: /var/log/wtmp∶ 记录登入者 ...

  10. windows下配置ssh访问github

    一.说明 一直使用HTTPS的方式访问github的代码,用的时间长了,发现这是效率很低的一种开发行为,因为每次git push的时候都要输入username和password.今天就介绍如何在win ...