其实说的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