这两天開始写程序了,让用SSH2框架,曾经没有接触过Java项目更没有接触过SSH2框架,所以用注冊開始了我Java之旅。后来发现,后台代码挺easy理解的,跟.net的差点儿相同。就是层与层之间的调用,可是前面前台的交互我差非常多,在这里总结一下,顺便跟大家看一下。怎么实现往手机上发送短信验证码的。。

           大家先看看我的界面。

    原图:

     

    短信验证码错误的界面:

 

    短信验证码正确的界面:

     

    以下開始我的界面代码展示(JSP):

<body >
    <h2 class="titlelog"><br></h2><h2 class="titlelog"><br></h2><h2 class="titlelog">学乐购</h2>
    <p class="advertisement">专门为学生打造的站点</p>
    <div id="panelname" style="margin-left: 500px;width: 800px;">
    	<div id="registername"><p class="userregister">用户注冊</p></div>
    	<form action="register_add.action" onsubmit="return clickregister()">
		<div style="margin-bottom:20px">
			<div>手机号码:</div>
			<input class="easyui-textbox" id="telephonename" name="loginName" data-options="prompt:'请输入手机号',validType:'mobile'" style="width: 300px; height: 30px;"">
			<input class="code" type="button" id="btnSendCode" onclick="sendMessage()" value="点击获取手机验证码" />
			<span id="telephonenameTip"></span>
		</div>
		<div style="margin-bottom:20px">
			<div>验证码:</div>
			<input class="easyui-textbox" id="codename" style="width: 300px; height: 30px;">
			<span id="codenameTip"></span>
		</div>
		<div style="margin-bottom:20px">
			<div>密码:</div>
			<input class="easyui-textbox" id="password" name="loginPassword" style="width: 300px; height: 30px;">
			<span id="passwordTip"></span>
		</div>
		<div style="margin-bottom:20px">
			<div>确认密码:</div>
			<input class="easyui-textbox" id="passwordRepeat" style="width: 300px; height: 30px;"  >
			<span id="passwordRepeatTip"></span>
		</div>
		
		<div class="readname">
			<input id="checked" type="checkbox" onclick="arrgement()" checked="checked">
			<span >我已阅读并允许<span class="servicename" id="aree">《学乐购站点服务协议》</span></span>
		</div>
		<div id="zhuce" class="loginname">
				<input class="loginregister" id="loginregister" type="submit" value="注冊 "  />
				<a class="login">已有账号?去登陆</a>
		</div>
		</form>
	</div>
  </body>
   Struts代码:

 <!-- 注冊信息 -->
		<action name="register_*" class="userRegisterAction" method="{1}">
			<result name="test">WEB-INF/jsp/StoreManage/Register.jsp</result>

</action>
  JS代码展示:

//去掉前后空格
function trim(str) {
	var strnew=str.replace(/^\s*|\s*$/g, ""); 
	return strnew;
}

//文本框失去焦点时验证

//密码不能为空
$(function(){
	$("input",$("#password").next("span")).blur(function(){
		var password = $("#password").val();
		
		if(trim(password)==""){
			document.getElementById("passwordTip").innerHTML="<font color='red'>× 密码不能为空</font>"; 
			return false;
		}else {
			document.getElementById("passwordTip").innerHTML="<font color='#339933'>√</font>";
			return true;
		}
	});
})

//确认密码
$(function(){
	$("input",$("#passwordRepeat").next("span")).blur(function(){
		
		var passwordrepeat=$("#passwordRepeat").val();
		var password = $("#password").val();
		
		if(trim(passwordrepeat)=="") {
			document.getElementById("passwordRepeatTip").innerHTML="<font color='red'>× 确认密码不能为空 </font>"; 
			return false;
		}else if(trim(password)!=trim(passwordrepeat)){
			document.getElementById("passwordRepeatTip").innerHTML="<font color='red'>× 两次密码输入必须一致</font>"; 
			return false;
		}else {
			document.getElementById("passwordRepeatTip").innerHTML="<font color='#339933'>√</font>";
			return true;
		}
	});
})

//推断手机号是否已经注冊
$(function(){
	$("input",$("#telephonename").next("span")).blur(function(){
		
		var phonename=$("#telephonename").val();
		var re= /(^1[3|5|8][0-9]{9}$)/;  
		if (trim(phonename) == "") {
			document.getElementById("telephonenameTip").innerHTML = "<font color='red'>× 手机号码不能为空</font>"; 
			return false;
		}else if(trim(phonename) != ""){
			if(!re.test(phonename)){
				document.getElementById("telephonenameTip").innerHTML = "<font color='red'>× 请输入有效的手机号码</font>"; 
				return false;
			}else{
				document.getElementById("telephonenameTip").innerHTML = "<font color='red'></font>";
				$.ajax({
					url:"register_checkLoginname.action",
					data:{phonename:phonename},
					type:"POST",
					dataType:"text",
					success:function(data){
						//alert(data);
						//data = parseInt(data, 10);
						if (data != 0) {
							$("#telephonenameTip").html("<font color='red'>× 该手机号码已被注冊,请又一次输入</font>");
							$("#loginregister").disabled=true;
							return false;
						}else {
							$("#telephonenameTip").html("<font color='#339933'>√</font>");
						}
					}
				});

				return true;
			}
		
		}
		
	});
})

//验证码
$(function(){
	$("input",$("#codename").next("span")).blur(function(){
		var coadename = $("#codename").val();
		
		if(trim(coadename)==""){
			document.getElementById("codenameTip").innerHTML="<font color='red'>× 验证码不能为空</font>";
			return false;
		}else {
			document.getElementById("codenameTip").innerHTML=("<font color='#339933'>√</font>"); 
			return true;
		}
	});
})

//短信验证码
var InterValObj; //timer变量,控制时间  
var count = 60; //间隔函数,1秒运行  
var curCount;//当前剩余秒数  
var code = ""; //验证码  
var codeLength = 6;//验证码长度  
  
function sendMessage(){ 
    curCount = count;  
    var jbPhone = $("#telephonename").val();  
    var jbPhoneTip = $("#telephonenameTip").text();  
    if (jbPhone != "") {  
        if(jbPhoneTip == "√" || jbPhoneTip == "√ 短信验证码已发到您的手机,请查收"){  
            // 产生验证码  
            for ( var i = 0; i < codeLength; i++) {  
                code += parseInt(Math.random() * 9).toString();  
            }  
            // 设置button效果,開始计时  
            $("#btnSendCode").attr("disabled", "true");  
            $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");  
            InterValObj = window.setInterval(SetRemainTime, 1000); // 启动计时器。1秒运行一次  
            // 向后台发送处理数据  
            $.ajax({  
                type: "POST", // 用POST方式传输  
                dataType: "text", // 数据格式:JSON  
                url: "register_sms.action", // 目标地址  
                data: "jbPhone=" + jbPhone +"&code=" + code,  
                error: function (XMLHttpRequest, textStatus, errorThrown) {   
                      
                },  
                success: function (data){   
                    data = parseInt(data, 10);  
                    if(data == 1){  
                        $("#telephonenameTip").html("<font color='#339933'>√ 短信验证码已发到您的手机,请查收</font>");  
                    }else if(data == 0){  
                        $("#telephonenameTip").html("<font color='red'>× 短信验证码发送失败,请又一次发送</font>");  
                        return false;
                    }else if(data == 2){  
                        $("#telephonenameTip").html("<font color='red'>× 该手机号码今天发送验证码过多</font>");  
                    }  
                }  
            });  
        }  
    }else{  
        $("#telephonenameTip").html("<font color='red'>× 手机号码不能为空</font>");  
    }  
}
  
//timer处理函数  
function SetRemainTime() {  
    if (curCount == 0) {                  
        window.clearInterval(InterValObj);// 停止计时器  
        $("#btnSendCode").removeAttr("disabled");// 启用按钮  
        $("#btnSendCode").val("又一次发送验证码");  
        code = ""; // 清除验证码。假设不清除。过时间后,输入收到的验证码依旧有效  
    }else {  
        curCount--;  
        $("#btnSendCode").val("请在" + curCount + "秒内输入验证码");  
    }  
}  
  
$(function(){  
	$("input",$("#codename").next("span")).blur(function(){  
        var SmsCheckCodeVal = $("#codename").val();  
        // 向后台发送处理数据  
        $.ajax({  
            url : "register_checkCode.action",   
            data : {SmsCheckCode : SmsCheckCodeVal},   
            type : "POST",   
            dataType : "text",   
            success : function(data) {  
                data = parseInt(data, 10);  
                if (data == 1) {  
                    $("#codenameTip").html("<font color='#339933'>√</font>");  
                } else {  
                    $("#codenameTip").html("<font color='red'>× 短信验证码有误,请核实后又一次填写</font>");
                    
                }  
            }  
        }); 
        return true;
    });  
});  

//对服务协议按钮做出的推断
function arrgement(){
	if(document.getElementById("checked").checked){
		
		document.getElementById("zhuce").innerHTML="<input class=\"loginregister\" id=\"loginregister\" type=\"submit\" onclick=\"clickregister()\" value=\"注冊 \"  />";
		document.getElementById("loginregister").style.color = "#FFF";
		document.getElementById("loginregister").style.backgroundColor="#60F";
		return true;
	}else {
		
		document.getElementById("zhuce").innerHTML="<input class=\"loginregister\" id=\"loginregister\" type=\"button\"  value=\"注冊 \"  />";
		document.getElementById("loginregister").style.color =="#000000";
		document.getElementById("loginregister").style.backgroundColor="#D5D3CD";
		return false;
	}
}

//点击注冊按钮时做出的推断
function clickregister(){
	//alert("11");
	
	var password = $("#password").val();
	var passwordrepeat=$("#passwordRepeat").val();
	var phonename=$("#telephonename").val();
	var re= /(^1[3|5|8][0-9]{9}$)/; 
	var coadename = $("#codename").val();
	var SmsCheckCodeVal = $("#codename").val();  
	//alert("22");
	var flage = true;
	//密码不能为空
	if(trim(password)==""){
		document.getElementById("passwordTip").innerHTML="<font color='red'>× 密码不能为空</font>";
		if(flage){
			flage = false;
		}
	}else if(trim(password)!=""){
		document.getElementById("passwordTip").innerHTML="<font color='#339933'>√</font>";
		//flage = true;
	}
	
	
	if(trim(passwordrepeat)==""){
		document.getElementById("passwordRepeatTip").innerHTML="<font color='red'>× 确认密码不能为空 </font>"; 
		if(flage){
			flage = false;
		}
	}else if(trim(password)!=trim(passwordrepeat)){
		document.getElementById("passwordRepeatTip").innerHTML="<font color='red'>× 两次密码输入必须一致</font>"; 
		if(flage){
			flage = false;
		}
	}else if(trim(passwordrepeat)!="" && trim(password)==trim(passwordrepeat) ){
		document.getElementById("passwordRepeatTip").innerHTML="<font color='#339933'>√</font>";
		//flage = true;
	}
	
	
	if (trim(phonename) == ""){
		document.getElementById("telephonenameTip").innerHTML = "<font color='red'>× 手机号码不能为空</font>";
		if(flage){
			flage = false;
		}
	}else {
		//alert("11s");
		if(!re.test(phonename)){
			document.getElementById("telephonenameTip").innerHTML = "<font color='red'>× 请输入有效的手机号码</font>"; 
			if(flage){
				flage = false;
			}
		}else {
			//alert("11sssss");
			//alert(ccc);
			$.ajax({
				async : false,
				url:"register_checkLoginname.action",
				data:{phonename:phonename},
				type:"POST",
				dataType:"text",
				success:function(data){
					//alert(data);
					//data = parseInt(data, 10);
					if (data != 0) {
						$("#telephonenameTip").html("<font color='red'>× 该手机号码已被注冊。请又一次输入</font>");
						//$("#loginregister").disabled=true;
						if(flage){
							flage = false;
						}
					}else {
						$("#telephonenameTip").html("<font color='#339933'>√</font>");
						//flage=true;
					}
				}
			});
			
				
		}
	}
	//alert("11sssss");
	
		if(trim(coadename)==""){
			document.getElementById("codenameTip").innerHTML="<font color='red'>× 验证码不能为空</font>"; 
			if(flage){
				flage = false;
			}
		}else {
			document.getElementById("codenameTip").innerHTML=("<font color='#339933'>√</font>"); 
			
			//alert("11sssss");
			$.ajax({  
				async : false,
	            url : "register_checkCode.action",   
	            data : {SmsCheckCode : SmsCheckCodeVal},   
	            type : "POST",   
	            dataType : "text",   
	            success : function(data) {  
	            	//alert(data);
	                //data = parseInt(data, 10);  
	                if (data == 0) {  
	                	$("#codenameTip").html("<font color='red'>× 短信验证码有误,请核实后又一次填写</font>");
	                	if(flage){
	            			flage = false;
	            		}
	                } else {  
	                    $("#codenameTip").html("<font color='#339933'>√</font>");  
	                  // flage=true;
	                }  
	            }  
	        }); 
				//alert("222");
			//if(ddd==false){
			//	return ddd;		
			//}
				
		}
		
	//alert("111");
	
		//推断有没有勾选服务协议
		if(document.getElementById("checked").checked==true){
			
			document.getElementById("zhuce").innerHTML="<input class=\"loginregister\" id=\"loginregister\" type=\"submit\" onclick=\"clickregister()\" value=\"注冊 \"  />";
			document.getElementById("loginregister").style.color = "#FFF";
			document.getElementById("loginregister").style.backgroundColor="#60F";
			//alert("2222");
			//flage = true;
			
		 }else {
		
			document.getElementById("zhuce").innerHTML="<input class=\"loginregister\" id=\"loginregister\" type=\"button\"  value=\"注冊 \"  />";
			document.getElementById("loginregister").style.color =="#000000";
			document.getElementById("loginregister").style.backgroundColor="#D5D3CD";
			if(flage){
				flage = false;
			}
		}
		return flage;
}

    action代码展示:能发送短信肯定是调用了短信平台的接口,否则不可能让你免费发送短信。这里我用的是天下畅通平台的短信接口平台。让他给Java类。URLuseridaccountpassword等參数。调用就能够了   

@SuppressWarnings("serial")
@Controller
@Scope("prototype")

public class UserRegisterAction extends BaseAction<UserRegisterdomain> {
	
	//短信验证码接口的測试数据(天下畅通平台给參数)
	public static String url = "http://XXXXXXXXXX";
	public static String userid = "XXXXXXXXXX";
	public static String account = "XXXXXXXXX";
	public static String password = "XXXXXXXXXXXXX";
		
	
	private String phonename;
	
	public String getPhonename() {
		return phonename;
	}

	public void setPhonename(String phonename) {
		this.phonename = phonename;
	}

	//注冊-往数据库中加入注冊信息
	public String add(){
		//插入时间
		Date date=new Date();
		//String createTime=new Timestamp(date.getTime()).toString();
		//密码加密后存入数据库
		String md5Digest=DigestUtils.md5Hex(model.getLoginPassword());
		
		//头像
		String headimg="../../../images/默认头像.gif";
		//等级
		String userRank="0";
		//成长值
		Integer userGrowths=0;
		
		//给实体赋值管理员类型和时间,头像,成长值。等级
		model.setUserType(0);
		model.setDatetime(date);
		model.setTouxiang(headimg);
		model.setUserRank(userRank);
		model.setUserGrowths(userGrowths);
		
		//往数据库中进行加入
		userRegisterService.addUserRegister(model);
		
		//显示注冊界面
		return "test";
	}
	
	//推断该手机号码是否已经注冊
	public void checkLoginname() throws Exception{
		
		String result = "0"; 
		//推断该手机号码是否已经注冊
		List<UserRegisterdomain> userlist=userRegisterService.findUser(phonename);
		if(userlist!= null && userlist.size() > 0){
			result = "1";
		}else{
			result = "0";
		}
		PrintWriter out = response.getWriter();
		out.write(result.toString()); 
	}
	
	 
     //验证手机短信是否发送成功 
    public void sms() throws Exception {  
        String result = "0";  
        /** 手机号码 */  
        Object jbPhone=request.getParameter("jbPhone");  
        /** 短信验证码 */  
        Object code = request.getParameter("code");  
        /** 短信验证码存入session(session的默认失效时间30分钟) */  
        session.setAttribute("code", code.toString());  
 
        /** 单个手机号发送短信的方法的參数准备 */  
        // 手机号码  
        String mobilephone = jbPhone.toString();  
        // 短信内容+随机生成的6位短信验证码  
        String content = "【学乐购站点】注冊验证码为:" + code.toString();   
        
            /** 单个手机号发送短信 */  
           if (!sendMessage(url, userid, account, password, mobilephone, content)) {  
                result = "0";// 失败  
            } else {  
                result = "1";// 成功  
                  
                }  
    
        PrintWriter out = response.getWriter();  
        out.write(result.toString()); 
    }  
    
    // 验证短信验证码是否正确 
    public void checkCode() throws Exception{  
        String result = "0";  
        // 获取手动输入的手机短信验证码 
        String SmsCheckCode = (String)(request.getParameter("SmsCheckCode"));   
        // 获取session中存放的手机短信验证码  
        Object code =session.getAttribute("code");  
        try {  
            if(SmsCheckCode != code.toString() && !SmsCheckCode.equals(code.toString())){  
                result = "0";  
            }else{  
                result = "1";  
            }  
        } catch (Exception e) {  
            throw new RuntimeException("短信验证失败", e);  
        }   
        PrintWriter out = response.getWriter();  
        out.write(result.toString());  
    }    
    
//验证手机是否发送成功的方法
 
    public static boolean sendMessage(String url, String userid, String account,
			String password, String checkContent, String mobileNumber) {  
        // 单个手机号码发送  
        try {  
        	String  retObj = SmsClientSend.sendSms(url, userid, account, password,checkContent,mobileNumber);  
        	//System.out.println(retObj);
            if (retObj == "未发送。编码异常") {   
                return false;  
            } else {  
                return true;  
            } 
        } catch (Exception ex) {  
            ex.printStackTrace();   
        }  
        return true;  
    } 
}
    最终花了四天的时间把它搞出来了。给大家看一下验证码的效果。


     

     尽管没怎么做过Java的项目,可是有了.net的基础。上手还是挺快的。由于好多东西都是相通的。名字叫的不一样可是都是实现一样的事情。像Java中的hibernate.net中的EFStrutsMvc等等。。。

posted on 2017-04-14 12:59  yutingliuyl  阅读(577)  评论(0编辑  收藏  举报