[AJAX-JSP]验证用户名存在
[LIUYONGCN]
[2011-06-30]
[http://www.cnblogs.com/liuyongcn/]
一 原理
1-什么是AJAX
AJAX(Asynchronous JavaScript and Xml)异步的JavaScript和Xml,AJAX整合了JavaScript、Xml和CSS。我们通过JavaScript和XMLHttpRequest对象完成发送请求到服务器并获得返回结果的任务,然后用JavaScript更新局部的网页。使用AJAX 避免了重复加栽页,减少了带宽,同时还提高了用户体验
2-XMLHttpRequest对象
XMLHttpRequest可以提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在后台向客户端发送数据。XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。XMLHttpRequest 可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个 DOM 文档形式返回内容。
readyState属性
HTTP 请求的状态.当一个 XMLHttpRequest 初次创建时,这个属性的值从 0 开始,直到接收到完整的 HTTP 响应,这个值增加到 4。
5 个状态中每一个都有一个相关联的非正式的名称,下表列出了状态、名称和含义:
状态 名称 描述
0 Uninitialized 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。
1 Open open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。
2 Sent Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。
3 Receiving 所有响应头部都已经接收到。响应体开始接收但未完成。
4 Loaded HTTP 响应已经完全接收。
二 AJAX实现简单的登录验证的例子
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<html>
<head>
<script type="text/javascript">
//创建xmlHttpRequest
var xmlHttpRequest ;
function createXMLHttpRequest(){
if(window.ActiveXObject){
//如果是IE浏览器
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP") ;
}
else if(window.XMLHttpRequest){
//如果是非IE浏览器
xmlHttpRequest = new XMLHttpRequest() ;
}
}
//检查姓名
function checku(name){
//获取登陆名
var uname=name.value;
if(!uname){
//登陆名为空显示错误信息,并获取文本框焦点
document.getElementById("div").innerHTML="<font size='2' color='orange'> 用户名不能为空</font>";
name.focus();
return;
}
//访问地址,如果是servlet
//var url="LoginServlet?name="+uname;
//访问地址,如果使用action,login.do是对应loginAction doLogin是action中的一个方法
var url="login.do?operate=doLogin&name="+uname;
//1创建XmlHttpRequest组键
createXMLHttpRequest();
//2初始化XmlHttpRequest,true表示使用异步,false表示同步
xmlHttpRequest.open("GET",url,true) ;
//3创建回调用函数
xmlHttpRequest.onreadystatechange = back ;
//4发送请求
xmlHttpRequest.send(null) ;;
}
//回调函数,完成操作后,最后调用这个函数显示结果
function back(){
//4表示完成 200表示运行正常
if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
var b=xmlHttpRequest.responseText;//获取PrintWriter输出信息
if(b=="true"){
document.getElementById("div").innerHTML="<font size='2' color='orange'> 用户名已存在</font>"
}else{
document.getElementById("div").innerHTML="<font size='2' color='green'> √</font>"
}
}
}
</script>
<title>This is a ajax test</title>
</head>
<body>
<form action="index.jsp" method="post">
<html:form action="/login">
name : <html:text property="name" onblur="return checku(this)" /><div id="div" style="display:inline" ></div>
<br/>
<html:submit/><html:cancel/>
</html:form>
</form>
</body>
</html>
LoginAction中的 doLogin方法。用于测试
public ActionForward doLogin(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html;charset=gb2312");
PrintWriter out;
try {
out = response.getWriter();
UserBiz biz=new UserBiz();
User user=new User();
user.setName(request.getParameter("name"));
System.out.println(request.getParameter("name"));
if(biz.checkUser(user)){
out.print("true");
}else{
out.print("false");
}
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}