jsf 请求外部url 接收xml
jsf,访问外部的一个url,例如:https://www.google.com
地址返回一个xml的文件。
<?xml version="1.0" encoding="UTF-8" ?>
- <DOCUMENTS>
- <MORELINK>
- <![CDATA[ https://xxxxxx/jsdt_cl.jsp?ChannelId=120&WithChild=0 ]]>
</MORELINK>
- <DOCS>
- <DOC>
- <TITLE>
- <![CDATA[ 2012工作汇报 ]]>
</TITLE>
- <LINK>
- <![CDATA[ https://xxxxxx/document_show.jsp?ChannelId=120&DocumentId=12501&PageId=1 ]]>
</LINK>
<TIME>2012-03-21 10:43:24</TIME>
</DOC>
- </DOCS>
</DOCUMENTS>
使用的servlet建立连接请求的方式,获得响应信息。简单实现代码如下。
String URL_ = "https://xxxxx/newsxml.xml";
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) new URL(URL_).openConnection();
if (conn == null) {
System.out.println("连接失败!");
}
conn.addRequestProperty("content-type", "text/xml;charset=utf-8");
conn.setDoInput(true);
conn.setDoOutput(true);
BufferedInputStream bin=null;
InputStream inStream = conn.getInputStream();
bin= new BufferedInputStream(inStream);
int len = bin.available();
System.out.println( "len: " + len);
byte[] tmp = new byte[len];
bin.read(tmp);
System.out.println( "return value: " + new String(tmp,"utf-8"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
最后成功打印。然后推送前端显示即可。
---------------------------------Leon
之前用jquery调用实现过,再访问iis发布的页面能加载。但是到了实际的环境中,jsp页面返回,需要认证,需要调用两个页面就没有应答了。下面也附上代码供其他用:
$(document).ready(function(){
//javascript建立请求连接,访问第一个地址
var xmlrequest;
//对于Firefox和Opera等浏览器
if (window.XMLHttpRequest) {
xmlrequest = new XMLHttpRequest();
}
else {
var MSXML=['Msxml2.XMLHTTP.7.0','Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
for (var i=0;i<MSXML.length;i++) {
try {
xmlrequest = new ActiveXObject(MSXML[i]);
break;
}
catch (ex) {
// alert("Cannot create http request");
}
}
}
xmlrequest.open("GET", "https://xxx.com", true);
xmlrequest.send("leon");
//alert(xmlrequest.readyState);
///////////------------------------
//调用数据输出的地址
$.ajax({
type: "get",
url: "https://xxxxxx/newsxml.xml",
beforeSend: function(XMLHttpRequest){
$("#axjaresult").html("load......");//输出到页面一个信息
},
dataType:"html"
,
success:function(data, textStatus){
var xml;
if (typeof data =="string") {
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
};
var morelink=$(xml).find("MORELINK").text();
var s="";
$(xml).find("DOC").each(function(i){
var titletext=$(this).children("TITLE").text();
var linktext =$(this).children("LINK").text();
var timetext =$(this).children("TIME").text();
//组装显示的信息
s+="<div style='margin-top:4px;'><div class='info_images' style='margin-top:4px;'></div>"+
"<div style='height:21px;border-bottom:1px dotted;'><a target=_blank href='"+linktext+"'>"+
"<div style='float:left;width:200px;overflow: hidden; text-overflow:ellipsis;cursor: pointer;'>"+
"<nobr><span title="+titletext+">"+titletext+"</span></nobr></div><div >"+timetext.substring(0,11)+"</div></a></div></div> ";
if(i==5){return false;}
});
$("#axjaresult").html(s);//作用页面
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//请求出错处理
}
});
//------
});
//----------------