加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

一个书上的Ajax登录验证的源码以及分析

发布时间:2020-12-16 03:31:58 所属栏目:百科 来源:网络整理
导读:1 示例描述: 登陆注册程序中,必须保证每个用户ID不能重复。这种检测用户ID的操作用Ajax完成。 行为:当用户输入ID后,会使用Ajax将信息提交到服务器上进行验证,如果此ID没有被人使用,则提示可以使用。如果被人使用了,则提示错误信息。 2 建立database和

1 示例描述:

登陆注册程序中,必须保证每个用户ID不能重复。这种检测用户ID的操作用Ajax完成。

行为:当用户输入ID后,会使用Ajax将信息提交到服务器上进行验证,如果此ID没有被人使用,则提示可以使用。如果被人使用了,则提示错误信息。

2 建立database和user表 并插入数据:

create database mld;

create table user( userid varchar(30) primary key,name varchar(30),passwo
rd varchar(32));

insert into user values("admin","administrator","admin");

3 编写注册表单页 regist..html的分析:

① 若是ID重复,则不能提交。

form中有一个onsubmit="return "事件

② form表单中,ID项填写完成,失去焦点后,就立刻开始检测并提示(核心

ID里面有一个 onblur="核心业务名字"事件。

在ID后面有一个<span></span>将提示的信息显示出来。

4 regist.html的核心代码:

<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
<script type="text/javascript">
var xmlHttp;
var flag;

//创建xmlHttp
function createXMLHttp() {
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}

//3的②中的核心函数
function checkUserid(userid) {
createXMLHttp();
xmlHttp.open("POST","CheckServlet?userid=" + userid);//查找ID的请求

//open post参数后面的资源,有可能是现成的内容,也有可能是另一个需要执行的代码。该xmlhttp接收这段执行代码的返回的内容
xmlHttp.onreadystatechange = checkUseridCallback;//回调函数
xmlHttp.send(null);//发送请求
doucument.getElementById("msg").innerHTML = "正在验证";
}
function checkUseridCallback() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var text = xmlHttp.responseText;//接收"CheckServlet?userid=" + userid 返回的内容
if (text == "true") {
flag = false;//flag的意义在于,若是返回true,则说明ID重复,则无法提交。为了满足3的①的业务逻辑
document.getElementById("msg").innerHTML = "用户ID重复,无法使用!";
} else {
flag = true;
document.getElementById("msg").innerHTML = "此用户ID可以注册!";
}
}
}
}
function checkForm(){//form能否提交,取决于返回的flag的内容. 在form中:onsubmit="return checkForm()"
return flag;
}

</script>
</head>
<body>


<form action="regist.html" method="post" onsubmit="return checkForm()">
用户ID:<input type="text" name="userid" onblur="checkUserid(this.value)" /> //离开焦点调用js中的业务逻辑
<span id="msg"></span><br /> 姓&nbsp;&nbsp;名:<input type="text"
name="name" /></br> 密&nbsp;&nbsp;码:<input type="password" name="password" /></br>
<input type="submit" vaule="注册" /> <input type="reset" value="重置" />
</form>
</body>
</html>

5 :由js中的逻辑很容易看出在servlet中我们要的是什么:

名字:CheckServlet

业务:检查其userid是否存在。

若存在,返回"true"

若不存在,返回“false”

6CheckServlet.java 代码:

package org.lxh.ajaxdemo ;
import java.sql.* ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
public class CheckServlet extends HttpServlet{
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
public static final String DBUSER = "root" ;
public static final String DBPASS = "0000" ;//我的mysql数据库的密码
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
this.doPost(request,response) ;
}
public void doPost(HttpServletRequest request,IOException{
request.setCharacterEncoding("GBK") ;
response.setContentType("text/html") ;
Connection conn = null ;
PreparedStatement pstmt = null ;
ResultSet rs = null ;
PrintWriter out = response.getWriter() ;//返回用response返回。因为在js中是用post方法,所以在这里直接用doPost
String userid = request.getParameter("userid") ;//接收参数
try{
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
String sql = "SELECT COUNT(userid) FROM user WHERE userid=?" ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,userid) ;
rs = pstmt.executeQuery() ;
if(rs.next()){
if(rs.getInt(1)>0){// 用户ID已经存在了
out.print("true") ;//返回true
} else {
out.print("false") ;//返回false
}
}
}catch(Exception e){
e.printStackTrace() ;
}finally{
try{
conn.close() ;
}catch(Exception e){}
}
}
}

6 部署servlet 到web.xml并启动服务器 然后就可以执行了

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读