ajax技术的实现流程:
1.xmlHttp = new XMLHttpRequest(); //创建XMLHttpRequest对象。
2.xmlHttp.open("GET",url,true); //注册处理事件的url
3.xmlHttp.onreadystatechange = callback; //注册回传函数
4.xmlHttp.send(null); //发送请求
5.function callback(){ //在回调方法中进行请求状态码判断。
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
showResult();//回传处理 //请求回应顺利,就执行回传处理。
}
}
}
6.function showResult() { //读取请求得到的信息。进行分支处理。
var message = xmlHttp.responseXML.getElementsByTagName("message")[0];
var msg = message.firstChild.data;
if(msg=="0"){
nameEnable = true;
checkUserNameMsg.innerHTML = "用户名可以使用";
return true;
}else if(msg=="1"){
nameEnable = false;
checkUserNameMsg.innerHTML = " 用户名已存在,请重新输入";
return false;
}
}//end function
以下是一个完整的例子:
jsp页面。在用户名字段失去焦点时,进行ajax验证用户名
本实例使用的是Mysql 数据库。user_info数据表。
字段:
id int自增长,主键
user_name varchar(20) null
user_pwd varchar(16) null
使用Hibernate框架反向数据表为实体Bean
reg.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %>
Servlet文件Check.java
package com.ajax1.servlets; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ajax1.hbm.UserInfoDAO; /** * @author hanson * @created Jul 24, 2009 5:01:16 PM * @version V1.0.0 */ public class Check extends HttpServlet { /** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Serverlet根据请求的参数,验证完成后,以xml格式写下验证信息。 //供JSP页面的XMLHttpRequest对象读取。 response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); //取得前台参数。 String username=request.getParameter("name"); //参数解密 username = EscapeUnescape.unescape(username);//将字符串反编码,得到Unicode数据 UserInfoDAO dao = new UserInfoDAO(); //验证用户名 List list = dao.findByProperty("userName", username); //根据DB返回的结果,写下相应的XML信息。 if (list!=null&&list.size()>0){ response.getWriter().write("
URL解码类EscapeUnescape.java
/** * */ package com.ajax1.servlets; /** * @author hanson * @created Jul 24, 2009 5:12:50 PM * @version V1.0.0 */ public class EscapeUnescape { /** * 对字符串进行编码的,使之成为url格式的数据 * @param src 要编码的字符串 * @return 返回编码后的字符串 */ public static String escape(String src) { int i; char j; StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length() * 6); for (i = 0; i < src.length(); i++) { j = src.charAt(i); if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j)) tmp.append(j); else if (j < 256) { tmp.append("%"); if (j < 16) tmp.append("0"); tmp.append(Integer.toString(j, 16)); } else { tmp.append("%u"); tmp.append(Integer.toString(j, 16)); } } return tmp.toString(); } /** * 对url格式的数据进行解码,使之成为可用的Unicode数据 * @param src 需要解码的字符串,通常是在jsp页面使用escape()方法进行编码得到 * @return 返回解码后的数据 */ public static String unescape(String src) { StringBuffer tmp = new StringBuffer(); tmp.ensureCapacity(src.length()); int lastPos = 0, pos = 0; char ch; while (lastPos < src.length()) { pos = src.indexOf("%", lastPos); if (pos == lastPos) { if (src.charAt(pos + 1) == 'u') { ch = (char) Integer.parseInt(src .substring(pos + 2, pos + 6), 16); tmp.append(ch); lastPos = pos + 6; } else { ch = (char) Integer.parseInt(src .substring(pos + 1, pos + 3), 16); tmp.append(ch); lastPos = pos + 3; } } else { if (pos == -1) { tmp.append(src.substring(lastPos)); lastPos = src.length(); } else { tmp.append(src.substring(lastPos, pos)); lastPos = pos; } } } return tmp.toString(); } }