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>
“`