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

大家先看看我的界面。

原图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

短信验证码错误的界面:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

短信验证码正确的界面:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

以下開始我的界面代码展示(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类。URL,userid。account,password等參数。调用就能够了

@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中的EF,Struts跟Mvc等等。。。

SSH2框架实现注冊发短信验证码实例的更多相关文章

  1. 19.最经济app发短信的方法

    在创业团队.一个重要的原则是能省就省,该花的花,明智地使用金钱. 今的app,为了获取用户的社交关系.须要用户的手机号注冊. 用手机号注冊就涉及到一个发送短信验证码的问题,那怎么才干在短信服务上投入最 ...

  2. iOS中如何切换到发短信、打电话、发邮件

    我们在做APP的时候,难免会遇到需要调用短信,电话等程序的时候.如美团. 当然,这些都只是一些简单的方法就可以实现,但是时间久了也会淡忘,所以想写这边博客.一是为了再捡起来复习一下,另一个相当于留个备 ...

  3. iOS开发中打电话发短信等功能的实现

    在APP开发中,可能会涉及到打电话.发短信.发邮件等功能.比如说,通常一个产品的"关于"页面,会有开发者的联系方式,理想情况下,当用户点击该电话号码时,能够自动的帮用户拨出去,就涉 ...

  4. [stm32] SIM808模块之发短信\GPS\TCP\HTTP研究

    SIM8008是四频模块,全球可用.含有TTL电平接口等接口,能够实现发短信.打电话.GPRS传输数据.GPS等功能.[正版资料请找beautifulzzzz·博客园] 一些细节: >> ...

  5. ios 设置亮度、声音;调用发短信、邮件、打电话

    一,设置亮度 [[UIScreen mainScreen] setBrightness:0.5];//0.0~1.0 二,设置声音 1,添加 MediaPlayer.framework 框架 2,在需 ...

  6. iOS 打电话、发短信、邮件、打开网址、调用应用等合集

    iOS中的很多功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等,这里总结几个比较常用的: 1.打电话 方式一:最简单最直接的方式:直接跳到拨号界面 NSURL *url = ...

  7. 打电话、发短信、web以及发邮件

    #import "ViewController.h" #import <MessageUI/MessageUI.h> //导入信息UI库 @interface View ...

  8. iOS打电话、发短信

    方式一:使用该方法进行拨号之后,当电话挂断之后不会反回应用程序,会停留在电话记录界面,不会反回应用程序      NSURL *url = [NSURL URLWithString:@"te ...

  9. iOS打电话,发短信,发邮件,打开网址

    //调用自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@hzl ...

随机推荐

  1. AndroidManifest 中android:exported

    假设Service等的AndroidManifest中声明为android:exported="false" 则该服务不可以跨进程使用.         Permission De ...

  2. Oracle数据库信息查询

    查看当前数据库 select name from V$DATABASE; select SYS_CONTEXT('USERENV','INSTANCE_NAME') from dual; 用户 sel ...

  3. ECMAScript5之Object学习笔记(一)

    随着IE的逐步追赶,目前到IE11已经能够很好的支持ECMAScript5标准了,其他的现代浏览器像firefox,chrome,opera就更不用说了. 再加上nodejs使得javascript在 ...

  4. [Javascipt] Immediately-Invoker 2

    Now the people at Poplar Puzzles would like you to treat an array of functions like a Queue, passing ...

  5. 【Nodejs】理想论坛帖子爬虫1.02

    在1.01版本中,我发现各回调函数找到数据后再插入数据库有个竞争问题不好解决,如果等所有回调都完成也没有好的处理方法,因为启动不止一处启动了新的TopicSpider实例. 于是我决定把读数据和写DB ...

  6. 微信小程序-配置解答

    微信小程序启动页面: Pages:  index / logs 有 index和logs的页面,每个页面中都有独立的js逻辑,wxml负责页面内容,wxss负责样式. utils app.js app ...

  7. 嵌入式Linux的web视频服务器的构建

    http://blog.sina.com.cn/s/blog_53d02d550102v8bu.html随着嵌入式处理器和开源Linux 的广泛应用,各种视频服务在嵌入式系统中逐渐发展起来. 1.引言 ...

  8. eclipse使用egit插件

    本来想用myeclipse,奈何试过网上所列的常用方法,都无法成功安装egit插件.只得转到eclipse.话说eclipse不仅是免费的,启动也较myeclipse更为迅速,安装插件也非常顺利.使用 ...

  9. UEFI是什么?与BIOS的区别在哪里?UEFI详解!

    前几天在帮同事小何笔记本电脑安装64位 Windows 7 的时候,遇到一个从来没有碰到过的问题,使用光盘安装时,提示:Windows无法安装到这个磁盘.选中的磁盘具有MBR分区表.在EFI系统上,W ...

  10. Flash actionscript3.0 多个setTimeout之间会顺序执行 单线程执行 无法中止

    做了一个试验,测试能否在另外的setTimeout中中断其他代码的执行.结果表明,是不可能的,Actionscript会按顺序,逐个逐个的执行. private var index:int; priv ...