您的位置:首页 > 理论基础 > 计算机网络

HttpClient网络接口交互

2016-10-05 22:58 387 查看
在我之前的工作经历中有使用HttpClient直接进行的网络数据的传输,然后在这里我就将这个的过程以及相关的代码记录一下以防之后可能会使用到。

在这里我们简单的记录使用Httpclient进行接口的服务提供以及服务调用的两个方面的过程

服务端


在使用Httpclient进行数据交互的时候服务端的要求比较简单,一个servlet即可,在其中的部分数据的获取可能存在某些特殊的步骤,但是总体来说还是一个简单的servlet.

我们这就直接创建工程以及servlet(详细过程掠过)



具体的服务类的代码如下

package httpTest;

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class service extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println("xxxxxxxxxxxxxxxxxxxxxxx");

try {
//准备存放数据的byte数组
byte[] bufSource = null;
//		获取到输入流
InputStream ins = request.getInputStream();
//准备缓冲读取流
BufferedInputStream inStream = new BufferedInputStream(ins);
//准备缓冲输出流
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

byte[] b = new byte[1024];

int read = 0;
//每次读取1024进行转存
while ((read = inStream.read(b)) > 0) {

byteOut.write(b, 0, read);

}
//写入到数组中
bufSource = byteOut.toByteArray();
//关闭流
byteOut.close();
inStream.close();
ins.close();

//流转字符串   字符集自选
String strRequest = new String(bufSource, "GBK");
System.out.println("strRequest  = "+strRequest);
try {

//获取输出流
ServletOutputStream out = response.getOutputStream();

response.setContentType("text/plain:charset=GBK");

response.addHeader("Content-Disposition",

"inline; filename=\"temp.xml\"");

response.reset();

out.print(" zhengfang.sun response");

out.flush();

} catch (Exception ie) {

throw ie;

} finally {

}

} catch (Exception e) {

}

}
}

然后我们将我们这个servlet在web.xml里面注册一下

<servlet>

<servlet-name>test</servlet-name>

<servlet-class>httpTest.service</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>test</servlet-name>

<url-pattern>/test/*</url-pattern>

</servlet-mapping>

然后我们直接启动Tomcat就直接能够看到我们的结果了



客户端

我们有了服务端关键还是需要能够在其他应用中调用到这个服务才行,在服务端的例子中我们就简单的使用一个java工程来进行网络接口的调用,方便我们能够直观的看到我们的结果

新建一个java工程,然后写一个测试使用的类

package localhost.webserviceTest.test;

import java.io.InterruptedIOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.junit.Test;

public class Httptest {

@Test
public void communicate() throws Exception {

byte[] bufSource = null;

String serviceUrl = "";

// HTTPConnection connection = null;

PostMethod method = null;

try {

serviceUrl = "http://localhost:8080/HttpServicePro/test/x";

String strSend = "zhengfang.sun requesting";
//新建连接类
HttpClient client = new HttpClient();
//新建连接属性类
HttpClientParams clientParams = new HttpClientParams();

int soTimeout = 1000;// 返回超时时间

int connectionManagerTimeout = 1000;// 连接超时时间

//设置各个属性
clientParams.setSoTimeout(soTimeout);
clientParams.setConnectionManagerTimeout(connectionManagerTimeout);
clientParams.setContentCharset("GBK");
client.setParams(clientParams);
client.getHttpConnectionManager().getParams().setConnectionTimeout(connectionManagerTimeout);

method = new PostMethod(serviceUrl);

//在这里我们将我们的请求信息(一般来说是XML或者是JSON的报文)放入到PostMethod中
method.setRequestBody(strSend);
//设置调用时候的头信息
method.setRequestHeader("Content-type", "text/xml; charset=GBK");
//执行调用
int status = client.executeMethod(method);

} catch (Exception e1) {

throw new Exception(" 系统连接失败! ", new InterruptedIOException());

}

// 取得接受返回消息

bufSource = method.getResponseBody();

System.out.println("response ===== "+new String(bufSource,"GBK"));

method.releaseConnection();

}

}

然后我们就能通过调用我们之前的那个servlet进行简单的测试了

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  httpcllient web
相关文章推荐