最近我们公司的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.blogjava.net/vickzhu/archive/2008/11/12/240013.html