AJAX02

最基本版实现ajax

package yosemite.test.ajax;

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;

public class AJAXServer extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6353298670439521404L;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		try {
			// request.setCharacterEncoding("UTF-8");
			// response.setContentType("text/html;charset=gb18030");
			resp.setContentType("text/html;charset=UTF-8");
			PrintWriter out = resp.getWriter();

			Integer inte = (Integer) req.getSession().getAttribute("total");
			int temp = 0;
			if (inte == null) {
				temp = 1;
			} else {
				temp = inte.intValue() + 1;
			}
			req.getSession().setAttribute("total", temp);

			// 1.取参数
			String old = req.getParameter("name");
			String name = new String(old.getBytes("iso8859-1"),"UTF-8");
			// 2.检查参数是否有问题
			if (old == null || old.length() == 0) {
				out.println("用户名不能为空");
			} else {
				// 3.校验操作
				// String name = old;
				if (name.equals("wangxingkui")) {
					// 4。和传统应用不同之处。这一步需要将用户感兴趣的数据返回给页面段,而不是将一个新的页面发送给用户
					// 写法没有变化,本质发生了改变
					out.println("用户名[" + name + "]已经存在,请使用其他用户名, " + temp);
				} else {
					out.println("用户名[" + name + "]尚未存在,可以使用该用户名注册, " + temp);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}

}
<!DOCTYPE html>
<html>
  <head>
    <title>用户名校验ajax实例2</title>
	
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    <script src="js/verify2.js"></script>
    
  </head>
  
  <body>
           用户名校验的ajax实例,请输入用户名: <br/>
    <!--ajax方式下不需要使用表单来进行数据提交,因此不用写表单标签-->
    <!--ajax方式不需要name属性,需要一个id的属性-->
    <input type="text" id="userName" />
    <input type="button" value="校验" onclick="verify()"/>
    
    <!--这个div用于存放服务器段返回的信息,开始为空-->
    <!--id属性定义是为了利用dom的方式找到某一个节点,进行操作-->
    <div id="result"></div>
    
    <!-- <div id="result">123</div><div>456</div> -->
    <!-- <span>123</span><span>456</span> -->
    <!-- div和span的直观差异,div中的内容独占行,span中的内容和前后其他内容相处良好 -->
  </body>
</html>
//这个方法将使用XMLHTTPRequest对象来进行AJAX的异步数据交互
var xmlhttp;
function verify() {
	// 0。使用dom的方式获取文本框中的值
	// document.getElementById("userName")是dom中获取元素节点的一种方法,一个元素节点对应HTML页面中的一个标签,如<input>
	// .value可以获取一个元素节点的value属性值
	var userName = document.getElementById("userName").value;

	// 1.创建XMLHttpRequest对象
	// 这是XMLHttpReuquest对象无部使用中最复杂的一步
	// 需要针对IE和其他类型的浏览器建立这个对象的不同方式写不同的代码

	if (window.XMLHttpRequest) {
		// 针对FireFox,Mozillar,Opera,Safari,IE7,IE8
		xmlhttp = new XMLHttpRequest();
		// 针对某些特定版本的mozillar浏览器的BUG进行修正
		if (xmlhttp.overrideMimeType) {
			xmlhttp.overrideMimeType("text/xml");
		}
	} else if (window.ActiveXObject) {
		// 针对IE6,IE5.5,IE5
		// 两个可以用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中
		// 排在前面的版本较新
		var activexName = [ "MSXML2.XMLHTTP", "Microsoft.XMLHTTP" ];
		for (var i = 0; i < activexName.length; i++) {
			try {
				// 取出一个控件名进行创建,如果创建成功就终止循环
				// 如果创建失败,回抛出异常,然后可以继续循环,继续尝试创建
				xmlhttp = new ActiveXObject(activexName[i]);
				break;
			} catch (e) {
			}
		}
	}
//	确认XMLHTtpRequest对象创建成功
	if (!xmlhttp) {
		alert("XMLHttpRequest对象创建失败!!");
		return;
	} else {
		alert(xmlhttp.readyState);
	}

	// 2.注册回调函数
	// 注册回调函数时,之需要函数名,不要加括号
	// 我们需要将函数名注册,如果加上括号,就会把函数的返回值注册上,这是错误的
	xmlhttp.onreadystatechange = callback;

	// 3。设置连接信息
	// 第一个参数表示http的请求方式,支持所有http的请求方式,主要使用get和post
	// 第二个参数表示请求的url地址,get方式请求的参数也在url中
	// 第三个参数表示采用异步还是同步方式交互,true表示异步
	xmlhttp.open("GET", "AJAXServer?name=" + userName, true);

	// POST方式请求的代码
	// xmlhttp.open("POST","AJAXServer",true);
	// POST方式需要自己设置http的请求头
	// xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	// POST方式发送数据
	// xmlhttp.send("name=" + userName);

	// 4.发送数据,开始和服务器端进行交互
	// 同步方式下,send这句话会在服务器段数据回来后才执行完
	// 异步方式下,send这句话会立即完成执行
	xmlhttp.send(); //xmlhttp.send(null);
}

// 回调函数
function callback() {
	alert(xmlhttp.readyState);
	// 5。接收响应数据
	// 判断对象的状态是交互完成
	if (xmlhttp.readyState == 4) {
		// 判断http的交互是否成功
		if (xmlhttp.status == 200) {
			// 获取服务漆器端返回的数据
			// 获取服务器段输出的纯文本数据
			var responseText = xmlhttp.responseText;
			// 将数据显示在页面上
			// 通过dom的方式找到div标签所对应的元素节点
			var divNode = document.getElementById("result");
			// 设置元素节点中的html内容
			divNode.innerHTML = responseText;
		} else {
			alert("出错了!!!");
		}
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>yosemite</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
   
  <servlet>
      <servlet-name>AJAXServer</servlet-name>
      <servlet-class>yosemite.test.ajax.AJAXServer</servlet-class>
  </servlet>
   
  <servlet-mapping>
      <servlet-name>AJAXServer</servlet-name>
      <url-pattern>/AJAXServer</url-pattern>
  </servlet-mapping>
</web-app>


你可能感兴趣的:(AJAX02)