调用服务器端是Servlet的接口

在跨系统调用接口时,经常遇到的是WebService的接口,当然,也会遇到Servlet写的接口,现在就总结一下我们调用服务器端是Servlet的接口的客户端的调用方法。

主要使用java的网络编程的两个类java.net.HttpURLConnection和java.net.URL以及IO流的操作。

现在就分享一下我们的示例代码:

public class ZHXBatchTask {

	private static Logger log = Logger.getLogger(ZHXBatchTask.class);
	
	ZHXService zHXservice = ZHXService.getInstance();
	
	ZHXBatchPolicyService zHXBathPollicyService = ZHXBatchPolicyService.getInstance();

	public ZHXBatchTask() {

	}

	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		new ZHXBatchTask().runTask();
	}
	
	/**
	 * 创建连接,并返回
	 */
	public HttpURLConnection getConn(){
		
		InsuranceRequest request = new InsuranceRequest();
		
		request.setCompanyCode("SSPI");
		request.setPassword("111");
		request.setFlag("item");
		request.setBeginTime("20110523153000");
		request.setEndTime("20110523154000");
		
		String res = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
		XStream xx = new XStream(new DomDriver());
		xx.alias("InsuranceRequest", InsuranceRequest.class);//别名
		xx.alias("PolicySchedule", PolicySchedule.class);
		URL url = null;
		HttpURLConnection conn = null;
		
		StringBuffer requestParam = new StringBuffer();
		requestParam.append("<InsuranceRequest><CompanyCode>").append(request.getCompanyCode()).
		append("</CompanyCode><Password>").append(request.getPassword()).append("</Password><Flag>").
		append(request.getFlag()).append("</Flag><BeginTime>").append(request.getBeginTime()).
		append("</BeginTime><EndTime>").append(request.getEndTime()).append("</EndTime></InsuranceRequest>");
		try{
			//设置代理
			System.setProperty("proxySet", "true");         
			System.setProperty("http.proxyHost", "10.195.113.100");         
			System.setProperty("http.proxyPort", "8002");  
			//调用服务器端
			url = new URL("http://localhost:9090/insurancetest/insuranceservice?request="+requestParam);
			conn = (HttpURLConnection)url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("GET");
			//以下是POST方式
//			conn.setRequestMethod("POST");
//			System.out.println("send:\n"+res + xx.toXML(request));
//			conn.getOutputStream().write(
//					(res + xx.toXML(request)).getBytes());
//			conn.getOutputStream().flush();
//			conn.getOutputStream().close();
			System.out.println("请求发送成功,等待响应。。。。");
			
			///有的时候需要设置代理 用户名:密码
			String authentication = "xxxx:****";         
			String encodedLogin = new BASE64Encoder().encodeBuffer(authentication.getBytes());         
			encodedLogin = encodedLogin.replaceAll("\n", "");         
			conn.setRequestProperty("Proxy-Authorization", "Basic " + encodedLogin);          
		}catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public void runTask() {
		
		HttpURLConnection conn = null;
		try{
			//获取连接
			conn = this.getConn();
			conn.connect();  
			XStream xx = new XStream();
			//获取响应代码
			int code = conn.getResponseCode();
			if(code == 200){
				System.out.println("响应成功。。。。");
				InputStream is = conn.getInputStream(); 
				
				//处理流中的中文,防止出现乱码
				Reader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
				
				//要加下面的,否则会报错 com.thoughtworks.xstream.mapper.CannotResolveClassException: InsuranceResponse :InsuranceResponse
				//涉及自定义类的情况都需要alias		
				xx.alias("InsuranceResponse", InsuranceResponse.class);
				xx.alias("PolicySchedule", PolicySchedule.class);
				//XStream Test
				InsuranceResponse ir =  (InsuranceResponse) xx.fromXML(reader);
				System.out.println(ir);
				
				//第二种方法:使用DOM4j解析XML,并转成JavaBean
//				InsuranceResponse ir = new ZHXXml2Bean().xml2beanZHXInsuranceResponse(reader);
//				System.out.println(ir);
				
				System.out.println("请求返回结果:\n"+xx.toXML(ir));

				
				reader.close();
				is.close();
				
			}
		}catch (Exception e) {
			log.error("", e);
		} finally {
			if (conn != null)
				conn.disconnect();
		}
	}

	/**
	 * 返回不同系统的路径标识
	 */
	public String getPathFlag() {
		String pathFlag = System.getProperty("file.separator");
		return pathFlag;
	}
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值