演示Ajax如何处理XML数据
最编程
2024-08-12 11:40:16
...
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:值对象
推荐阅读
-
演示Ajax如何处理XML数据
-
实例演示如何在SQLServer中使用存储过程进行数据的插入和更新操作
-
在JavaScript中,如何统一拦截并处理a链接跳转前的数据操作?
-
理解数据链路层:如何封装数据帧(包括附加信息、帧长度和各种填充方法)以及违规编码的处理
-
玩转大数据:如何处理、分享与剖析繁复信息——步骤2.8:脱敏处理
-
如何轻松地用Gson处理数据格式转换
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
快来学一手!面对高流量抢购的库存秒杀情况,阿里巴巴数据库是如何巧妙处理的?
-
如何轻松使用JMeter进行HTTP接口测试 - 一步步教你设置线程组、 cookie、默认值与Sampler,加上响应断言和监听器,打造基础测试案例。针对复杂情况,将子系统和流程测试分类组织,确保数据一致性。同时,别忘了感谢阅读,给新手提供实战学习资源与全套测试指南,助你轻松踏上自动化测试之路! - 在"测试计划"点击右键,添加"线程组"并设定初始"线程数"和"循环次数" - 配置"HTTP Cookie管理器"与"Http请求默认值",输入目标系统信息,如域名、端口、协议等,让所有相关Sampler共享这些默认设置 - 在线程组内增加"HTTP Request"的Sampler,并填入接口详情,比如路径、请求方法及参数 - 添加"响应断言"检查接口返回结果,通过正则表达式验证预期结果 - 安装监听器,实时查看测试执行状况 - 如需处理流程性接口,请依次添加多个相关Sampler,关联前后请求间的上下文数据 特别提示:为了帮助大家避免学习中的曲折,我们准备了详尽的视频和文档资料库,无论你是软件测试的新手还是老司机,都能从中找到所需的全方位支持。只需点击下方链接加入我们的学习交流社群,就能立刻获取这份珍贵的学习宝藏!再次感谢您的耐心阅读,愿它成为您前行路上的一大助力!
-
一种处理大型XML文件并将其存入数据库的方法