Ajax学习(一)

目录:

1、Ajax应用场景:

2、Ajax优缺点:

3、一次完整的HTTP请求,一般有七个步骤:

4、什么叫Document对象?

5、Ajax发送异步请求步骤:

6、响应内容为xml数据:

7、测试代码:


1、Ajax应用场景:

Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)

(1)搜索框

(2)用户注册时校验用户名是否被注册

(3)分页

2、Ajax优缺点:

(1)优点:①异步交互,增强用户体验

②服务器部分响应,减轻服务器压力,提高性能

(2)缺点:① 不能应用在全部场景

②增多了对服务器的访问次数,给服务器带来压力

3、一次完整的HTTP请求,一般有七个步骤:

①建立TCP连接

②Web浏览器向Web服务器发送请求命令

③Web浏览器发送请求头信息

④Web服务器响应

⑤Web服务器发送响应头信息

⑥Web服务器向浏览器发送数据

⑦Web服务器关闭TCP连接

4、什么叫Document对象?

每个载入浏览器的HTML文档都会成为Document对象,Document对象使我们可以从脚本中对HTML页面的所有元素进行访问。

5、Ajax发送异步请求步骤:

(1)得到XMLHttpRequest

①大多数浏览器支持:var request = new XMLHttpRequest();

②IE 6.0:var request = new ActiveXObject(“Msxml2.XMLHTTP”);

③IE 5.5以及更早版本:var request = new ActiveXObject(“Microsoft.XMLHTTP”);

(2)打开与服务器的连接

XMLHttpRequest.open(method,url,async):

三个参数:

①请求方式:GET、POST

②请求URL:指定服务器的资源

③请求是否为异步:true发送异步请求,false发送同步请求

request.open(“GET”,“/Learn201705/Servlet1”,“true”);

(3)发送请求:

XMLHttpRequest.send(string):

参数:

请求体内容,

①当为GET请求时,其实是没有请求体的,所有参数都拼接在url当中,但必须给出request.send(null),如果不给null可能会造成火狐浏览器无法发送。

②当为POST请求时,在open和send之间加入以下句子:

request.open(“POST”,“true”);

request.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);

request.send(“name=remoa&sex=male”);//发送请求时指定请求体

(4)给异步对象的onreadystatechange事件注册监听器:

①XMLHttpRequest对象有一个onreadystatechange事件,它会在XMLHttpRequest对象的状态readyState属性的值发生变化时被调用。其五种状态分别是:

0:初始化未完成状态,只是创建了XMLHttpRequest对象,还未调用open()方法。

1:请求已开始,open()方法已调用,但还没有调用send()方法。

2:请求发送完成状态,send()方法已调用,也就是接收到头信息了。

3:开始读取服务器响应,也就是接收到响应主体了,但不表示响应结束了。

4:读取服务器响应结束,响应完成。

onreadystatechange事件会在readyState属性状态为1、2、3、4时引发。

②得到XMLHttpRequest对象的状态:

var state = request.readyState;//可能是0、1、2、3、4

我们一般对状态为200且readyState属性值为4时进行处理,即

request.onreadystatechange = function(){

if(request.readyState == 4 && request.status == 200){

request.responseText //开始做一些事情

}

};

③得到服务器响应的状态码:

var status = request.status;//以数字形式返回HTTP状态码,例如404、500、302

var status = request.statusText;//以文本形式返回HTTP状态码

④得到服务器响应的内容

var content = request.responseText; //获得字符串形式的响应数据

var content = request.responseXML;//获得XML形式的响应数据

⑤getAllResponseHeader():获取所有的响应报头

⑥getResponseHeader():查询响应中的某个字段的值

6、响应内容为xml数据:

①服务器端:

设置响应内容类型:Content-Type,值为text/xml;charset=utf-8

response.setContentType("text/xml;charset=utf-8");

②客户端:

var doc = request.responseXML;//得到的是document对象

7、测试代码:
(1)GET请求与POST请求区别:
①GET请求页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Get请求</title>
		<script type="text/javascript">
			//创建异步对象
			function createXMLHttpRequest(){
				try{
					return new XMLHttpRequest();
				}catch(e){
					try{
						//IE6.0
						return new ActiveXObject("Msxml2.XMLHTTP");
					}catch(e){
						try{
							//IE5.5及更早版本
							return new ActiveObject("Microsoft.XMLHTTP");
						}catch(e){
							throw e;
						}
					}
				}
			};
		
			//在文档加载完毕后马上执行
			window.onload = function(){
				//获取按钮
				var btn = document.getElementById("btn");
				//给按钮的点击事件注册监听
				btn.onclick = function(){
					//使用ajax的四步操作
					//1、得到异步对象
					var request = createXMLHttpRequest(); 
					//2、打开与服务器的连接
					request.open("GET","/Learn201705/LoginServlet",true);
					//3、发送请求
					request.send(null);//不给null值FireFox可能无法发送
					//4、给异步对象的onreadystatechange事件注册监听器
					request.onreadystatechange = function(){
						//双重判断,request的状态为4(服务器响应结束),以及服务器的状态码为200(响应成功)
						if(request.status = 200 && request.readyState == 4){
							//获取服务器的响应结果
							var content = request.responseText;
							var h1Content = document.getElementById("show");
							h1Content.innerHTML = content;
						}
					};
				};
			};
		</script>
	</head>
	<body>
		<button id="btn">点击这里</button>
		<h1 id="show"></h1>
	</body>
</html>
②POST请求页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Post请求</title>
		<script type="text/javascript">
			//创建异步对象
			function createXMLHttpRequest(){
				try{
					return new XMLHttpRequest();
				}catch(e){
					try{
						//IE6.0
						return new ActiveXObject("Msxml2.XMLHTTP");
					}catch(e){
						try{
							//IE5.5及更早版本
							return new ActiveObject("Microsoft.XMLHTTP");
						}catch(e){
							throw e;
						}
					}
				}
			};
		
			//在文档加载完毕后马上执行
			window.onload = function(){
				//获取按钮
				var btn = document.getElementById("btn");
				//给按钮的点击事件注册监听
				btn.onclick = function(){
					//使用ajax的四步操作
					//1、得到异步对象
					var request = createXMLHttpRequest(); 
					//2、打开与服务器的连接
					request.open("POST",true);
					request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
					//3、发送请求
					request.send("account=小邓&password=123456");//不给null值FireFox可能无法发送
					//4、给异步对象的onreadystatechange事件注册监听器
					request.onreadystatechange = function(){
						//双重判断,request的状态为4(服务器响应结束),以及服务器的状态码为200(响应成功)
						if(request.status = 200 && request.readyState == 4){
							//获取服务器的响应结果
							var content = request.responseText;
							var h1Content = document.getElementById("show");
							h1Content.innerHTML = content;
						}
					};
				};
			};
		</script>
	</head>
	<body>
		<button id="btn">点击这里</button>
		<h1 id="show"></h1>
	</body>
</html>
③Servlet代码:
package com.remoa;

import java.io.IOException;
import javax.servlet.servletexception;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(value="/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,HttpServletResponse response) throws servletexception,IOException {
		System.out.println("------------doGet------------");
		response.getWriter().print("Hello Remoa");
	}

	protected void doPost(HttpServletRequest request,IOException {
		response.setContentType("text/html;charset=utf-8");//将响应编码设置为utf-8
		request.setCharacterEncoding("utf-8");//将请求编码设置为utf-8
		String account = request.getParameter("account");
		String password = request.getParameter("password");
		System.out.println("login");
		response.getWriter().print("用户" + account + "已登录,密码为" + password);
	}

}
④运行结果:
图7.1 GET请求运行结果

图7.2 POST请求运行结果

(2)注册时判断用户名是否已注册
①注册页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
	<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<script type="text/javascript" src="<%=request.getcontextpath() %>/bootstrap/js/jquery.min.js" ></script>
	<script type="text/javascript" src="<%=request.getcontextpath() %>/bootstrap/js/bootstrap.min.js" ></script>
	<link rel="stylesheet" type="text/css" href="<%=request.getcontextpath() %>/bootstrap/css/bootstrap.min.css" >
	<title>用户注册</title>
	<script type="text/javascript">
		function createXMLHttpRequest(){
			try{
				return new XMLHttpRequest();
			}catch(e){
				try{
					//IE6.0
					return new ActiveXObject("Msxml2.XMLHTTP");
				}catch(e){
					try{
						//IE5.5及更早版本
						return new ActiveObject("Microsoft.XMLHTTP");
					}catch(e){
						throw e;
					}
				}
			}
		};
		
		window.onload = function(){
			var account = document.getElementById("account");
			account.onblur = function(){
				var request = createXMLHttpRequest();
				request.open("POST","/Learn201705/ValidateLogin",true);
				request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				request.send("account=" + account.value);
				request.onreadystatechange = function(){
					if(request.status == 200 && request.readyState == 4){
						//获取服务器的响应,判断是否为1,如果为1,则表示已注册,添加内容,如果为0,则表示该账户名未注册,什么都不做
						var text = request.responseText;
						var spanContent = document.getElementById("accountError");
						if(text == 1){
							spanContent.innerHTML = "<img src='img/false.png' class='wrong' />用户名已注册!";
						}else{
							if(account.value.length == 0 || account.value.substring(0,account.value.length) == 0){
								spanContent.innerHTML = "<img src='img/false.png' class='wrong'/>输入不能为空或纯空格";
							}else{
								spanContent.innerHTML = "<img src='img/true.png' />输入正确";
							}
						}
					}
				};
			};
		};
	
		function CheckStrength(pwd){
			var leftColor,middleColor,rightColor,colorHtml;
			var m = 0;
			var Modes = 0;
			for(i = 0; i < pwd.length; i++){
				var charType = 0;
				var t = pwd.charCodeAt(i);
				//当字符为数字时,
				if(t >= 48 && t <= 57){
					charType = 1;
				}
				//当字符为小写字母时
				else if(t >= 97 && t <= 122){
					charType = 2;
				}
				//当字符为大写字母时
				else if(t >= 65 && t <= 90){
					charType = 4;
				}
				//为其他字符时
				else{
					charType = 4;
				}
				Modes |= charType;//按位或
			}
			//当密码只由一种元素组成或小于六位,判定为弱
			//当密码由两种元素组成且大于等于六位时,判定为中
			//当密码由三种元素组成且大于等于六位时,判定为强
			//&的用法:两个操作数中的位都为1,结果才为1,否则为0
			for(i = 0; i < 4; i++){
				if(Modes & 1){
					m++;//m为0为无密码,m为1为弱密码,m为2为中密码,m为3为强密码
				}
				Modes>>>=1;//无符号右移,空位用0补齐
			} 
			
			//六位以下,都为弱密码
			if(0 < pwd.length && pwd.length < 6){
				m = 1;
			}
			switch(m){
				//弱密码
				case 1:
					leftColor="pwd pwd_weak";
					middleColor="pwd";
					rightColor="pwd";
					colorHtml="弱";
					break;
				//中密码
				case 2:
					leftColor="pwd pwd_medium";
					middleColor="pwd pwd_medium";
					rightColor="pwd";
					colorHtml="中";
					break;
				//强密码
				case 3:
					leftColor="pwd pwd_strong";
					middleColor="pwd pwd_strong";
					rightColor="pwd pwd_strong";
					colorHtml="强";
					break;
				default:
					leftColor="pwd";
					middleColor="pwd";
					rightColor="pwd";
					colorHtml="无";
					break;
			}
			document.getElementById("pwd_weak").className = leftColor;
			document.getElementById("pwd_medium").className = middleColor;
			document.getElementById("pwd_strong").className = rightColor;
			document.getElementById("pwd_medium").innerHTML = colorHtml;
		};
		
		$(document).ready(function(){
			$("#account").focus(function(){
				$(this).parents(".form-group").find("#accountError").html("请输入用户名");
			});
			
			$("#password").focus(function(){
				$(this).parents(".form-group").find("#passwordError").html("请输入6-16位密码");
			});
			
			$("#password").blur(function(){
				//密码为空或长度小于6
				if($(this).val().length < 6){
					if($(this).val() == ""){
						$(this).parents(".form-group").find("#passwordError").html("<img src='img/false.png' class='wrong' />密码不能为空");
					}else{
						$(this).parents(".form-group").find("#passwordError").html("<img src='img/false.png' class='wrong' />密码长度不能少于六位");
					}
				}
				//密码长度大于16
				else if($(this).val().length > 16){
					$(this).parents(".form-group").find("#passwordError").html("<img src='img/false.png' class='wrong' />密码长度不能大于16位");
				}
				//正确情况
				else{
					$(this).parents(".form-group").find("#passwordError").html("<img src='img/true.png' />输入正确");
				}
			});
			
			$("#checkpassword").focus(function(){
				$(this).parents(".form-group").find("#checkerror").html("请再次输入以确认密码");
			});
			
			$("#checkpassword").blur(function(){
				var pwd1 = $("#password").val();
				var pwd2 = $(this).val();
				//两次密码输入一致
				if(pwd1 == pwd2){
					$(this).parents(".form-group").find("#checkerror").html("<img src='img/true.png' />输入正确");
				}
				//两次密码输入不一致
				else{
					$(this).parents(".form-group").find("#checkerror").html("<img src='img/false.png' class='wrong' />两次密码输入不一致");
				}
			});
			
			//检测出错则不能提交
			$("#submitBtn").click(function(){
				if($(this).parents().find("#account").val()=="" || $(this).parents().find("#password").val()=="" || $(this).parents().find("#checkpassword").val()==""){
					alert("请正确填写");
					return false;
				}
				else if($(this).parents().find("img").hasClass("wrong")){
					alert("请正确填写");
					return false;
				}else{
					return true;
				}
			});
		});
	</script>
	<style>
		.pwd{
			background-color:#F3F3F3;
			border:1px solid #D0D0D0;
		}
		.pwd_font{
			color:#BBBBBB;
		}
		.pwd_weak{
			background-color:red;
			border:1px solid #BB2B2B;
		}
		.pwd_medium{
			background-color:#FFD35E;
			border:1px solid #E9AE10;
		}
		.pwd_strong{
			background-color:#3ABB1C;
			border:1px solid #267A12;
		}
	</style>
</head>
<body>
	<div class="container" style="margin-top:2rem">
		<div class="row">
			<div class="col-md-3"></div>
			<div class="col-md-6">
				<form class="form-horizontal" method="post" action="RegisterServlet">
					<div class="form-group">
						<label for="account" class="control-label col-md-3">
							账户名:
						</label>
						<div class="col-md-5">
							<input type="text" class="form-control" name="account" id="account" placeholder="请输入账户名"/>
						</div>
						<div class="col-md-4">
							<span id="accountError"></span>
						</div>
					</div>
					<div class="form-group">
						<label for="password" class="control-label col-md-3">
							密码:
						</label>
						<div class="col-md-5">
							<input type="password" class="form-control" name="password" id="password" placeholder="请输入密码" onKeyUp="CheckStrength(this.value)"/>
							<table class="col-md-3 table table-condensed" cellpadding="0" border="0" cellspacing="0" style="margin-bottom:0;margin-top:5px">
								<tr align="center">
									<td id="pwd_weak" class="pwd"></td>
									<td id="pwd_medium" class="pwd pwd_font">无</td>
									<td id="pwd_strong" class="pwd"></td>
								</tr>
							</table>
						</div>
						<div class="col-md-4">
							<span id="passwordError"></span>
						</div>
					</div>
					<div class="form-group">
						<label for="checkpassword" class="control-label col-md-3">
							确认密码:
						</label>
						<div class="col-md-5">
							<input type="password" class="form-control" name="checkpassword" id="checkpassword" placeholder="请再次输入密码" />
						</div>
						<div class="col-md-4">
							<span id="checkerror"></span>
						</div>
					</div>
					<input type="submit" id="submitBtn" class="btn btn-primary col-md-offset-3" style="width:10rem" value="注册"/>
				</form>
			</div>
		</div>
	</div>
</body>
</html>
②Servlet代码:
package com.remoa;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.servletexception;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ValidateLogin")
public class ValidateLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,IOException {
		response.getWriter().append("Served at: ").append(request.getcontextpath());
	}

	protected void doPost(HttpServletRequest request,IOException {
		String account = request.getParameter("account");
		List<String> accountList = new ArrayList<String>();
		accountList.add("remoa1");
		accountList.add("remoa2");
		accountList.add("remoa3");
		accountList.add("remoa4");
		for(Iterator<String> iter = accountList.iterator(); iter.hasNext();){
			if(account.equals(iter.next())){
				response.getWriter().print("1");
				return;
			}
		}
		response.getWriter().println("0");
	}
}
③运行结果:
图7.3 用户名检测运行结果

图7.4 非正确填写点击提交事件响应结果

(3)响应内容为XML数据:
①页面示例代码版本一:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" type="text/css" href="<%=request.getcontextpath() %>/bootstrap/css/bootstrap.min.css" >
		<title>获取xml数据</title>
		<script type="text/javascript">
			//创建异步对象
			function createXMLHttpRequest(){
				try{
					return new XMLHttpRequest();
				}catch(e){
					try{
						//IE6.0
						return new ActiveXObject("Msxml2.XMLHTTP");
					}catch(e){
						try{
							//IE5.5及更早版本
							return new ActiveObject("Microsoft.XMLHTTP");
						}catch(e){
							throw e;
						}
					}
				}
			};
		
			//在文档加载完毕后马上执行
			window.onload = function(){
				//获取按钮
				var btn = document.getElementById("btn");
				//给按钮的点击事件注册监听
				btn.onclick = function(){
					//使用ajax的四步操作
					//1、得到异步对象
					var request = createXMLHttpRequest(); 
					//2、打开与服务器的连接
					request.open("GET","/Learn201705/XMLServlet",以及服务器的状态码为200(响应成功)
						if(request.status = 200 && request.readyState == 4){
							//获取服务器的响应结果
							var doc = request.responseXML.documentElement;
							var stuArr = doc.getElementsByTagName("student");
							var number,name,sex,age;
							var text = "<table class='table table-condensed table-bordered table-striped'><tr><th>学号</th><th>姓名</th><th>性别</th><th>年龄</th></tr>";
							for(i = 0; i < stuArr.length; i++){
								text = text + "<tr>";
								number = stuArr[i].getAttribute("number");
								try{
									text = text + "<td>" + number + "</td>";
								}catch(e){
									text = text + "<td>/</td>";
								}
								name = stuArr[i].getElementsByTagName("name");
								try{
									text = text + "<td>" + name[0].firstChild.nodeValue + "</td>";
								}catch(e){
									text = text + "<td>/</td>";
								}
								sex = stuArr[i].getElementsByTagName("sex");
								try{
									text = text + "<td>" + sex[0].firstChild.nodeValue  + "</td>";
								}catch(e){
									text = text + "<td>/</td>";
								}
								age = stuArr[i].getElementsByTagName("age");
								try{
									text = text + "<td>" + age[0].firstChild.nodeValue  + "</td>";
								}catch(e){
									text = text + "<td>/</td>";
								}
								text = text + "</tr>";
							}
							text = text + "</table>";
							document.getElementById("show").innerHTML = text;
						}
					};
				};
			};
		</script>
	</head>
	<body>
		<div class="container">
			<button id="btn" class="btn btn-primary">点击这里</button>
			<h1 id="show"></h1>
		</div>
	</body>
</html>
页面示例代码版本二:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<Meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link rel="stylesheet" type="text/css" href="<%=request.getcontextpath() %>/bootstrap/css/bootstrap.min.css" >  
		<title>获取xml数据</title>
		<script type="text/javascript">
			//创建异步对象
			function createXMLHttpRequest(){
				try{
					return new XMLHttpRequest();
				}catch(e){
					try{
						//IE6.0
						return new ActiveXObject("Msxml2.XMLHTTP");
					}catch(e){
						try{
							//IE5.5及更早版本
							return new ActiveObject("Microsoft.XMLHTTP");
						}catch(e){
							throw e;
						}
					}
				}
			};
		
			//在文档加载完毕后马上执行
			window.onload = function(){
				//获取按钮
				var btn = document.getElementById("btn");
				//给按钮的点击事件注册监听
				btn.onclick = function(){
					//使用ajax的四步操作
					//1、得到异步对象
					var request = createXMLHttpRequest(); 
					//2、打开与服务器的连接
					request.open("GET",以及服务器的状态码为200(响应成功)
						if(request.status = 200 && request.readyState == 4){
							//获取服务器的响应结果
							var doc = request.responseXML.documentElement;
							var stuArr = doc.getElementsByTagName("student");
							var text = "<table class='table table-condensed table-bordered table-striped'><tr><th>学号</th><th>姓名</th><th>性别</th><th>年龄</th></tr>";
							var name,number,age;
							for(i = 0; i < stuArr.length; i++){
								text = text + "<tr>";
								var arr = stuArr[i];
								number = arr.getAttribute("number");
								if(number == null){
									number = "/";
								}
								try{
									name = arr.getElementsByTagName("name")[0].textContent; 
								}catch(e){
									name = "/";
								}
								try{
									sex = arr.getElementsByTagName("sex")[0].textContent;
								}catch(e){
									name = "/";
								}
								try{
									age = arr.getElementsByTagName("age")[0].textContent;
								}catch(e){
									age = "/";
								}
								text = text + "<td>" + number + "</td><td>" + name + "</td><td>" + sex + "</td><td>" + age + "</td></tr>";
							}
							text = text + "</table>";
							document.getElementById("show").innerHTML = text;
						}
					};
				};
			};
		</script>
	</head>
	<body>
		<div class="container">  
            <button id="btn" class="btn btn-primary">点击这里</button>  
            <h1 id="show"></h1>  
        </div>  
	</body>
</html>
②Servlet代码:
package com.remoa;

import java.io.IOException;
import javax.servlet.servletexception;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/XMLServlet")
public class XMLServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,IOException {
		System.out.println("进来------------XMLServlet");
		String xml = "<students>"
						+ "<student number='3114005847'>"
							+ "<name>张三</name>"
							+ "<sex>male</sex>"
							+ "<age>18</age>"
						+ "</student>"
						+ "<student number='3114005848'>"
							+ "<name>李四</name>"
							+ "<sex>male</sex>"
						+ "</student>"
						+ "<student number='3114005849'>"
							+ "<name>王五</name>"
							+ "<age>18</age>"
							+ "<tel>13334445556</tel>"
					+ "</student>"
					+ "</students>";
		response.setContentType("text/xml;charset=utf-8");
		response.getWriter().print(xml);
	}

	protected void doPost(HttpServletRequest request,IOException {
		doGet(request,response);
	}

}
③运行结果:
图7.5 响应结果

Ajax学习一的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. ios – Objective-C中的Google用户serverAuthCode nil

    我正在尝试将GoogleSignIn框架集成到iOS应用程序中,并对服务器上的用户进行身份验证.我设法登录用户,但在–(void)signIn:(GIDSignIn*)signIndidSignInForUser:(GIDGoogleUser*)用户withError:(NSError*)错误委托方法,user.serverAuthCode为nil,我需要通过此服务器身份验证代码,嗯,验证服务器上

  3. xcode – Cordova plugin.xml添加“Header Search Paths”条目

    我希望将Cordova插件添加到Xcode项目后,在“HeaderSearchPaths”下添加一个新条目.如何在Cordovaplugin.xml文件中进行配置?

  4. ios – 有关多个连接/提要/视图的XML解析的设计/实现建议

    >我应该在每个视图中都有解析器类/对象或解析XML提要吗?

  5. iOS的相当于Android的colors.xml的是什么?

    如果没有,组织整个应用程序使用的颜色的最佳方法是什么?

  6. iOS中的XML转换为JSON

    我需要将XML响应转换为JSON.我的XML响应:我正在使用本网站的XMLReader支持文件:XMLReader我正在使用此代码将XML转换为JSON我收到了JSON响应:我需要这样的回应:我在线转换时得到这个回应.如何获得这样的回应提前致谢.解决方法此代码不会将任何内容转换为JSON.它给你一个NSDictionary.您需要从字典中实际创建JSON数据.尝试这个大小.

  7. ios – Info.plist格式不正确

    解决方法plist文件是严格指定格式的XML文档;XML和PropertyList结构都有非常严格的规则.如果您尝试手动编辑info.plist(即文本),您可以轻松搞砸事情,方法是打开Asas>源代码:您不太可能正确使用此格式.因此,您应该始终使用OpenAs>编辑info.plist.物业清单:这允许属性列表编辑器为您生成XML,并且不太可能在生成的XML结构中出错.当然,我想你仍然可能搞砸某些东西的价值……

  8. ios – 在没有XML的情况下更新sqlite数据库

    我的应用程序需要来自sqlite数据库的数据.它将附带此数据库的一个版本,但我需要定期更新它(很可能每月一次).通常情况下,我一直在通过我设置的一堆网络服务将我的应用程序的其他部分的更新作为XML发送,但我现在正在处理的这个特定数据库非常大(大约20-30MB),而且我当我尝试以这种方式发送时出现超时错误.我尝试将数据库放在我的公司服务器上,然后将其下载到NSData对象中.然后我将该数据对象保存

  9. ios – CloudKit – 如何保存记录如果不存在

    我正在尝试创建一个包含唯一值的记录类型,并将作为另一个记录类型的目标引用对象.例如,录制类型–电影将包含用户提交的唯一电影列表.而且FavoriteMovies将包含用户参考和电影参考.用户可以从现有电影列表中进行选择,也可以向其中添加新电影.如果我创建一个新的电影记录,而另一个用户创建一个具有相同名称的新记录(在我检索电影列表之后,但在我尝试添加新电影之前),则会出现问题.这两个新记录被认为是具

  10. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部