ajax+jsp+servlet+mysql实现登陆验证

时间:2022-04-17 19:06:04

ajax+jsp+servlet+mysql实现登陆验证

找了很多网上的代码,多半是不能用的,不是这有错就是那有错,只好自己写一个。亲自试验,绝对可以用。
1、首先在Mysql创建一个user的数据库,在user数据库创建一个users的表,设计表,字段为name varchar类型;pass verchar类型;添加数据name 为aa ,pass也是aa。
2、在项目的WebContent–WEB-INF–lib下导入一个数据库连接驱动的jar包,mysql-connector-java-5.1.33-bin.jar网上下载,解压到lib文件夹即可。
3、编写JSP页面。

 <div><form id="myform" action="" method="post">
    账号:<span id="tdName">
    <input type="text" id="userName" name="name" />     </span><br><br>
    <span id="pwdBox">                             
    密码:<span id="tdPass">
  <input type="password" id="userPass" name="pass" /></span><br><br>
    </span>
    <span id="state"></span><br>
         <div align="center" id="buttom" >
          <span ><input type="button" onClick="check()" value="登录" /></span>
    </div>
    </form>
    </div>

4、编写AJAX函数check() 和回调函数,放在刚才的JSP页面的head部分。

<script type="text/javascript"> var xmlHttp=false; function createXMLHttpRequest() { if (window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }else if (window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); } } function check(){ createXMLHttpRequest(); //调用创建XMLHttpRequest对象方法 xmlHttp.onreadystatechange=callback; //设置回调函数 nameStr=myform.name.value; passStr=myform.pass.value; var url="check?name="+nameStr+"&pass="+passStr; //向servlet/check发送请求的URL xmlHttp.open("get",url); //向服务器端发送请求 xmlHttp.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset=UTF-8"); xmlHttp.send(null); } function callback(){ if(xmlHttp.readyState==4){ if(xmlHttp.status==200){ var str = xmlHttp.responseText; alert(str); if(str.length==2){ //如果返回的字符串长度为2表示用户存在可以登录成功 document.getElementById("state").innerHTML="已登录的用户"; var tdName=document.getElementById("tdName"); tdName.replaceChild(document.createTextNode(nameStr),tdName.firstChild);//替换节点 var tdPass=document.getElementById("pwdBox"); tdPass.innerHTML=""; var trButtom=document.getElementById("buttom"); trButtom.innerHTML='<font color=\"red\">恭喜你成功登录</font> <div> <input type="button" onclick="exit()" value="退出" /></div>'; trButtom.name="yes"; }else{ document.getElementById("state").innerHTML="<font color=\"red\">用户名或密码有误</font>"; } } } } </script>

5、编写servlet

package servlet;
import beans.SqlCheck;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Check extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    //获取客户端请求的参数,并进行判断。
        //如果用户存在,返回一个长度为2的字符串,如果用户不存在返回一个长度为1的字符串。
        PrintWriter out = response.getWriter();
        String name=request.getParameter("name");//取得用户名参数
        String pass=request.getParameter("pass");//取得用户密码参数
        SqlCheck sc=new SqlCheck();
        sc.setName(name);//为JavaBean设置name属性
        sc.setPass(pass);// 为JavaBean设置pass属性
        try{
             if(sc.check()){  //如果用户存在
                 out.print("aa");  //返回长度为2的一个字符串
                 request.getSession().setAttribute("name",name );

                 }else{
                out.print("a");  //返回长度为1的一个字符串
                 }
        }catch(Exception e){
            out.print(e.toString());
        } 
        out.flush();
        out.close();

    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request,response);
    }
}

6、编写SqlCheck类

package beans;
import java.sql.*;

import javax.servlet.ServletException;
import javax.mail.Session;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.omg.CORBA.Request;

public class SqlCheck {
   private boolean ok=false;//状态变量
   private String name=null;
   private String pass=null;

   public boolean check()throws Exception{
       checkSQL(this.name,this.pass);
       return this.ok;
   }
   public void setName(String name){
           this.name = name;
   }
   public String getName(){
           return name;
   }
   public void setPass(String pass){
           this.pass = pass;
   }
   public String getPass(){
           return pass;
   }

   //查询数据库,如果数据库没有这个用户就把状态变量设置为false,如果有则设置为true
  private void checkSQL(String name,String pass) throws Exception{
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/user?user=root&password=数据库连接密码&characterEncoding=UTF-8";
        Connection con=DriverManager.getConnection(url);
        Statement st=con.createStatement();
        ResultSet rs=st.executeQuery("select * from users where name='"+name+"' and pass='"+pass+"'");
        if(rs.next()){//表示有记录

// 
                   this.ok=true;

                }else{
                   this.ok=false;
                }
   }
}




`7、配置web.xml“

<servlet-mapping>
    <servlet-name>check</servlet-name>
    <url-pattern>/check</url-pattern>
  </servlet-mapping>
   <servlet>
    <servlet-name>check</servlet-name>
    <servlet-class>servlet.Check</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

“`