最近我們公司的jsp網(wǎng)站要和另一家公司的asp網(wǎng)站做通訊,之間通過xml傳遞信息
現(xiàn)假如我們公司是A,對(duì)方公司是B,如果A發(fā)送一條信息給B,B必須反饋一條信息表示是否執(zhí)行成功。這里有兩種模式可以使用,
第一:A、B把對(duì)方都當(dāng)做服務(wù)器進(jìn)行消息發(fā)送
第二:A相當(dāng)于瀏覽器、B相當(dāng)于服務(wù)器,A發(fā)送一個(gè)消息給B,B直接返回給A信息。
下面我們來看看這兩種方式分別怎么實(shí)現(xiàn)?
第一種:
1、A(a.jsp)的代碼:
StringBuffer sb=new StringBuffer("<?xml version=\"1.0\" encoding=\"GBK\"?>");
sb.append("<User>");
sb.append("<HEAD>");
sb.append("<SUCCESS></SUCCESS>");
sb.append("</HEAD>");
sb.append("<BODY>");
sb.append("<MOBILE></MOBILE>");
sb.append("<NAME></NAME>");
sb.append("<SEX></SEX>");
sb.append("</BODY>");
sb.append("</User>");
URL url = new URL("B服務(wù)器的接收路徑");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type", "text/xml;charset=gbk");
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Length", String.valueOf(xml.length()));
conn.setConnectTimeout(5000);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(sb.toString().getBytes());
os.flush();
os.close();
2、B服務(wù)器接收到A的請(qǐng)求后,也以類似于1(當(dāng)然asp中的代碼我不知道怎么寫)將反饋信息發(fā)送到A的指定路徑(b.jsp)
3、A(b.jsp)接收B的反饋信息:
InputStream is=request.getInputStream();
第二種:
1、A(a.jsp)的代碼
StringBuffer sb=new StringBuffer("<?xml version=\"1.0\" encoding=\"GBK\"?>");
sb.append("<User>");
sb.append("<HEAD>");
sb.append("<SUCCESS></SUCCESS>");
sb.append("</HEAD>");
sb.append("<BODY>");
sb.append("<MOBILE></MOBILE>");
sb.append("<NAME></NAME>");
sb.append("<SEX></SEX>");
sb.append("</BODY>");
sb.append("</User>");
URL url = new URL("B服務(wù)器的接收路徑");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type", "text/xml;charset=gbk");
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Length", String.valueOf(xml.length()));
conn.setConnectTimeout(5000);
conn.setDoOutput(true);
OutputStream os = conn.getOutputStream();
os.write(sb.toString().getBytes());
os.flush();
os.close();
2、B接收到A(a.jsp)服務(wù)器的代碼后用
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts,0,byts.Length);
然后用Response.OutputStream.write()返回信息
3、A(a.jsp)接收B服務(wù)器的反饋信息(和1的代碼同在a.jsp中,并且就接著1代碼的后面)
if(conn.getResponseCode()==200){
String line=null;
String body="";
is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
body += line;
}
conn.disconnect();
}
其中訪問一個(gè)頁面主要用到了HttpURLConnection這個(gè)類,當(dāng)然還有其它幾種方式可以使用,具體請(qǐng)參見我的文章http://www.tkk7.com/vickzhu/archive/2008/11/12/240013.html