公司最近和别的公司对接接口。大概看了以前的,都用的是axis的webservice调用对方给定的wsdl,你只要给定参数就可以访问。而这次给的却是一个url。开始还一直不明白咋回事,后来发现是思维固化,人家给的就是一个URL请求路径。也是只要传递参数,然后接受返回数据就完事。一下就想到使用网络编程技术就完事了。
下面是一个简单的例子演示场景。
对应的包结构:

首先简单写个servlet:
package date2011_11_14;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class web extends HttpServlet{
//doGet方法
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获得传递过来的name,age值
String name = req.getParameter("name");
String age = req.getParameter("age");
//控制台输出
System.out.println("doGet method is called!");
System.out.println("name-->" + name + " age-->" + age);
//返回数据
PrintWriter out = resp.getWriter();
out.println("doGet method is called!");
out.println("name-->" + name + " age-->" + age);
out.close();
}
//doPost方法
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获得传递过来的name,age值
String name = req.getParameter("name");
String age = req.getParameter("age");
//控制台输出
System.out.println("doPost method is called!");
System.out.println("name-->" + name + " age-->" + age);
//返回数据
PrintWriter out = resp.getWriter();
out.println("doPost method is called!");
out.println("name-->" + name + " age-->" + age);
out.close();
}
}
其web.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>URLtest</servlet-name>
<servlet-class>date2011_11_14.web</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>URLtest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
完成servlet后,启动服务器。
接下来我们写个测试类,如下:
package date2011_11_14;
import java.net.*;
import java.io.*;
public class URLtest {
public static void main(String[] args) throws Exception {
//此路径就是调用servlet的路径,在web.xml中有配置
String url = "http://localhost:8080/blog/test";
//使用GET方式访问
doGet(url + "?name=TOM&age=11");
System.out.println("***************");
//使用POST方式访问
doPost(url);
}
public static void doGet(String testURL) throws Exception{
URL url = new URL(testURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//实际默认情况下就是GET方式,只是让大家知道是GET方式调用,这里可以不写这行,
con.setRequestMethod("GET");
//如果这里使用con.getOutputStream则前面设置的GET无效,转为POST。所有如果只想使用GET方式,则下面5行都不写。
InputStream is = con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//输出返回信息
String s;
while((s = br.readLine()) != null){
System.out.println(s);
}
br.close();
}
public static void doPost(String testURL) throws Exception{
URL url = new URL(testURL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//如果是post传输,需设置doOutput为true
con.setDoOutput(true);
//设置不用缓存
con.setUseCaches(false);
//默认情况下就是GET方式
con.setRequestMethod("POST");
//如果使用下面OutputStream则前面设置的GET无效,转为POST。所有如果只想使用GET方式,则下面5行都不写。
OutputStream os = con.getOutputStream();
//传递参数
String content = "name=TOM&age=11";
PrintWriter pw = new PrintWriter(os);
pw.print(content);
pw.close();
InputStream is = con.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//输出返回信息
String s;
while((s = br.readLine()) != null){
System.out.println(s);
}
br.close();
}
}
写完后运行即可,这时候,服务器段控制台输出如下:
doGet method is called!
name-->TOM age-->11
doPost method is called!
name-->TOM age-->11
而测试类控制台输出如下:
doGet method is called!
name-->TOM age-->11
***************
doPost method is called!
name-->TOM age-->11
使用这个可以在自己的servlet中调用别人给的接口路径的servlet,完成对接工作。
如果给的是一个wsdl,可以使用axis2,这里就不细说了。网上一大堆,都差不多相互粘贴。这里给个地址自己看吧。
http://wenku.bai
du.com/view/
ddc950d226fff705cc170aeb.html

- 大小: 7.7 KB