Ajax处理XML数据演示
从网页中发送一个XML格式的数据,到后台解析出来,将结果转换成XML格式发送回去,交给前台解析
这里演示为传Name,和Age
在JS中写函数:
导入核心标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
函数为:
<script type="text/javascript">
function send(){//采用post发送XML数据
//Ajax对象xhr
var xhr = null;
if(window.XMLHttpRequest){//高版本IE
xhr=new XMLHttpRequest();
}else{//低版本
xhr= new ActiveXObjct("Microsoft.XMLHttp");
}
//请求后台
var url="<c:url value='/XmlServlet'/>";
xhr.open("post", url, "true");//异步
xhr.onreadystatechange =function(){
if(xhr.readyState==4){//返回
if(xhr.status==200){//正常响应
//var res = xhr.responseText;
//alert(res);这里是没有解析的
//解析后台发来的XML格式的数据
var xmlDomObj = xhr.responseXML;//对应servlet的响应格式
//使用前端的dom模型(DHTML)来解析
var users = xmlDomObj.getElementsByTagName("user");
for(var i=0;i<users.length;i++){
var id =users[i].getAttribute("id");
var nm =users[i].childNodes[0].firstChild.data;
var age =users[i].childNodes[1].firstChild.data;
alert(id+","+nm+","+age);
}
}
}
};
//把页面提交的数据封装成xml格式上传
var name = document.getElementById("nm").value;
var age = document.getElementById("ag").value;
//校验省略
var xml="<user> <name>"+name+"</name> <age>"+age+"</age> </user>" ;//根
xhr.send(xml);
}
</script>
前端处理完毕后,发送到XmlServlet:
在POST中处理:
可以用@WebService的方式,不配置web.xml建立Servlet
//接受前端发来的XML数据,并解析
request.setCharacterEncoding("utf-8");
InputStream in = request.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = null;
String xml = "";
while( (line=br.readLine())!=null ){
xml=xml+line ;
}
System.out.println(xml);
//解析XML--dom4j包
SAXReader sax = new SAXReader();
try {
Document dom = sax.read(new StringReader(xml));//内存流
Element root = dom.getRootElement();
String name = root.elementText("name");
String age = root.elementText("age");
System.out.println("name="+name+","+"age="+age);
} catch (DocumentException e) {
e.printStackTrace();
}
///向前端ajax发送XML格式的数据/
//一般是List<User>数据,且来自dao查询
List<User> users = new ArrayList<User>();
users.add(new User("U001","Jack","20"));
users.add(new User("U002","张三","30"));
//转换格式
String res = "<users>";
for(User u : users){
res+="<user id=\"" + u.getId()+"\"><name>"+u.getName()+"</name><age>"+
u.getAge()+"</age></user>";
}
res+="</users>";
//一定要设置XML的响应格式
response.setContentType("text/xml;charset=utf-8");
这里麻烦在于要自己手动写XML,然后发送到前端解析
所用到的domain:值对象