初学Ajax,在网上找了半天的Ajax注册验证的资料,都是用户名已经写死了的验证。但自己的需求是查询数据库进行验证。为了简明直观,我只写了一个html页面,一个servlet,把Jdbc都写在里面了。先粘贴山Check.HTML代码
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <Metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
- <title>Ajax测试</title>
- <scripttype="text/javascript">
- varXMLHttp;
- functionvalidataname(){
- varuname=document.getElementById("uname").value;
- varurl="Users.do?uname="+uname;
- if(window.ActiveXOBject){
- XMLHttp=newActiveXOject("Microsoft.XMLHTTP");
- }elseif(window.XMLHttpRequest){
- XMLHttp=newXMLHttpRequest();
- }
- XMLHttp.onreadystatechange=showT;
- XMLHttp.open("post",url,true);
- XMLHttp.send(null);
- }
- functionshowT(){
- if(XMLHttp.readyState==4){
- if(XMLHttp.status==200){
- varmessage=document.getElementById("message");
- varserverTime=parseInt(XMLHttp.responseText);
- if(serverTime==0){
- message.innerHTML="用户名已使用";
- }else{
- message.innerHTML="用户名可以使用";
- }
- }
- }
- }
- </script>
- </head>
- <body>
- 用户名:
- <inputtype="text"id="uname"name="uname"onkeyup="validataname()"/>
- <spanid="message"></span>
- </body>
- </html>
- 还有自己的servlet代码User.java:
- packageorg.hel.servlet;
- importjava.io.IOException;
- importjava.sql.Connection;
- importjava.sql.DriverManager;
- importjava.sql.PreparedStatement;
- importjava.sql.ResultSet;
- importjava.sql.sqlException;
- importjavax.servlet.servletexception;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- publicclassUsersextendsHttpServlet{
- publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsservletexception,IOException{
- StringreturnValue="";
- Stringuname=request.getParameter("uname");
- try{
- Connectionconn=null;
- PreparedStatementps=null;
- ResultSetrs=null;
- Class.forName("oracle.jdbc.driver.OracleDriver");
- conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","hh","a123");
- Stringsql="select*fromstudentwheresName='"+uname+"'";
- ps=conn.prepareStatement(sql);
- rs=ps.executeQuery();
- if(rs.next()){
- returnValue="0";
- }else{
- returnValue="2";
- }
- response.getWriter().write(returnValue);
- }catch(ClassNotFoundExceptione){
- //TodoAuto-generatedcatchblock
- e.printstacktrace();
- }catch(sqlExceptione){
- //TodoAuto-generatedcatchblock
- e.printstacktrace();
- }
- }
- publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
- throwsservletexception,IOException{
- doGet(request,response);
- }
- }
下面简单的说下这二段代码的意思。Check.html里<input>标签里的onkeyup="validataname()" onkeyup是一个事件:onkeyup 事件会在键盘按键被松开时发生。我自己的理解是当你在文本框中停止输入的时候就触发了这个函数。var uname 定义一个变量取文本框(id="uname")的值。var url = "Users.do?uname=" + uname;这句代码跟配置文件web.xml联系起来了,通过对应关系调用了User.java这个servlet,下面的XMLHttp.open("post",true);XMLHttp.send(null);就是方法的调用了,Message就是输出文本提示的。下面主要说下这个User.java,加载驱动,获得连接的就略过。String uname = request.getParameter("uname");String sql="select * from student where sName= '"+ uname+"'";先是将文本框中的值获取到,然后当做查询语句的条件的参数,再进行if(rs.next())判断,如果为真,说明文本框中的用户名在数据库的student表中;returnValue="0",message的值提示"该用户已存在"。如果为假,说明该用户名不在数据库student表中,message的值提示改用户可以注册。