关于XML转送数据的编程思路,向大家请教(来者有分) 我感觉在本机生成http://weblogic:7001/xml.xml然后通知SESSIONEJB读起http://weblogic:7001/xml.xml ,简单点. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://weblogic:7001/servlet?xml="XML的具体内容"这是采用get方法,可以考虑用post方法提交就不存在url太长的问题了 to CAYU(中原) 你说在本机生成一个XML,是指在中间件服务器那端生成吗?可是客户端如何在服务器那生成xml呀 客户端生成xml文档以后通过form把文档的位置传给中间件,然后用bean下载文档内容。 WEB SERVICES不是现成的吗,干吗自己搞 在前台,把xml放到Document对象里,通过servlet把Document对象传回后台! 两年前我就在用类似的方法了,现在我们的成了成熟的产品了,支持vc,delphi,java,等,支持http,socket等等 建议你采用xmldom对象生成和解析XML,然后用XMLHTTP进行客户端与服务器端的通信,不用刷新页面,几乎可媲美C/S系统。下面是一段通信的代码,记住用异步方式通信,否则客户端可能会造成“假死”现象。 try { //用于发送命令的XMLHTTP对象 var oPost=new ActiveXObject("Microsoft.XMLHTTP"); oPost.open("POST", uri, true); //异步 oPost.setRequestHeader("Content-Length", words.length); oPost.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");//这句必须要 oPost.send(xmlstring); } catch(e) { alert(e.description +'\n\n创建Speaker对象失败!'); } ellee(抗日统一联盟-小鱼饵)你好,你写方法不错,但我还是有一点不太明白oPost.open("POST", uri, true); //异步中的URL我指向一个什么呢 servlet吗?那我这个SERVLET中如何接收发过来的XML呢?当我在SERVLET中生成好XML中,我如何传给前台页面,前台页面又如何接收到我传过来的XML呢? 在SERVLET中你可以用request.getInputStream()来接收XML;在前台页面你可以用一个DOM对象来接收,如var oXML=oPost.responseXML;下面你可以对这个DOM对象进行处理了var currNode = oXML.documentElement.selectSingleNode("heading");或者可以用普通字符来接收,如alert(oPost.responseText); 如果使用xmlhttp可以參考這一貼。http://expert.csdn.net/Expert/topic/2130/2130332.xml?temp=.3312036 下面是从我程序里面拿出来的,供参考://==========系统总控程序 ========================//==========comm.html ===========================//XMLDOM的状态发生变化时的事件句柄var maxConnectErrorCount=3;var connectErrorCount=0;function readyStateChange(){ dom = listener.dom; if (dom.readyState == 4) //接收完毕 { if(dom.parseError.errorCode != 0) //解析有错 { if(dom.parseError.errorCode==-2146697211) //错误为:连接服务器失败 { connectErrorCount++; if(connectErrorCount>maxConnectErrorCount) { listener.stopListen();// alert("连接服务器失败超过"+maxConnectErrorCount+"次,系统将退出。请重新登录!"); } } } else { connectErrorCount=0; displayer.display(dom); } }}//显示解析xmldom时的错误信息function displayError(dom){ var em=''; em=em + ' errorCode : '+ dom.parseError.errorCode+'\n'; em=em + ' filepos : '+ dom.parseError.filepos+'\n'; em=em + ' line : '+ dom.parseError.line+'\n'; em=em + ' linepos : '+ dom.parseError.linepos+'\n'; em=em + ' reason : '+ dom.parseError.reason+'\n'; em=em + ' srcText : '+ dom.parseError.srcText+'\n'; em=em + ' url : '+ dom.parseError.url+'\n'; alert(em); delete(em);}//==========发送请求的通信类========================//==========Speaker.js ===========================//==========Speaker类文件===========================/** * 发言者类 * * 1、该对象只负责向服务器端发送请求,不负责接收其响应; * 2、该对象是用户活动驱动的:只有在用户需要往发送请求 * 的时候才启动。 *///定义一个发言的类function Speaker(){ try { //用于发送命令的XMLHTTP对象 this.oPost=new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { alert("Speaker() \n" + e.description +'\n\n创建Speaker对象失败!'); return null; } this.speak = speak;}function speak(uri, xmlString){ try { this.oPost.open("POST", uri, true); //异步 this.oPost.setRequestHeader("Content-Length", xmlString.length); this.oPost.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//这句必须要 this.oPost.send(xmlString); } catch(e) { alert(e.description +'\n\n发送数据失败,系统将退出!'); destory(); } return false;}//==========接受应答的通信类========================//==========Listener.js ===========================//==========Listener类文件===========================/** * 监听者类 * * 1、自动启动; * 2、负责监听服务器端相关状态的变化,并通过XMLDOM接收该变化的结果; *//*** 构造监听者* uri 监听的uri*/function Listener(uri){ this.uri = uri; this.timer = null; this.interval = 1000; this.isListening = true; try { //初始化监听控件dom this.dom = new ActiveXObject("Microsoft.XMLDOM"); this.dom.async=true; //异步 this.dom.onreadystatechange=readyStateChange; } catch(e) { alert("Listener(uri) \n" + e.description +'\n\n创建Listener对象失败!'); return null; } this.listen = listen; this.startListen = startListen; this.stopListen = stopListen;}//启动自动刷新function startListen(){ if(this.isListening==false) return; this.listen(); //注意:setTimeout()方法是Listener类的外部方法,在调用 //Listener类的方法时,需要实例化了的Listener对象作前导 //这里是:listener this.timer = setTimeout("listener.startListen()", this.interval);}//停止自动刷新function stopListen(){ clearTimeout(this.timer); this.timer = null; this.isListening = false;}//获取最新的XML数据function listen(){ try { this.dom.load(this.uri); } catch(e) { alert("装载数据失败!URL = "+ this.uri + "\n\n" + e.description + "\n\n系统将停止自动刷新!"); stopListen(); return; }}//==========Displayer.js ===========================//==========Displayer类文件===========================/*** 显示者类:显示返回信息** 1、负责根据后端DOM中数据的变化,更新前端的面板显示;*///构造显示者function Displayer(){ this.displayCanvas = null; //显示信息的面板(如:div等) this.A = null; this.B = null; this.count = 0; //记录条数 this.getRecords = getRecords; this.display = display; this.output = output;}//显示XMLDOM数据function display(dom){ if(getRecords(dom)==false) return; for(i=0; i<this.count; i++ output(i); }//从XMLDOM对象获取数据function getRecords(dom){ ret = false; this.count = 0; try { this.A = dom.documentElement.selectNodes("//root/record/A"); this.B = dom.documentElement.selectNodes("//root/record/B"); this.count = this.A.length; ret = true; } catch(e) { alert("updateData() \n " + e.description + "\n\n解析应答数据失败!"); } return ret;}//将信息输出到显示面板上function output(i){ displayCanvas.innerHTML = this.A(i).text + this.B(i).text;} 在J2EE5中可以使用J2EE6的包吗 Hibernate自定义的属性 江湖救急啊,小弟经济危机了!!求生财之道. 求解这个是什么错!急急急 面对就业,我该怎么做? jquery 取值问题 java.util.zip.ZipException:missing entry name是什么异常? 一定要问:JBOSS的JAVA_HOME问题,郁闷啊! 求助!!关于xml问题,实在搞不懂!! 下面代码怎么理解 xp下jdk1.4装不上 请教一个javamail的问题
可以考虑用post方法提交就不存在url太长的问题了
你说在本机生成一个XML,是指在中间件服务器那端生成吗?可是客户端如何在服务器那生成xml呀
{
//用于发送命令的XMLHTTP对象
var oPost=new ActiveXObject("Microsoft.XMLHTTP");
oPost.open("POST", uri, true); //异步
oPost.setRequestHeader("Content-Length", words.length);
oPost.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");//这句必须要
oPost.send(xmlstring);
}
catch(e)
{
alert(e.description +'\n\n创建Speaker对象失败!');
}
中的URL我指向一个什么呢 servlet吗?那我这个SERVLET中如何接收发过来的XML呢?当我在SERVLET中生成好XML中,我如何传给前台页面,前台页面又如何接收到我传过来的XML呢?
var oXML=oPost.responseXML;
下面你可以对这个DOM对象进行处理了
var currNode = oXML.documentElement.selectSingleNode("heading");或者可以用普通字符来接收,如
alert(oPost.responseText);
http://expert.csdn.net/Expert/topic/2130/2130332.xml?temp=.3312036
//==========comm.html ===========================//XMLDOM的状态发生变化时的事件句柄
var maxConnectErrorCount=3;
var connectErrorCount=0;
function readyStateChange()
{
dom = listener.dom;
if (dom.readyState == 4) //接收完毕
{
if(dom.parseError.errorCode != 0) //解析有错
{
if(dom.parseError.errorCode==-2146697211) //错误为:连接服务器失败
{
connectErrorCount++;
if(connectErrorCount>maxConnectErrorCount)
{
listener.stopListen();
// alert("连接服务器失败超过"+maxConnectErrorCount+"次,系统将退出。请重新登录!");
}
}
}
else
{
connectErrorCount=0;
displayer.display(dom);
}
}
}//显示解析xmldom时的错误信息
function displayError(dom)
{
var em='';
em=em + ' errorCode : '+ dom.parseError.errorCode+'\n';
em=em + ' filepos : '+ dom.parseError.filepos+'\n';
em=em + ' line : '+ dom.parseError.line+'\n';
em=em + ' linepos : '+ dom.parseError.linepos+'\n';
em=em + ' reason : '+ dom.parseError.reason+'\n';
em=em + ' srcText : '+ dom.parseError.srcText+'\n';
em=em + ' url : '+ dom.parseError.url+'\n';
alert(em);
delete(em);
}
//==========发送请求的通信类========================
//==========Speaker.js ===========================
//==========Speaker类文件===========================
/**
* 发言者类
*
* 1、该对象只负责向服务器端发送请求,不负责接收其响应;
* 2、该对象是用户活动驱动的:只有在用户需要往发送请求
* 的时候才启动。
*///定义一个发言的类
function Speaker()
{
try
{
//用于发送命令的XMLHTTP对象
this.oPost=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
alert("Speaker() \n" + e.description +'\n\n创建Speaker对象失败!');
return null;
} this.speak = speak;
}
function speak(uri, xmlString)
{
try
{
this.oPost.open("POST", uri, true); //异步
this.oPost.setRequestHeader("Content-Length", xmlString.length);
this.oPost.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//这句必须要
this.oPost.send(xmlString);
}
catch(e)
{
alert(e.description +'\n\n发送数据失败,系统将退出!');
destory();
} return false;
}
//==========接受应答的通信类========================
//==========Listener.js ===========================
//==========Listener类文件===========================
/**
* 监听者类
*
* 1、自动启动;
* 2、负责监听服务器端相关状态的变化,并通过XMLDOM接收该变化的结果;
*//**
* 构造监听者
* uri 监听的uri
*/
function Listener(uri)
{
this.uri = uri; this.timer = null;
this.interval = 1000;
this.isListening = true; try
{
//初始化监听控件dom
this.dom = new ActiveXObject("Microsoft.XMLDOM");
this.dom.async=true; //异步
this.dom.onreadystatechange=readyStateChange;
}
catch(e)
{
alert("Listener(uri) \n" + e.description +'\n\n创建Listener对象失败!');
return null;
} this.listen = listen;
this.startListen = startListen;
this.stopListen = stopListen;
}//启动自动刷新
function startListen()
{
if(this.isListening==false)
return; this.listen(); //注意:setTimeout()方法是Listener类的外部方法,在调用
//Listener类的方法时,需要实例化了的Listener对象作前导
//这里是:listener
this.timer = setTimeout("listener.startListen()", this.interval);
}//停止自动刷新
function stopListen()
{
clearTimeout(this.timer);
this.timer = null;
this.isListening = false;
}
//获取最新的XML数据
function listen()
{
try
{
this.dom.load(this.uri);
}
catch(e)
{
alert("装载数据失败!URL = "+ this.uri + "\n\n" + e.description + "\n\n系统将停止自动刷新!");
stopListen();
return;
}
}//==========Displayer.js ===========================
//==========Displayer类文件===========================/**
* 显示者类:显示返回信息
*
* 1、负责根据后端DOM中数据的变化,更新前端的面板显示;
*///构造显示者
function Displayer()
{
this.displayCanvas = null; //显示信息的面板(如:div等) this.A = null;
this.B = null;
this.count = 0; //记录条数
this.getRecords = getRecords;
this.display = display;
this.output = output;
}
//显示XMLDOM数据
function display(dom)
{
if(getRecords(dom)==false)
return;
for(i=0; i<this.count; i++
output(i);
}
//从XMLDOM对象获取数据
function getRecords(dom)
{
ret = false;
this.count = 0; try
{
this.A = dom.documentElement.selectNodes("//root/record/A");
this.B = dom.documentElement.selectNodes("//root/record/B"); this.count = this.A.length;
ret = true;
}
catch(e)
{
alert("updateData() \n " + e.description + "\n\n解析应答数据失败!");
} return ret;
}//将信息输出到显示面板上
function output(i)
{
displayCanvas.innerHTML = this.A(i).text + this.B(i).text;
}