最近我們公司的jsp網站要和另一家公司的asp網站做通訊,之間通過xml傳遞信息
現假如我們公司是A,對方公司是B,如果A發送一條信息給B,B必須反饋一條信息表示是否執行成功。這里有兩種模式可以使用,
第一:A、B把對方都當做服務器進行消息發送
第二:A相當于瀏覽器、B相當于服務器,A發送一個消息給B,B直接返回給A信息。
下面我們來看看這兩種方式分別怎么實現?
第一種:
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服務器的接收路徑");
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的請求后,也以類似于1(當然asp中的代碼我不知道怎么寫)將反饋信息發送到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服務器的接收路徑");
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)服務器的代碼后用
byte[] byts = new byte[Request.InputStream.Length];
Request.InputStream.Read(byts,0,byts.Length);
然后用Response.OutputStream.write()返回信息
3、A(a.jsp)接收B服務器的反饋信息(和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();
}
其中訪問一個頁面主要用到了HttpURLConnection這個類,當然還有其它幾種方式可以使用,具體請參見我的文章http://www.tkk7.com/vickzhu/archive/2008/11/12/240013.html