神奇的Ajax

Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术。

Ajax = 异步 JavaScriptXML标准通用标记语言的子集)。

为什么要学习Ajax:

在早期的网页开发中,在与用户进行交互主要靠用户发送请求,服务器进行响应。传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。这样一来,占用了大量的服务器资源,效率非常低。当时google最早使用了Ajax技术,Ajax 是一种用于创建快速动态网页的技术。它无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

 

 

举个Ajax在生活中使用的例子:

 我们在进行百度账号注册的时候往往要先填写自己的信息,如果你输入的用户名已经被使用了就会出现如上图的红色警告信息:此用户名太受欢迎,请更换一个。那么这是如何实现的呢?这就是Ajax技术的应用。

首先说一下传统的网页技术是如何实现注册的:传统的网页就直接给你一个注册页面,然后你一项一项去填写自己的信息,填写完毕后点击注册按钮,如果你运气好的话,填写的用户名没有人用,那么恭喜你注册成功。如果用户名被占用了,那么问题就来了,辛辛苦苦一大堆信息填写完了,满心欢喜点了注册按钮,这时候通过表单提交方式将你填写的信息传到业务层进行处理,再与数据库进行查询,这时候发现你填写的用户名已经存在了,存在了你就不能用了,所以系统做出自己的响应:重新发送一个注册页面给你,让你重新再填写自己所有的信息,这时候你还不得崩溃了。如果你现在还这样做网页肯定没人愿意用。

但是现在使用了Ajax,服务器对于用户的请求只需要局部刷新就行,你注册的时候只要一输入用户名,当你鼠标离开输入框就会触发事先绑定好的事件,然后直接与数据库进行交互,如果用户名不存在,就提醒你可以使用这个用户名进行注册,如果用户名已经存在,就会提醒你更换用户名。这样就可以大大的提高网页响应效率。

了解了Ajax后,自己做一下:

第一步:

制作一个简单的注册页面:register.jsp

1.我们在创建用户名的输入框中绑定οnblur="checkuser()"事件

2.在checkuser()中创建xmlhttprequest(xhr)对象

3.设置状态改变回调函数cb

4.设置请求方式和路径(这里用Servlet,的get方式,将输入框的值也传过去)

5.发送请求

6.处理响应内容(在回调函数中处理)

7.为了能看的方便,我们在输入框后面加上提示信息<span id="msg"></span>然后根据回调函数中相应的信息显示相应的提示内容

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>register</title>
</head>
<style type="text/css">
body{
	margin-left:700px;
	margin-top:100px;
} 
table{
	width:500px;
	height:320px;
	border:1px solid #009999;
}
table tr{
	border:1px solid #009999;
}
table tr td{
	border:1px solid #009999;
	text-align:left;
}
</style>
<script type="text/javascript">
	var xhr;
        //1.创建xmlhttprequest(xhr)对象
	function checkuser(){
		try{
		xhr=new XMLHttpRequest();
		
		}catch(e){
			xhr=new ActiveXObject("Microsoft.XMLHTTP");
		}
		//alert(xhr);
	//2.设置状态改变回调函数
	xhr.onreadystatechange=cb;
	var uname=document.getElementById("uname");
	//3.设置请求方式和路径
	xhr.open("GET","CheckUserServlet?un="+uname.value);
	//4.发送请求
	xhr.send();
	}
	//5.处理响应内容
	function cb(){
		//完成响应
		if(xhr.readyState==4){
			//成功响应
			if(xhr.status==200){
				var resText=xhr.responseText;
				var msg=document.getElementById("msg");
				//alert(resText);
				if(resText=="t"){
					msg.style.color="red";
					msg.innerHTML="账号已经存在";
				}else{
					msg.style.color="green";
					msg.innerHTML="账号可以使用";
				}
			}
		}
		//alert(xhr.readyState);
	}
</script>
<body >
<div id="all">
	<form action="RegisterServlet">
	<table>
	<tr>
	<td align="right" >创建用户名:</td>
	<td><input type="text" id="uname" name="username" onblur="checkuser()"/><span id="msg"></span></td>
	</tr>
	
	<tr>
	<td align="right">创建密码:</td>
	<td><input type="password" name="userpwd"/></td>
	</tr>
	
	<tr>
	<td align="right">注册邮箱:</td>
	<td><input type="text" name="mail"/></td>
	</tr>

	<tr>
	<td align="right">地址:</td>
	<td><input type="text" name="address"/></td>
	</tr>
	
	<tr>
	<td align="right">爱好:</td>
	<td><input type="text" name="hobby"/></td>
	</tr>
	
	<tr>
	<td align="right"><input type="submit" value="提交"/></td>
	<td align="right"><input type="reset" value="重置"/></td>
	</tr>
</table >
</form>
</div>
</body>
</html>

也可以将它换成jQuery

$(function(){
		$("#uname").blur(function(){
			$.post("CheckUserServlet",{un:this.value},function(resText){
				if(resText=="t"){
					$("#msg").css("color","red").html("此用户名太受欢迎,请更换一个");
				}else{
					$("#msg").css("color","green").html("恭喜您:账号可以使用");
				}
			})
		})
	})

来看一下效果,简单做的,页面较丑

 二、写相应的CheckUserServlet

1.获取请求参数,得到注册页面输入的用户名

2.业务响应   (从数据库查询已存在的用户,我的数据库已经提前弄好了,业务层也写好了相应的方法,所以可以直接使用)

3.响应,如果用户应经存在,输出t,不存在,输出f

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xintouyun.jweb.entity.User;
import com.xintouyun.jweb.service.UserService;
import com.xintouyun.jweb.service.impl.UserServiceImpl;

public class CheckUserServlet extends HttpServlet{
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException{		
		PrintWriter out=response.getWriter();
		//1.获取请求参数
		String uname=request.getParameter("un");
		//System.out.println("uname"+uname);
		 // 2.业务处理,根据用户名查询数据库中的用户
		UserService userService = new UserServiceImpl();
		User user= userService.getUser(uname);
		//System.out.println("username:"+user.getUsername());
		 //3.响应
		if(user!=null) {
			out.print("t");
		}else {
			out.print("f");
		}
		out.close();
	}
}

 

三、配置xml文件

<servlet>
		<servlet-name>CheckUserServlet</servlet-name>
		<servlet-class>com.xintouyun.jweb.servlet.CheckUserServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>CheckUserServlet</servlet-name>
		<!--访问servlet的路径:必须以/开头,这个/代表应用的根 -->
		<url-pattern>/CheckUserServlet</url-pattern>
	</servlet-mapping>

四、重启服务器,测试一下:

我之前已经存储好的数据库为:

我测试一下admin:

因为admin已经存在,所以当我输入admin鼠标离开输入框的时候,就会出现提示信息账号不可用

输入数据库不存在的账号ad就会显示账号可以使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值