需求分析:通过ajax进行登陆验证,即如果输入的用户名数据库中存在,就提示用户该用户名已经存在。
我看了下,实现不是很困难,下面是代码,写下来也算巩固ajax的知识。
1.建立一个登陆页面
<body> ajax验证用户名是否存在<p> <br> <form action="" method="get" name="form"> 输入用户名: <input type="text" id="userName" name="name" onblur="validate()"> <span id="info"></span> <br> <input type="submit" value="登陆"> </form> </body>2.上面我们看到,当用户的鼠标移开text文本框时,便会调用validate()函数,下面便是ajax的调用过程代码
<script type="text/javascript"> var req; function validate() { //获取表单提交的内容 var idField = document.getElementById("userName"); //访问DoAjax这个servlet,同时把获取的表单内容idField加入url字符串,以便传递给DoAjax var url = "./DoAjax?id=" + escape(idField.value); //创建一个XMLHttpRequest对象req if(window.XMLHttpRequest) { //IE7, Firefox, Opera支持 req = new XMLHttpRequest(); }else if(window.ActiveXObject) { //IE5,IE6支持 req = new ActiveXObject("Microsoft.XMLHTTP"); } /* open(String method,String url, boolean )函数有3个参数 method参数指定向servlet发送请求所使用的方法,有GET,POST等 boolean值指定是否异步,true为使用,false为不使用。 我们使用异步才能体会到Ajax强大的异步功能。 */ req.open("GET", url, true); //onreadystatechange属性存有处理服务器响应的函数,有5个取值分别代表不同状态 req.onreadystatechange = callback; //send函数发送请求 req.send(null); } function callback() { if(req.readyState == 4 && req.status == 200) { var check = req.responseText; show (check); } } function show(str) { if(str == "OK") { var show = "<font color='green'>恭喜!!用户名可用!</font>"; document.getElementById("info").innerHTML = show; } else if( str == "NO") { var show = "<font color='red'>对不起,用户名已经存在!!请重新输入!</font>"; document.getElementById("info").innerHTML = show; } } </script>3.由于要进行后台数据库的验证,因而数据库的建立是必不可少的,下面是数据库的建表语句
CREATE TABLE `t_user` (
`id` int(11) NOT NULL,
`name` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DoAjaxServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); try { response.setContentType("text/html"); response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); String name = request.getParameter("id"); try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/login","root","sa"); String sql="select * from t_user where name=?"; PreparedStatement pst=conn.prepareStatement(sql); pst.setString(1,name); ResultSet rs = pst.executeQuery(); //如果用户名存在,则返回一个用户名已经存在的信息 if(rs.next()){ out.write("NO"); } else { out.write("OK"); } } catch (SQLException e) { e.printStackTrace(); } finally { out.close(); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override public String getServletInfo() { return "Short description"; } }