基于ajax的简单的登录验证 .
2010-07-15 22:46 96人阅读 评论(2) 收藏 举报
Ajax是多种技术的集合(Asynchronous JavaScript and XML)
1.JavaScript负责操作XMlHttpRequest对象来跟数据库打交道
2.DOM(文档对象模型)负责数据的动态显示和交互
3.XML(可扩展标识语言)负责数据的交换和处理
4.XMLHttpRequest负责数据的异步读取
5.XHTML(可扩展超文本标记语言)和CSS(层叠样式表)编写结构化的web页面
6.json
优点
1.无刷新请求处理数据。
缺点
1.要求IE5.0,Mozilla1.0,NetScape7以上。
2.对流媒体和PDA之类的支持不是很好。
Ajax的一般流程(Request/Server模式)
对象初始化--->发送请求--->服务器接受--->服务器响应并返回--->客户端接受--->修改客户端页面内容
首先写一个JSP页面(里面包含JS代码),如下:
Code:
01.<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
02.<html>
01. <head>
02. <title> 登录页面 </title>
03. <link rel=stylesheet href="css/login.css" type="text/css">
04. <script type="text/javascript">
05. //声明一个全局的XMLHttpRequest对象
06. var xmlhttp_request;
07. //声明一个标签
08. var message;
09. function check(){
10. var username=document.getElementById("usernameID").value;
11. message=document.getElementById("message");
12. message.innerHTML="正在检测用户名.....";
13. try{
14.//用于获取支持IE浏览器的XMLHttpRequest对象
15.if(window.ActiveXObject){
16.for( var i = 5;i; i-- ){
17.try{
18.if( i == 2 ){
19.xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP");//大于5.0
01.//
02.alert("1:"+xmlhttp_request.readyState);
03.}
04.else{
05.xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );////3.0或4.0, 5.0
01.xmlhttp_request.setRequestHeader("Content-Type","text/xml");
02.xmlhttp_request.setRequestHeader("Charset","gb2312");
03. }
04. break;
05. }catch(e){
06. xmlhttp_request = false;
07. }
08. }
09. }
10. else if(window.XMLHttpRequest)//非IE浏览器Mozilla﹑Netscape﹑Safari等浏览器
11. {
12. xmlhttp_request = new XMLHttpRequest();
13. if (xmlhttp_request.overrideMimeType){
14. xmlhttp_request.overrideMimeType('text/xml');
15. }
16. }
17. }
18. catch(e){
19. xmlhttp_request = false;
20.}
21.//打开一个连接
22.alert("2:"+xmlhttp_request.readyState);
23.alert(username);
24.//xmlhttp_request.open("get","http://localhost:8080/ajax/check?name="+username,true);
25.xmlhttp_request.open("post","http://localhost:8080/ajax/check",true);
26.//POST请求要设置请求头
27.xmlhttp_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
28.//指定处理服务器端相应的函数
29.alert("3:"+xmlhttp_request.readyState);
30.xmlhttp_request.onreadystatechange=handle;
01.//get发送请求
02.//xmlhttp_request.send(null);
03.//post发送请求
04.xmlhttp_request.send("name="+username);
05.}
06.
07.function handle(){
08.alert("4:"+xmlhttp_request.readyState);
09.if(xmlhttp_request.readyState==4){
10.alert(xmlhttp_request.status);
11.if(xmlhttp_request.status==200){
12.var result=xmlhttp_request.responseText;
13.alert(result);
14.message.innerHTML=result;
01.alert("5:"+xmlhttp_request.readyState);
02.}
03.}
04.}
05.
06. </script>
07. </head>
08. <body>
09. <h1 align="center">用户登录页面</h1>
10. <hr color="blue">
11. <div align="center">
12. <form action="login.do" method="post">
13. <table cellspacing=5 border=5 bodercolor=#ffaa00 >
14. <tr><th colspan="3" align="center" bgcolor=#ffaa00>用户登录</th></tr>
15. <tr>
16. <th rowspan="3" background="images/2.jpg" style="width=90px"></th>
17. <td>用户名:</td><td><input id="usernameID" type="text" class="message" name="username" onBlur="check()"><label id="message"></label></td></tr>
18. <tr><td>密 码:</td><td><input id="userpasswordID" class="message" type="password" name="userpassword" ></td></tr>
19. <tr><td colspan="2" align="center"><input type="submit" value="注册"> <input type="reset" value="重置"></td></tr>
20. </table>
21. </form>
22. </div>
23. </body>
24.</html>
本页面中的重点就是js代码中的xmlhttp_request对象,它是XMLHTTP组件的对象,XMLHttpRequest对象在大部分浏览器上已经实现而且拥有一个简单的接口允许数据从客户端传递到服务端,但并不会打断用户当前的操作。使用XMLHttpRequest传送的数据可以是任何格式,虽然从名字上建议是XML格式的数据。
接下来我们写一个写一个serlet来处理xmlhttp_request对象发送过来的数据,当前例子传送的数据为username的值,如下:
Code:
01.package myclass.serlet;
02.
03.import java.io.IOException;
01.import java.io.PrintWriter;
01.
02.import javax.servlet.ServletException;
01.import javax.servlet.http.HttpServlet;
01.import javax.servlet.http.HttpServletRequest;
01.import javax.servlet.http.HttpServletResponse;
01.
02.public class Check extends HttpServlet {
01.
02. protected void service(HttpServletRequest request, HttpServletResponse response)
03. throws ServletException, IOException {
04. //输出流
05. PrintWriter out=null;
06. out=response.getWriter();
07. String name=request.getParameter("name");
08. System.out.print(name);
09. if("liping".equals(name)){
10. out.println("sorry,user name:"+name+" has existed");
11. }else{
12. out.println("congratulation,user name: "+name+" can use");
13. }
14. out.flush();
15. out.close();
16. }
17.}
servlet中使用printwriter输出流来向客户端返回处理结果,前面JS中使用function handle()函数来处理,这样就实现了AJAX局部刷��。用户在填写用户名后,光标一离开,就产生一个onchange()事件,用户名的值就立刻通过xmlhttp_request对象对值传到servlet中进行验证,验证后马上把信息返回,显示到页面,实现了局部刷新的效果。
这就是AJAX。