java servlet或者struts通过HTTP方式传输数据到另外一系统


其实说的HTTP方式就是一个类Servlet而已.


传输代码可以在Servlet里面也可以用Struts2来做

代码为:

public String toGxxxServlet() {
		try {
			//地址后面加上要传的参数.
			URL url = new URL("http://10.0.7.115:8082/2dcode/ToLscmServlet?logistics=1111&data=2222&warehouse=3333");
			// 设置网络地址
			HttpURLConnection httpUrlConnection = getHttpURLConnection(url);// 获取连接
			writeInfoToGxxx(httpUrlConnection); // 传输xml到....

			InputStream inStrm = httpUrlConnection.getInputStream(); // <===注意,实际发送请求的代码段就在这里
			String resultxml = resultInfoByGxxx(httpUrlConnection,inStrm);// 接收返回的数据
			System.out.println(resultxml);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return SUCCESS;
	}

	/**
	 * 设置HttpURLConnection必要参数
	 */
	private HttpURLConnection getHttpURLConnection(URL url) throws IOException {
		HttpURLConnection httpUrlConnection = (HttpURLConnection) url
				.openConnection();
		// 设置超时
		httpUrlConnection.setConnectTimeout(60000);
		httpUrlConnection.setReadTimeout(60000);
		// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
		// http正文内,因此需要设为true, 默认情况下是false;
		httpUrlConnection.setDoOutput(true);
		// 设置是否从httpUrlConnection读入,默认情况下是true;
		httpUrlConnection.setDoInput(true);

		httpUrlConnection.setInstanceFollowRedirects(true);
		// 设定请求的方法为"POST",默认是GET
		httpUrlConnection.setRequestMethod("POST");
		// 设定传送的内容类型是可序列化的java对象
		// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
		httpUrlConnection.addRequestProperty("Content-type",
				"application/x-java-serialized-object");//注意这个参数.有很多种.如果对方没有接到数据,多注意这个参数配置,我也给这个参数懵了好几天
		// Post 请求不能使用缓存
		httpUrlConnection.setUseCaches(false);
		httpUrlConnection.connect();
		return httpUrlConnection;
	}

	/**
	 * 将数据传输到对方
	 * @param httpUrlConnection
	 * @throws IOException
	 */
	private void writeInfoToGxxx(HttpURLConnection httpUrlConnection)
			throws IOException {
		// 调用HttpURLConnection连接对象的getInputStream()函数,
		// 将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。
		OutputStream outStrm = httpUrlConnection.getOutputStream();
		//刷新一下就过去了,必须要.
		outStrm.flush();
		outStrm.close();// 关闭
	}

	/**
	 * 返回内容写入
	 * @param httpUrlConnection
	 * @param inStrm
	 * @return
	 * @throws IOException
	 */
	private String resultInfoByGxxx(HttpURLConnection httpUrlConnection,InputStream inStrm)
			throws IOException {
		byte b[] = new byte[1024];
		int len = 0;
		int temp = 0; // 所有读取的内容都使用temp接收
		while ((temp = inStrm.read()) != -1) { // 当没有读取完时,继续读取
			b[len] = (byte) temp;
			len++;
		}
		inStrm.close();// 关闭
		return new String(b, 0, len);
	}


POST方式

HttpURLConnection httpUrlConnection = getHttpURLConnection(url);// 获取连接
			DataOutputStream outStrm = new DataOutputStream(httpUrlConnection.getOutputStream());
			outStrm.writeBytes(xxxx);参数
			outStrm.flush();
			outStrm.close();// 关闭

HttpURLConnection httpUrlConnection = (HttpURLConnection) url
				.openConnection();
		// 设置超时
		httpUrlConnection.setConnectTimeout(60000);
		httpUrlConnection.setReadTimeout(60000);
		// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在
		// http正文内,因此需要设为true, 默认情况下是false;
		httpUrlConnection.setDoOutput(true);
		// 设置是否从httpUrlConnection读入,默认情况下是true;
		httpUrlConnection.setDoInput(true);

		httpUrlConnection.setInstanceFollowRedirects(true);
		// 设定请求的方法为"POST",默认是GET
		httpUrlConnection.setRequestMethod("POST");
		// 设定传送的内容类型是可序列化的java对象
		// (如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException)
		httpUrlConnection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded");//注意这里的参数
		// Post 请求不能使用缓存
		httpUrlConnection.setUseCaches(false);
		httpUrlConnection.connect();
		return httpUrlConnection;

xxxx为参数:logistics=1111&data=2222&warehouse=3333不要在地址后面带?问号
url为地址:http://10.0.7.115:8082/2dcode/ToLscmServlet










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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值